第35节:带数码管显示的象棋比赛专用计时器
时间:11-22
来源:互联网
点击:
- ned char ucDigShow6=0;//第6位数码管要显示的内容
- unsigned char ucDigShow5=0;//第5位数码管要显示的内容
- unsigned char ucDigShow4=0;//第4位数码管要显示的内容
- unsigned char ucDigShow3=0;//第3位数码管要显示的内容
- unsigned char ucDigShow2=0;//第2位数码管要显示的内容
- unsigned char ucDigShow1=0;//第1位数码管要显示的内容
- unsigned char ucDigDot3=1;//数码管3的小数点是否显示的标志
- unsigned char ucDigDot7=1;//数码管7的小数点是否显示的标志
- unsigned char ucDigShowTemp=0; //临时中间变量
- unsigned char ucDisplayDriveStep=1;//动态扫描数码管的步骤变量
- unsigned int uiRedTimeCnt=0; //红棋产生秒基准的时间计时器
- unsigned int uiBlackTimeCnt=0;//黑棋产生秒基准的时间计时器
- unsigned int uiRedTotal=1200; //红棋的总时间
- unsigned int uiBlackTotal=1200;//黑棋的总时间
- unsigned char ucRedFlag=0;//红棋是否开始计时的标志
- unsigned char ucBlackFlag=0;//黑棋是否开始计时的标志
- unsigned char ucDisplayUpdate=1; //更新显示标志
- /* 注释一:
- *ucWd变量是本程序最核心的变量,代表显示哪一个窗口和系统处于当前哪种状态
- */
- unsigned char ucWd=1;
- code unsigned char dig_table[]=
- {
- 0x3f,//0 序号0
- 0x06,//1 序号1
- 0x5b,//2 序号2
- 0x4f,//3 序号3
- 0x66,//4 序号4
- 0x6d,//5 序号5
- 0x7d,//6 序号6
- 0x07,//7 序号7
- 0x7f,//8 序号8
- 0x6f,//9 序号9
- 0x00,//不显示序号10
- };
- void main()
- {
- initial_myself();
- delay_long(100);
- initial_peripheral();
- while(1)
- {
- key_service();
- display_service();
- }
- }
- void time_service()//放在定时中断里的时间应用程序
- {
- if(ucRedFlag==1)//1代表红棋在运行中
- {
- uiRedTimeCnt++;
- if(uiRedTimeCnt>const_1s)
- {
- uiRedTimeCnt=0;
- if(uiRedTotal>0)
- {
- uiRedTotal--;
- }
- else//时间到
- {
- ucRedFlag=0; //红棋和黑棋同时停止计时
- ucBlackFlag=0;
- ucWd=1;//切换到第一个窗口的状态
- uiVoiceCnt=const_voice_long; //报警声音触发
- }
- ucDisplayUpdate=1;//更新显示
- }
- }
- if(ucBlackFlag==1)//1代表黑棋在运行中
- {
- uiBlackTimeCnt++;
- if(uiBlackTimeCnt>const_1s)
- {
- uiBlackTimeCnt=0;
- if(uiBlackTotal>0)
- {
- uiBlackTotal--;
- }
- else//时间到
- {
- ucRedFlag=0;//红棋和黑棋同时停止计时
- ucBlackFlag=0;
- ucWd=1;//切换到第一个窗口的状态
- uiVoiceCnt=const_voice_long; //报警声音触发
- }
- ucDisplayUpdate=1;//更新显示
- }
- }
- }
- void display_service()//放在定时中断里的显示应用程序
- {
- if(ucDisplayUpdate==1)//有数据更新显示
- {
- ucDisplayUpdate=0;
- switch(ucWd) //本程序最核心的变量ucWd
- {
- case 1://窗口1,代表刚上电或者复位后的状态
- //红棋分解出分
- ucDigShowTemp=uiRedTotal/60;
- ucDigShow8=ucDigShowTemp/10;
- ucDigShow7=ucDigShowTemp%10;
- //红棋分解出秒
- ucDigShowTemp=uiRedTotal%60;
- ucDigShow6=ucDigShowTemp/10;
- ucDigShow5=ucDigShowTemp%10;
- ucDigDot7=1;//数码管7的小数点显示
- //黑棋分解出分
- ucDigShowTemp=uiBlackTotal/60;
- ucDigShow4=ucDigShowTemp/10;
- ucDigShow3=ucDigShowTemp%10;
- //黑棋分解出秒
- ucDigShowTemp=uiBlackTotal%60;
- ucDigShow2=ucDigShowTemp/10;
- ucDigShow1=ucDigShowTemp%10;
- ucDigDot3=1;//数码管3的小数点显示
- led_dr=1;//计时器处于停止状态,LED亮
- break;
- case 2://窗口2,代表黑棋正在运行中的状态
- //红棋全部不显示
- ucDigShow8=10;
- ucDigShow7=10;
- ucDigShow6=10;
- ucDigShow5=10;
- ucDigDot7=0;//数码管7的小数点不显示
- //黑棋分解出分
- ucDigShowTemp=uiBlackTotal/60;
- ucDigShow4=ucDigShowTemp/10;
- ucDigShow3=ucDigShowTemp%10;
- //黑棋分解出秒
- ucDigShowTemp=uiBlackTotal%60;
- ucDigShow2=ucDigShowTemp/10;
- ucDigShow1=ucDigShowTemp%10;
- ucDigDot3=1;//数码管3的小数点显示
- led_dr=0;//计时器处于计时状态,LED灭
- break;
- case 3://窗口3,代表黑棋在中途暂
数码管显示象棋比赛专用计时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)