|
這是數(shù)字時鐘的課程設(shè)計,用了一周時間,包括程序代碼,設(shè)計原理思想,以及proteus仿真圖,均為自己原創(chuàng),希望大家多多指教!
電路原理圖如下:
單片機源碼:
- #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);
- /************延時函數(shù)****************/
- void delay(uint t)//1ms延時函數(shù)
- {
- uint I;
- do{
- for(i=0;i<100;i++)
- ;
- }while(--t);
- }
- /***********主函數(shù)****************/
- 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)
- {//調(diào)節(jié)定時時間(分鐘)(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)
- {//調(diào)節(jié)定時時間(秒)(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出現(xiàn)流水現(xiàn)象,延時0.5秒
- {
- LED();
- }
- }
- }
- /*************中斷函數(shù)**************/
- 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;
- }
- /**************顯示函數(shù)*****************/
- 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;
- }
復(fù)制代碼
|
評分
-
查看全部評分
|