第89节:用单片机内部定时器做一个时钟
时间:11-22
来源:互联网
点击:
- earTemp;
- uiYearYu=uiYearTemp%4;
- if(uiYearYu==0) //闰年
- {
- if(ucDayResult>29)
- {
- ucDayResult=29;
- }
- }
- else
- {
- if(ucDayResult>28)
- {
- ucDayResult=28;
- }
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- if(ucDayResult>30)
- {
- ucDayResult=30;
- }
- break;
- }
- return ucDayResult;
- }
- void display_service(void) //显示的窗口菜单服务程序
- {
- switch(ucWd)//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
- {
- case 1: //显示日期窗口的数据数据格式 NN-YY-RR 年-月-日
- if(ucWd1Update==1)//窗口1要全部更新显示
- {
- ucWd1Update=0;//及时清零标志,避免一直进来扫描
- ucDigShow6=11;//显示一杠"-"
- ucDigShow3=11;//显示一杠"-"
- ucWd1Part1Update=1;//局部年更新显示
- ucWd1Part2Update=1;//局部月更新显示
- ucWd1Part3Update=1;//局部日更新显示
- }
- if(ucWd1Part1Update==1)//局部年更新显示
- {
- ucWd1Part1Update=0;
- ucTemp8=ucYear/10;//年
- ucTemp7=ucYear%10;
- ucDigShow8=ucTemp8; //数码管显示实际内容
- ucDigShow7=ucTemp7;
- }
- if(ucWd1Part2Update==1)//局部月更新显示
- {
- ucWd1Part2Update=0;
- ucTemp5=ucMonth/10;//月
- ucTemp4=ucMonth%10;
- ucDigShow5=ucTemp5; //数码管显示实际内容
- ucDigShow4=ucTemp4;
- }
- if(ucWd1Part3Update==1) //局部日更新显示
- {
- ucWd1Part3Update=0;
- ucTemp2=ucDate/10;//日
- ucTemp1=ucDate%10;
- ucDigShow2=ucTemp2; //数码管显示实际内容
- ucDigShow1=ucTemp1;
- }
- //数码管闪烁
- switch(ucPart)//相当于二级菜单,根据局部变量的值,使对应的参数产生闪烁的动态效果。
- {
- case 0://都不闪烁
- break;
- case 1://年参数闪烁
- if(uiDpyTimeCnt==const_dpy_time_half)
- {
- ucDigShow8=ucTemp8; //数码管显示实际内容
- ucDigShow7=ucTemp7;
- }
- else if(uiDpyTimeCnt>const_dpy_time_all) //const_dpy_time_all一定要比const_dpy_time_half 大
- {
- ucDpyTimeLock=1; //原子锁加锁
- uiDpyTimeCnt=0; //及时把闪烁记时器清零
- ucDpyTimeLock=0;//原子锁解锁
- ucDigShow8=10; //数码管显示空,什么都不显示
- ucDigShow7=10;
- }
- break;
- case 2: //月参数闪烁
- if(uiDpyTimeCnt==const_dpy_time_half)
- {
- ucDigShow5=ucTemp5; //数码管显示实际内容
- ucDigShow4=ucTemp4;
- }
- else if(uiDpyTimeCnt>const_dpy_time_all) //const_dpy_time_all一定要比const_dpy_time_half 大
- {
- ucDpyTimeLock=1; //原子锁加锁
- uiDpyTimeCnt=0; //及时把闪烁记时器清零
- ucDpyTimeLock=0;//原子锁解锁
- ucDigShow5=10; //数码管显示空,什么都不显示
- ucDigShow4=10;
- }
- break;
- case 3: //日参数闪烁
- if(uiDpyTimeCnt==const_dpy_time_half)
- {
- ucDigShow2=ucTemp2; //数码管显示实际内容
- ucDigShow1=ucTemp1;
- }
- else if(uiDpyTimeCnt>const_dpy_time_all) //const_dpy_time_all一定要比const_dpy_time_half 大
- {
- ucDpyTimeLock=1; //原子锁加锁
- uiDpyTimeCnt=0; //及时把闪烁记时器清零
- ucDpyTimeLock=0;//原子锁解锁
- ucDigShow2=10; //数码管显示空,什么都不显示
- ucDigShow1=10;
- }
- break;
- }
- break;
- case 2: //显示时间窗口的数据数据格式 SS FF MM 时 分 秒
- if(ucWd2Update==1)//窗口2要全部更新显示
- {
- ucWd2Update=0;//及时清零标志,避免一直进来扫描
- ucDigShow6=10;//显示空
- ucDigShow3=10;//显示空
- ucWd2Part3Update=1;//局部时更新显示
- ucWd2Part2Update=1;//局部分更新显示
- ucWd2Part1Update=1;//局部秒更新显示
- }
- if(ucWd2Part1Update==1)//局部时更新显示
- {
- ucWd2Part1Update=0;
- ucTemp8=ucHour/10;//时
- ucTemp7=ucHour%10;
- ucDigShow8=ucTemp8; //数码管显示实际内容
- ucDigShow7=ucTemp7;
- }
- if(ucWd2Part2Update==1)//局部分更
单片机内部定时器时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)