|
是用51hei單片機開發板 電路圖詳見:http://www.zg4o1577.cn/f/51hei-5.pdf 的數碼管部分, 用2個74hc573 鎖存,p0口作為數據口 ,p3.6和p3.7分別是段和位的鎖存端口.P2口上面是按鍵- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- //======================
- uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code ACT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- sbit D=P3^6;
- sbit V=P3^7;
- uchar status;
- sbit OUT=P1^0;
- void delay(uint k);
- //================
- struct time
- {
- uchar sec;
- uchar msec;
- };
- struct time run_time,set_time;
- struct time *pt1,*pt2;
- //===============
- void initial(void)
- {
- TMOD=0x11;
- TH0=-(10000/256);
- TL0=-(10000%256);
- TH1=-(1000/256);
- TL1=-(1000%256);
- ET0=1;ET1=1;TR1=1;
- EA=1;
- }
- //=================
- void time0(void) interrupt 1
- {
- TH0=-(10000/256);
- TL0=-(10000%256);
- run_time.msec++;
- if(run_time.msec>99){run_time.sec++;run_time.msec=0;}
- if(run_time.sec>99){run_time.msec=0;run_time.sec=0;}
- if((pt2->msec>0)||(pt2->sec>0))
- {
- if((pt1->msec==pt2->msec)&&(pt1->sec==pt2->sec)){TR0=0;OUT=0;}
- }
- }
- //==================
- void display(uchar cnt)
- {
- switch(cnt)
- {
- case 0:D=1;P0=SEG7[run_time.msec%10];D=0;P0=0xff;V=1;P0=ACT[7];V=0;break;
- case 1:D=1;P0=SEG7[run_time.msec/10];D=0;P0=0xff;V=1;P0=ACT[6];V=0;break;
- case 2:D=1;P0=SEG7[run_time.sec%10];D=0;P0=0xff;V=1;P0=ACT[5];V=0;break;
- case 3:D=1;P0=SEG7[run_time.sec/10];D=0;P0=0xff;V=1;P0=ACT[4];V=0;;break;
- case 4:D=1;P0=SEG7[set_time.msec%10];D=0;P0=0xff;V=1;P0=ACT[3];V=0;break;
- case 5:D=1;P0=SEG7[set_time.msec/10];D=0;P0=0xff;V=1;P0=ACT[2];V=0;break;
- case 6:D=1;P0=SEG7[set_time.sec%10];D=0;P0=0xff;V=1;P0=ACT[1];V=0;break;
- case 7:D=1;P0=SEG7[set_time.sec/10];D=0;P0=0xff;V=1;P0=ACT[0];V=0;break;
- default:break;
- }
- }
- //=======
- void set_ms_display(uchar cnt)
- {
- switch(cnt)
- {
- case 0:D=1;P0=SEG7[run_time.msec%10];D=0;P0=0xff;V=1;P0=ACT[7];V=0;break;
- case 1:D=1;P0=SEG7[run_time.msec/10];D=0;P0=0xff;V=1;P0=ACT[6];V=0;break;
- case 2:D=1;P0=SEG7[run_time.sec%10];D=0;P0=0xff;V=1;P0=ACT[5];V=0;break;
- case 3:D=1;P0=SEG7[run_time.sec/10];D=0;P0=0xff;V=1;P0=ACT[4];V=0;break;
- case 4:D=1;P0=SEG7[set_time.msec%10]|0x80;D=0;P0=0xff;V=1;P0=ACT[3];V=0;break;
- case 5:D=1;P0=SEG7[set_time.msec/10]|0x80;D=0;P0=0xff;V=1;P0=ACT[2];V=0;break;
- case 6:D=1;P0=SEG7[set_time.sec%10];D=0;P0=0xff;V=1;P0=ACT[1];V=0;break;
- case 7:D=1;P0=SEG7[set_time.sec/10];D=0;P0=0xff;V=1;P0=ACT[0];V=0;break;
- default:break;
- }
- }
- //==============
- void set_s_display(uchar cnt)
- {
- switch(cnt)
- {
- case 0:D=1;P0=SEG7[run_time.msec%10];D=0;P0=0xff;V=1;P0=ACT[7];V=0;break;
- case 1:D=1;P0=SEG7[run_time.msec/10];D=0;P0=0xff;V=1;P0=ACT[6];V=0;break;
- case 2:D=1;P0=SEG7[run_time.sec%10];D=0;P0=0xff;V=1;P0=ACT[5];V=0;break;
- case 3:D=1;P0=SEG7[run_time.sec/10];D=0;P0=0xff;V=1;P0=ACT[4];V=0;break;
- case 4:D=1;P0=SEG7[run_time.msec%10];D=0;P0=0xff;V=1;P0=ACT[3];V=0;break;
- case 5:D=1;P0=SEG7[set_time.msec/10];D=0;P0=0xff;V=1;P0=ACT[2];V=0;break;
- case 6:D=1;P0=SEG7[set_time.sec%10]|0x80;D=0;P0=0xff;V=1;P0=ACT[1];V=0;break;
- case 7:D=1;P0=SEG7[set_time.sec/10]|0x80;D=0;P0=0xff;V=1;P0=ACT[0];V=0;break;
- default:break;
- }
- }
- //================
- void time1(void) interrupt 3
- {
- static uchar cnt;
- TH1=-(1000/256);
- TL1=-(1000%256);
- cnt++;
- if(cnt>7)cnt=0;
- switch(status)
- {
- case 5:display(cnt);break;
- case 0:display(cnt);break;
- case 1:set_ms_display(cnt);break;
- case 2:set_s_display(cnt);break;
- default:break;
- }
- }
- //==========
- void key_s1(void)
- {
- P2=0xff;
- if(P2==0xbf)
- {
- switch(status)
- {
- case 1:if(set_time.msec==99)set_time.msec=99;
- else set_time.msec++;break;
- case 2:if(set_time.sec==99)set_time.sec=99;
- else set_time.sec++;break;
- default:break;
- }
- }
- }
- //===========
- void key_s2(void)
- {
- P2=0xff;
- if(P2==0xdf)
- {
- switch(status)
- {
- case 1:if(set_time.msec==0)set_time.msec=0;
- else set_time.msec--;break;
- case 2:if(set_time.sec==0)set_time.sec=0;
- else set_time.sec--;break;
- default:break;
- }
- }
- }
- //===============
- void key_s4(void)
- {
- P2=0xff;
- if(P2==0xef){status++;}
- if(status==3)status=1;
- if(status==6)
- {run_time.msec=0;
- run_time.sec=0;
- status=0;}
- }
- //============
- void key_s3(void)
- {
- P2=0xff;
- if(P2==0x7f){status=5;TR0=1;}
- }
- //===============
- void main(void)
- {
- pt1=&run_time;pt2=&set_time;
- initial();
- for(;;)
- {
- key_s1();
- key_s2();
- key_s3();
- key_s4();
- delay(300);
- }
- }
- //================
- void delay(uint k)
- {
- uint data i,j;
- for(i=0;i<k;i++){
- for(j=0;j<121;j++)
- {;}}
- }
-
復制代碼
|
|