|
這是我做的單片機時鐘
附件里包含了單片機源代碼和proteus仿真圖
請多指教- #include <reg51.h>
- #include <absacc.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define PA XBYTE[0X0000]
- #define PB XBYTE[0X0001]
- #define PC XBYTE[0X0002]
- #define COM XBYTE[0X0003]
- #define count 50000
- #define th_m1 (65536-count) /256
- #define tl_m1 (65536-count) %256
- uint intcount=0;
- uint intcount1=0;
- code uchar SEG_CODE []={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};
- uchar DSY_CODE2 []= {0xf9, 0xa4, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,} ;
- uchar hour,minute,second;
- uchar hour1,hour0,minute1 ,minute0,second1,second0;
- uchar Disp_Buf[8],buffer=0xfe,ii=0;//=(1, 7,10,1,2,10,1,2);
- void wei_fenli();//分離各位值
- void delay_ms(uint x)
- {
- uchar t;
- while(x--)
- for(t=0;t<120;t++);
- }
- void main ()
- {
- uchar i;
- COM = 0x80;
- IE=0x8f;
- IP=0x05;
- IT0=1;
- IT1=1;
- TMOD=0x11;
- TH0=th_m1;
- TL0=tl_m1;
- TR0=1;
- TH1=th_m1;
- TL1=tl_m1;
- TR1=1;
- hour=8;
- minute=2;
- second=54;
- while (1)
- {
- for (i = 0;i<8;i++)
- {
- wei_fenli();
- PA=0xFF;
- PB=1<<i;
- Disp_Buf[2]=10;
- Disp_Buf[5]=10;
- PA=SEG_CODE[Disp_Buf[i]] ;
- delay_ms(4);
- }
- PC=buffer;
- }
- }
- void timerO(void) interrupt 1 using 1
- {
- TH0=th_m1;
- TL0=tl_m1;
- if (++intcount==20)
- {
- intcount=0;
- second++;
- }
- }
- void timer1 (void) interrupt 3 using 2
- {
- TH1=th_m1;
- TL1=tl_m1;
- if(++intcount1==10)
- {
- intcount1=0;
- ii+=1;
- /* buffer=(buffer< <1)Ox01;
- if (ii>8)
- {
- ii=O;
- buffer=Oxfe;
- }*/
- buffer=_crol_(buffer,1);
- if (ii>8)
- {
- ii=0;
- buffer=0xfe;
- }
- }
- }
- void wei_fenli ()
- {
- if ( second>59)
- {
- second=0;
- minute+=1;
- if (minute>59)
- {
- minute=0;
- hour+=1;
- if (hour>23)
- {
- hour=0;
- }
- }
- }
- hour1=hour/10;
- hour0=hour%10;
- minute1=minute/10;
- minute0=minute%10;
- second1= second/10;
- second0= second%10;
- Disp_Buf[0]=hour1;
- Disp_Buf[1]=hour0;
- Disp_Buf[3]=minute1;
- Disp_Buf[4]=minute0;
- Disp_Buf[6]=second1;
- Disp_Buf[7]=second0;
- }
- void my_int0(void) interrupt 0
- {
- uchar j;
- delay_ms (1000) ;
- TR0=0;
- j=hour;
- j=(j<23)?j+1:0;
- hour=j;
- TR0=1;
- }
- void my_int1 (void) interrupt 2
- {
- uchar k;
- delay_ms(1000);
- TR0=0;
- k=minute;
- k=(k<59) ?k+1:0;
- minute=k;
- TR0=1 ;
- }
復制代碼
|
-
-
時鐘000.zip
2019-6-19 21:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
24.3 KB, 下載次數: 20, 下載積分: 黑幣 -5
仿真
|