使用定时器编程,在实时显示当前时间,每隔2秒时钟内容更新一次

编写一个java application应用程序,使用定时器编程,在实时显示当前时间,每隔2秒时钟内容更新一次。

定时器Timer类

Timer是一种定时器类,用来在一个后台线程计划反复多次执行指定任务。程序开始都是main开启的,定时运行程序是由另一个线程控制,当main死了,另一个线程还在运行,还可以继续走定时。
Timer类构造器:
Timer(Boolean isDaemon)
创建一个新计时器,可以指定其相关的线程作为守护程序运行。如果作为后台线程,main一执行完,就全部为后台线程了,没有其他的线程了,它也就会停止运行了,所以这里为false,表示自己不是后台线程,main不执行了还可以继续运行。

//安排线程定时运行
void schedule(Timer Task, Date firstTime, long period)
Date firstTime:开始的时间
long period:间隔的毫秒值
Timer Task:线程在指定的时间内会调用task任务,为抽象类在传的时候传的是它的子类对象;所以定义类,继承TimerTask,重写run方法,写一个类去继承有点麻烦,所以可写成匿名内部类。
schedule:时间表

程序代码:

package task6th;
//导入格式化和分析数据的具体类
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于8051单片机的时钟程序,实现了通过外部晶振计时,并将时分分别显示在4位数码管上: ``` #include <reg51.h> #define uchar unsigned char #define uint unsigned int #define CLK 0 // 数码管时钟 #define DIO 1 // 数码管数据 #define INTERVAL 500 // 每隔0.5更新显示 uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管段码表 uchar hour, minute, second; // 时分变量 void delay(uint ms) { // 延时函数 uint i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } void init_timer0() { // 初始化定时器0 TMOD = 0x01; // 设置计时器0为模式1 TH0 = 0x4c; // 设置计时器0初值,使其每隔1ms计数一次 TL0 = 0x00; EA = 1; // 开总中断 ET0 = 1; // 开定时器0中断 TR0 = 1; // 启动定时器0 } void timer0() interrupt 1 { // 定时器0中断服务程序 TH0 = 0x4c; // 重新设置计时器0初值 TL0 = 0x00; second++; // 数加1 if (second == 60) { // 如果数达到60,进位 second = 0; minute++; } if (minute == 60) { // 如果分钟达到60,进位 minute = 0; hour++; } if (hour == 24) { // 如果小时达到24,清零 hour = 0; } } void writeData(uchar data) { // 写数据到数码管 uchar i; for (i = 0; i < 8; i++) { P0 &= ~(1 << DIO); // 先清零数据线 if (data & (1 << i)) // 判断当前位是否为1 P0 |= (1 << DIO); // 如果是1,则将数据线置1 P0 |= (1 << CLK); // 将时钟线置1 P0 &= ~(1 << CLK); // 将时钟线置0 } } void displayData(uchar hour, uchar minute, uchar second) { // 显示时分 writeData(table[hour / 10]); // 显示小时的十位 delay(1); writeData(table[hour % 10]); // 显示小时的个位 delay(1); writeData(table[minute / 10]); // 显示分钟的十位 delay(1); writeData(table[minute % 10]); // 显示分钟的个位 delay(1); writeData(table[second / 10]); // 显示钟的十位 delay(1); writeData(table[second % 10]); // 显示钟的个位 delay(1); } void main() { hour = 0; minute = 0; second = 0; init_timer0(); // 初始化定时器0 while (1) { displayData(hour, minute, second); // 显示时分 delay(INTERVAL / 6); // 每个数码管显示时间为0.5s,所以总时间为3s } } ``` 以上程序中使用定时器0中断来实现对时分的计时,每隔1中断一次,在中断服务程序中将数加1,并判断是否进位。同时,由于数码管是共阴极的,在显示时需要将对应的位选通为低电平,并将相应的数码段码输出到P1口。程序中的delay()函数用于延时,以保证数码管可以正常显示。在writeData()函数中,使用P0口的0号引脚作为数码管的时钟线,1号引脚作为数据线,将数据写入到数码管中。在main()函数中,使用displayData()函数将时分显示在数码管上,每个数码管显示时间为0.5,所以总时间为3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值