Altium Designer畫的數字時鐘原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (32.71 KB, 下載次數: 59)
下載附件
2018-10-15 00:56 上傳
數字時鐘isis仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (10.78 KB, 下載次數: 42)
下載附件
2018-10-15 00:56 上傳
源程序代碼如下:(原理圖及論文見附件)
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit qingling=P1^0;
- sbit tiaofen=P1^1;
- sbit tiaoshi=P1^2;
- sbit sounder=P1^3;
- uint a,b;
- uchar hour,minu,sec,
- hour0,minu0,sec0,
- hour1,minu1,sec1;
- h1,h2,m1,m2,s1,s2,
- k,s;
-
- uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void keyscan();
- void init();
- void delay(int z);
- void display(uchar,uchar,uchar);
- void sounde();
-
- void main()
- {
- init();
- while(1)
- {
- while(TR1)
- {
-
- keyscan();
- while(s==1)
- {
- keyscan();
- display(hour1,minu1,sec1);
- }
- display(hour0,minu0,sec0);
-
- while(k)
- {
- display(hour,minu,sec);
- }
-
- }
- }
- }
- void init()
- {
- a=0;
- b=0;
- k=0;
- s=0;
- hour0=0;
- minu0=0;
- sec0=0;
- hour=0;
- minu=0;
- sec=0;
- hour1=0;
- minu1=0;
- sec1=0;
- TMOD=0x11;
- TH0=(65536-5000)/256;
- TL0=(65536-5000)%256;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
-
- EA=1;
- EX0=1;
- EX1=1;
- ET0=1;
- ET1=1;
- IT0=1;
- IT1=1;
- PX0=1;
- PX1=1;
-
- TR0=0;
- TR1=1;
- }
- void timer0_int() interrupt 1
- {
- TH0=(65536-5000)/256;
- TL0=(65536-5000)%256;
- a++;
- if(a==2)
- {
- a=0;
- sec++;
- if(sec==100)
- {
- sec=0;
- minu++;
- if(minu==60)
- {
- minu=0;
- hour++;
- if(hour==60)
- {
- hour=0;
- }
- }
- }
- }
-
- }
- void ex0_int() interrupt 0
- {
- k++;
- if(k==3)
- k=0;
- if(k==1)
- {
- TR0=~TR0;
- if(TR0==1)
- {
- hour=0;
- minu=0;
- sec=0;
- }
- }
- if(k==2)
- {
- TR0=~TR0;
- }
- }
- void ex1_int() interrupt 2
- {
- s++;
- if(s==3)
- s=0;
- }
- void timer1_int() interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- if(s==2)
- {
- if(hour1==hour0 && minu0==minu1)
- sounde();
- }
- b++;
- if(b==20)
- {
- b=0;
- sec0++;
- if(sec0==60)
- {
- sec0=0;
- minu0++;
- if(minu0==60)
- {
- minu0=0;
- hour0++;
- if(hour0==24)
- hour0=0;
-
- }
- }
-
- }
-
- }
- void keyscan()
- {
-
- if(s==1)
- {
- if(qingling==0)
- {
- delay(1000);
- if(qingling==0)
- {
- sec1=0;
- minu1=0;
- hour1=0;
- }
- }
- if(tiaofen==0)
- {
- delay(1000);
- if(tiaofen==0)
- {
- minu1++;
- if(minu1==60)
- {
- minu1=0;
- }
- while(!tiaofen);
-
- }
- }
- if(tiaoshi==0)
- {
- hour1++;
- if(hour1==24)
- {
- hour1=0;
- }
- while(!tiaoshi);
-
- }
- }
- else
- {
- if(qingling==0)
- {
- delay(1000);
- if(qingling==0)
- {
- sec0=0;
- minu0=0;
- hour0=0;
- }
- }
- if(tiaofen==0)
- {
- delay(1000);
- if(tiaofen==0)
- {
- minu0++;
- if(minu0==60)
- {
- minu0=0;
- }
- while(!tiaofen);
-
- }
- }
- if(tiaoshi==0)
- {
- hour0++;
- if(hour0==24)
- {
- hour0=0;
- }
- while(!tiaoshi);
-
- }
- }
- }
- void display(uchar hour,uchar minu,uchar sec)
- {
- h1=hour/10;
- h2=hour%10;
- m1=minu/10;
- m2=minu%10;
- s1=sec/10;
- s2=sec%10;
- P0=0xff;
- P2=table[h1];
- P0=select[7];
- delay(100);
- P0=0xff;
- P2=table[h2];
- P0=select[6];
- delay(100);
- P0=0xff;
- P2=0x40;;
- P0=select[5];
- delay(100);
- P0=0xff;
- P2=table[m1];
- P0=select[4];
- delay(100);
- P0=0xff;
- P2=table[m2];
- P0=select[3];
- delay(100);
- P0=0xff;
- P2=0x40;
- P0=select[2];
- delay(100);
- P0=0xff;
- P2=table[s1];
- P0=select[1];
- delay(100);
- P0=0xff;
- P2=table[s2];
- P0=select[0];
- delay(100);
- }
- void sounde()
- {
- sounder=~sounder;
- }
- void delay(int z)
- {
- while(z--);
- }
復制代碼
0.png (4.37 KB, 下載次數: 49)
下載附件
2018-10-15 00:57 上傳
全部資料51hei下載地址:
鬧鐘秒表.zip
(479.45 KB, 下載次數: 68)
2018-10-14 19:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|