|
|
這是數字時鐘的課程設計,用了一周時間,包括程序代碼,設計原理思想,以及proteus仿真圖,均為自己原創,希望大家多多指教!
電路原理圖如下:
單片機源碼:
- #include <stc10.h>
- #include<INTRINS.H>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code
- a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar led1=0xfe;
- uchar led2=0xfb;
- uchar count;
- uchar sec=50;
- uint msec=0;
- uint min=9;
- uint set_sec=10;
- uint set_min=10;
- sbit K1=P0^5; //K4
- sbit K2=P0^6; //K5
- sbit K3=P0^7; //k6
- sbit line1=P3^6;
- sbit line2=P3^7;
- void LED();
- void display(uint x,uint y);
- /************延時函數****************/
- void delay(uint t)//1ms延時函數
- {
- uint I;
- do{
- for(i=0;i<100;i++)
- ;
- }while(--t);
- }
- /***********主函數****************/
- void main(void)
- {
- int j=0;
- TMOD=0x01;
- TH0=0xd8;
- TL0=0xf0;
- ET0=1;
- EA=1;
- P1M1=0X00;
- P1M0=0Xff;
- while(1)
- {
- display(sec,min);
- //啟動/停止
- line1=0;
- if(K1==0)
- delay(10);
- if(K1==0)
- { while(!K1)
- display(sec,min);
- TR0=~TR0;
- } while(!K1);
- if(!K2)
- {//清零(K2)
- delay(10);
- if(!K2)
- {
- while(!K2)
- display(sec,min);
- TR0=0;
- msec=0;
- sec=0;
- min=0;
- }
- }
- line1=1;line2=0;
- if(!K1)
- {//調節定時時間(分鐘)(K4)
- delay(10); //延時10ms
- if(!K1)
- {
- while(!K1)
- display(sec,min);
- set_min++;
- for(j=100;j--;j>0)
- display(0,set_min);
- }
- }
- if(!K2)
- {//調節定時時間(秒)(K5)
- delay(10);
- if(!K2)
- {
- while(!K2)
- display(sec,min);
- set_sec++;
- for(j=100;j>0;j--)
- display(set_sec,0);
- }
- }
- line2=1;
- //定時時間到,12個燈亮1min
- if(set_min==min&&set_sec==sec)
- {
- P2=0x00;
- P3=0xc3;
- }
- if((set_min+1)==min&&set_sec==sec)
- { P2=0xff;
- P3=0xff;
- }
- if(sec==0)
- //整分鐘時,LED出現流水現象,延時0.5秒
- {
- LED();
- }
- }
- }
- /*************中斷函數**************/
- void timer0(void) interrupt 1
- {
- TH0=55536/256;
- TL0=55536%256;
- msec++;
- if(msec==100)
- {
- msec=0;
- sec++;
- if(sec==60)
- {
- min++;
- sec=0;
- msec=0;
-
- if(min==60)
- {
- min=0;
- sec=0;
- msec=0;
- }
- }
- }
- }
- /**************LED流水****************/
- void LED()
- {
- uchar k;
- P2=led1;
- for(k=0;k<7;k++)
- {
- led1=_crol_(led1,1);
- delay(20);
- }
- P2=0xff;
- P3=led2;
- for(k=0;k<3;k++)
- {
- led2=_crol_(led2,1);
- delay(20);
- }
- P3=0xff;
- }
- /**************顯示函數*****************/
- void display(uint x,uint y)
- {
- P0=0xf7,P1=a[x%10];
- delay(2);
- P1=0;
- P0=0xfb,P1=a[x/10];
- delay(2);
- P1=0;
- P0=0xfd,P1=a[y%10]|0x80;
- delay(2);
- P1=0;
- P0=0xfe,P1=a[y/10];
- delay(2);
- P1=0;
- }
復制代碼
|
-
-
基于STC10F08XE單片機的數字時鐘設計.doc
2018-5-2 17:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
84 KB, 下載次數: 11, 下載積分: 黑幣 -5
單片機
-
-
仿真圖.pdf
2018-5-2 17:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
41.43 KB, 下載次數: 7, 下載積分: 黑幣 -5
仿真電路圖
評分
-
查看全部評分
|