C程序;
#include #define uint unsigned int #define uchar unsigned char sbit k1=P3^5; sbit k2=P3^6; sbit k3=P3^7; uchar code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};//显示数组 uchar hc[8]; //缓存数组 uchar jishu,jishu1=0,k,set,shan,a,b,c,time; //变量定义 char shi,fen,miao; //时分秒定义(必须为char不然按键会显乱码) //====延时子程序=====// void delay(uint t) { uchar i; while(t--) for(i=110;i>0;i--); } //====按键子程序===// void key() { //====调节选择===// if(k1==0) { delay(5); while(k1==0); if(++set==4) set=0; } //====时分秒,加调整=====// if(k2==0) { delay(5); while(k2==0); if(set==1) { if(++miao==60) miao=0; } if(set==2) { if(++fen==60) fen=0; } if(set==3) { if(++shi==24) shi=0; } } //====时分秒,减调整=====// if(k3==0) { delay(5); while(k3==0); if(set==1) { if(--miao<0) miao=59; } if(set==2) { if(--fen<0) fen=59; } if(set==3) { if(--shi<0) shi=23; } } //====调整闪烁====// if(set==1) a=0xff*shan; else{a=0;} if(set==2) b=0xff*shan; else{b=0;} if(set==3) c=0xff*shan; else{c=0;} } //=====中断初始化===// void init() { TMOD=0x01; TH0=(65535-5000)/256; TL0=(65535-5000)%256; EA=1; ET0=1; TR0=1; } //=====选择中断 方式1=====// void tint(void) interrupt 1 { TH0=(65535-5000)/256; TL0=(65535-5000)%256; //===10秒无操作跳出时间调整====// if(set!=0) {if((k1==0)||(k2==0)||(k3==0)) time=0; if(time>=10) {set=0;time=0 ; } } //====时分秒即时==// jishu++; if(jishu==40) {jishu=0; shan=!shan; //控制闪烁变量 if(++k==4) { k=0; time++; if(++miao==60) { miao=0; if(++fen==60) { fen=0; if(++shi==24) shi=0; } } } } //=====显示位分离,存入缓存数组 ====// hc[0]= c|shi/10; hc[1]= c|shi%10; hc[2]=10; hc[3]=b|fen/10; hc[4]=b|fen%10; hc[5]=10; hc[6]=a|miao/10; hc[7]=a|miao%10; jishu1++; if(jishu1==8) jishu1=0; P2=(P2+1)%8; //138位扫描 P0=duan[hc[jishu1]]; //显示段扫描 } void main() { init(); //中断初始化 P2=0x00; //138初始位校正(去掉显示会后移一位) while(1) { key(); //按键程序 } }