51hei.png (29.94 KB, 下載次數: 24)
下載附件
2021-12-14 16:52 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- sbit start=P1^1;
- sbit stop=P1^0;
- uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40} ;//數字編碼0-9
- uchar code welatab[]={0xfe, 0xfd} ;//位控制字
- uchar msec, sec;
- void delay(uchar time)// 延時
- {
- uchar i, j;
- for (i=0;i<time;i++) ;
- {
- for (i=0;j<110;j++) ;
- }
- }
- void writeled(uchar num ,addr)
- {
- P2=0xff;
- P0=dulatab[num];
- P2=welatab[addr];
- delay(4);
- }
- void display(uchar sec)
- {
- uchar sech,secl ;
- sech=sec/10;
- secl=sec%10;
- writeled(sech,0);
- writeled(secl,1) ;
- }
- void init ()
- {
- TMOD=0x10;//定時器1工作方式1
- TH1=0xd8;
- TL1=0xf0;
- TR1=1;
- EA=1;
- ET1=1;
- }
- void keyscan()
- {
- if(start==0)
- {
- delay(2) ;
- if(start==0)
- {
- TR1=~TR1;
- while(start==0)
- {
- display(sec);
- }
- }
- }
- }
- if(stop==0&&TR1==0)
- {
- delay(2);//延時方抖
- if(stop==0)
- {
- sec=0;
- while(stop==0)
- {
- display(sec);
- }}}
- void main()
- {
- init();
- while(1)
- {
- display(sec);
- keyscan();
- }}
- void timer1() interrupt 3
- {
- TH1=0xd8;
- TL1=0xf0;
- msec++;
- if(msec==100)
- {
- msec=0
- sec++;
- if(sec==100)
- {
- sec=0
- }}}
復制代碼
|