第48节:利用DS1302做一个实时时钟
时间:11-22
来源:互联网
点击:
- 钟,触发17号长按按键
- {
- ucKeySec=17; //长按3秒触发17号键
- }
- }
- /* 注释四:
- * 注意,此处是电平按键的滤波抗干扰处理
- */
- if(key_sr4==1)//对应朱兆祺学习板的S13键
- {
- uiKey4Cnt1=0; //在软件滤波中,非常关键的语句!!!类似按键去抖动程序的及时清零
- uiKey4Cnt2++; //类似独立按键去抖动的软件抗干扰处理
- if(uiKey4Cnt2>const_key_time4)
- {
- uiKey4Cnt2=0;
- ucKey4Sr=1;//实时反映按键松手时的电平状态
- }
- }
- else
- {
- uiKey4Cnt2=0; //在软件滤波中,非常关键的语句!!!类似按键去抖动程序的及时清零
- uiKey4Cnt1++;
- if(uiKey4Cnt1>const_key_time4)
- {
- uiKey4Cnt1=0;
- ucKey4Sr=0;//实时反映按键按下时的电平状态
- }
- }
- }
- void key_service(void) //按键服务的应用程序
- {
- switch(ucKeySec) //按键服务状态切换
- {
- case 1:// 加按键 对应朱兆祺学习板的S1键
- switch(ucWd)//在不同的窗口下,设置不同的参数
- {
- case 1:
- switch(ucPart) //在不同的局部变量下,相当于二级菜单
- {
- case 1://年
- ucYear++;
- if(ucYear>99)
- {
- ucYear=99;
- }
- ucWd1Part1Update=1;//更新显示
- break;
- case 2: //月
- ucMonth++;
- if(ucMonth>12)
- {
- ucMonth=12;
- }
- ucWd1Part2Update=1;//更新显示
- break;
- case 3: //日
- ucDate++;
- if(ucDate>31)
- {
- ucDate=31;
- }
- ucWd1Part3Update=1;//更新显示
- break;
- }
- break;
- case 2:
- switch(ucPart) //在不同的局部变量下,相当于二级菜单
- {
- case 1://时
- ucHour++;
- if(ucHour>23)
- {
- ucHour=23;
- }
- ucWd2Part1Update=1;//更新显示
- break;
- case 2: //分
- ucMinute++;
- if(ucMinute>59)
- {
- ucMinute=59;
- }
- ucWd2Part2Update=1;//更新显示
- break;
- case 3: //秒
- ucSecond++;
- if(ucSecond>59)
- {
- ucSecond=59;
- }
- ucWd2Part3Update=1;//更新显示
- break;
- }
- break;
- }
- ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
- uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
- ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
- ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
- break;
- case 2:// 减按键 对应朱兆祺学习板的S5键
- switch(ucWd)//在不同的窗口下,设置不同的参数
- {
- case 1:
- switch(ucPart) //在不同的局部变量下,相当于二级菜单
- {
- case 1://年
- ucYear--;
- if(ucYear>99)
- {
- ucYear=0;
- }
- ucWd1Part1Update=1;//更新显示
- break;
- case 2: //月
DS1302实时时 相关文章:
- 如何实现DS1302实时时钟表显示在1602LCD液晶(11-18)
- LCD1602液晶显示DS1302实时时钟Proteus仿真(11-13)
- AT89C2051+LCD1602+DS1302实时时钟设计(c51)(11-10)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)