资源描述:
《时钟可调时间和日期设计程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、//功能描述:数码管显示秒表,有按键控制开始,停止,恢复//硬件连接:IOA0~3接至按键1*key8的key1~key3//1*key8的rom口接高电平//IOA8口接至2*key4的D_dp//IOB高8位连至DIG控制6个数码管驱动//IOB低8位连至SEG控制6个数码管的显示//编写日期:2012-08-14#include"SPCE061A.h"unsignedintKeyScan(void);unsignedchartable[]={0x003f,0x0006,0x005b,0x004f,0x0066,0
2、x006d,0x007d,0x0007,0x007f,0x006f};//数字0123456789unsignedchartable1[]={0x0100,0x0000};//:闪烁代码unsignedchartable2[]={0xff00,0x0000};//时钟闪烁代码unsignedintx1,x2,y1,y2,z1,z2,h=0,min=0,s=0,t=0,t1=0,t2=0,m=0,xx=0,yy=0,zz=0,shansuo=0,p=0,q=0;//变量可变的延时喂狗函数voiddelay(unsigne
3、dcharms){unsignedinti,j;for(i=ms;i>0;i--)for(j=110;j>0;j--)*P_Watchdog_Clear=0x0001;}//显示函数voiddisplay(){*P_IOB_Data=0x8000;//:的显示*P_IOA_Data=table1[m];delay(1);x1=(table2[q]&0x0200)
4、table[h%10];//小时的显示*P_IOB_Data=x1;delay(1);x2=(table2[q]&0x0100)
5、table[h/10];*P
6、_IOB_Data=x2;delay(1);y1=(table2[p]&0x0800)
7、table[min%10];//分钟的显示*P_IOB_Data=y1;delay(1);y2=(table2[p]&0x0400)
8、table[min/10];*P_IOB_Data=y2;delay(1);z1=0x2000
9、table[s%10];//秒的显示*P_IOB_Data=z1;delay(1);z2=0x1000
10、table[s/10];*P_IOB_Data=z2;delay(1);}//按键函数voidkey(
11、){unsignedcharuiKey;uiKey=KeyScan();if(uiKey&0x00ff){s=0;switch(uiKey){case0x0001:xx++;if(xx==1)//key1第一次按下,此时分钟闪烁{shansuo++;yy=1;}if(xx==2)//key1第二次按下,此时小时闪烁{shansuo++;yy=1;}if(xx==3)//key1第三次按下,时钟恢复正常工作{shansuo=0;zz=0;xx=0;}break;case0x0002://key2每按下一次数加一if(yy
12、==1
13、
14、zz==1){zz=1;yy=0;s=0;if(shansuo==1)//分钟加{min++;if(min==60)min=0;}if(shansuo==2)//小时加{h++;if(h==24)h=0;}}break;case0x0004://key3每按下一次数减一if(yy==1
15、
16、zz==1){zz=1;yy=0;s=0;if(shansuo==1)//分钟减{min--;if(min==-1)min=59;}if(shansuo==2)//小时减{h--;if(h==-1)h=23;}}break;
17、}}}intmain(){__asm("INTOFF");//关闭总中断*P_IOA_Dir=0xff00;//设置A口低8位为同向低输入,*P_IOA_Attrib=0xff00;//设置A口高8位为同向低输出*P_IOA_Data=0x0000;*P_IOB_Dir=0xffff;//设置B0~B15口为同相低电平输出*P_IOB_Attrib=0xffff;*P_IOB_Data=0x0000;*P_INT_Ctrl=C_IRQ5_2Hz
18、C_IRQ4_1KHz;__asm("INTIRQ");//打开IRQ中断
19、while(1){key();display();*P_Watchdog_Clear=0x0001;//清狗}}//中断函数voidIRQ5(void)__attribute__((ISR));voidIRQ5(void){if(*P_INT_Ctrl&0x0004){t++;t1++;if(t1==1){t1=0;//:闪烁m+