第89节:用单片机内部定时器做一个时钟
时间:11-22
来源:互联网
点击:
- 知主函数及时更新采集时间数据
- ucTimerSecond++; //秒时间累加1
- if(ucTimerSecond>=60)
- {
- ucTimerSecond=0;
- ucTimerMinute++; //分时间累加1
- if(ucTimerMinute>=60)
- {
- ucTimerMinute=0;
- ucTimerHour++;//小时的时间累加1,为了避免if的嵌套过多,把小时的判断放到外面两层的if来继续判断
- }
- }
- if(ucTimerHour>=24)
- {
- ucTimerHour=0;
- ucTimerDate++; //天时间累加1
- ucTimerDateMax=get_date(ucTimerYear,ucTimerMonth);//根据年和月获取当前月份的最大天数
- if(ucTimerDate>ucTimerDateMax)//
- {
- ucTimerDate=1; //每个月都是从1号开始
- ucTimerMonth++;//月时间累加1
- if(ucTimerMonth>12)
- {
- ucTimerMonth=1; //每年从1月份开始
- ucTimerYear++; //年时间累加1
- if(ucTimerYear>99) //本系统的最高有效年份是2099年
- {
- ucTimerYear=99;
- }
- }
- }
- }
- }
- }
- if(ucVoiceLock==0) //原子锁判断
- {
- if(uiVoiceCnt!=0)
- {
- uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
- beep_dr=0;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
- }
- else
- {
- ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。
- beep_dr=1;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
- }
- }
- if(ucDpyTimeLock==0) //原子锁判断
- {
- uiDpyTimeCnt++;//数码管的闪烁计时器
- }
- key_scan(); //按键扫描函数
- display_drive();//数码管字模的驱动函数
- TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b
- TL0=0x0b;
- TR0=1;//开中断
- }
- void delay_short(unsigned int uiDelayShort)
- {
- unsigned int i;
- for(i=0;i
- {
- ; //一个分号相当于执行一条空语句
- }
- }
- void delay_long(unsigned int uiDelayLong)
- {
- unsigned int i;
- unsigned int j;
- for(i=0;i
- {
- for(j=0;j<500;j++)//内嵌循环的空指令数量
- {
- ; //一个分号相当于执行一条空语句
- }
- }
- }
- void initial_myself(void)//第一区 初始化单片机
- {
- key_gnd_dr=0; //模拟独立按键的地GND,因此必须一直输出低电平
- beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。
- hc595_drive(0x00,0x00);//关闭所有经过另外两个74HC595驱动的LED灯
- TMOD=0x01;//设置定时器0为工作方式1
- TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b
- TL0=0x0b;
- }
- void initial_peripheral(void) //第二区 初始化外围
- {
- ucDigDot8=0; //小数点全部不显示
- ucDigDot7=0;
- ucDigDot6=0;
- ucDigDot5=0;
- ucDigDot4=0;
- ucDigDot3=0;
- ucDigDot2=0;
- ucDigDot1=0;
- EA=1; //开总中断
- ET0=1; //允许定时中断
- TR0=1; //启动定时中断
- }
总结陈词:
任何一个电子产品在投入生产的时候都要考虑到生产的测试,朱兆祺51单片机学习板在生产加工后也一样要进行测试。那么这个测试的程序如何能够做到快速,全面,易用这三个要求呢?欲知详情,请听下回分解-----生产朱兆祺51学习板的从机自检测试程序源代码.。
单片机内部定时器时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)