第89节:用单片机内部定时器做一个时钟
时间:11-22
来源:互联网
点击:
- 新显示
- {
- ucWd2Part2Update=0;
- ucTemp5=ucMinute/10;//分
- ucTemp4=ucMinute%10;
- ucDigShow5=ucTemp5; //数码管显示实际内容
- ucDigShow4=ucTemp4;
- }
- if(ucWd2Part3Update==1) //局部秒更新显示
- {
- ucWd2Part3Update=0;
- ucTemp2=ucSecond/10;//秒
- ucTemp1=ucSecond%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;
- }
- }
- void key_scan(void)//按键扫描函数 放在定时中断里
- {
- if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
- {
- ucKeyLock1=0; //按键自锁标志清零
- uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
- }
- else if(ucKeyLock1==0)//有按键按下,且是第一次被按下
- {
- uiKeyTimeCnt1++; //累加定时中断次数
- if(uiKeyTimeCnt1>const_key_time1)
- {
- uiKeyTimeCnt1=0;
- ucKeyLock1=1;//自锁按键置位,避免一直触发
- ucKeySec=1; //触发1号键
- }
- }
- if(key_sr2==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
- {
- ucKeyLock2=0; //按键自锁标志清零
- uiKeyTimeCnt2=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
- }
- else if(ucKeyLock2==0)//有按键按下,且是第一次被按下
- {
- uiKeyTimeCnt2++; //累加定时中断次数
- if(uiKeyTimeCnt2>const_key_time2)
- {
- uiKeyTimeCnt2=0;
- ucKeyLock2=1;//自锁按键置位,避免一直触发
- ucKeySec=2; //触发2号键
- }
- }
- /* 注释四:
- * 注意,此处把一个按键的短按和长按的功能都实现了。
- */
- if(key_sr3==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
- {
- ucKeyLock3=0; //按键自锁标志清零
- uiKeyTimeCnt3=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
- }
- else if(ucKeyLock3==0)//有按键按下,且是第一次被按下
- {
- uiKeyTimeCnt3++; //累加定时中断次数
- if(uiKeyTimeCnt3>const_key_time3)
- {
- uiKeyTimeCnt3=0;
- ucKeyLock3=1;//自锁按键置位,避免一直触发
- ucKeySec=3; //短按触发3号键
- }
- }
- else if(uiKeyTimeCnt3
- {
- uiKeyTimeCnt3++; //累加定时中断次数
- if(uiKeyTimeCnt3==const_key_time17)//等于3秒钟,触发17号长按按键
- {
- ucKeySec=17; //长按3秒触发17号键
- }
- }
- /* 注释五:
- * 注意,此处是电平按键的滤波抗干扰处理
- */
- if(key_sr4==1)//对应朱兆祺学习板的S13键
- {
- uiKey
单片机内部定时器时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)