0.png (171.87 KB, 下載次數: 21)
下載附件
2019-4-17 02:01 上傳
本次設計要求設計一基于單片機控制的串行口調時時鐘設計計,該數字鐘能同時顯小時,分鐘和秒。并能對時鐘進行設置。時鐘開始顯示為00時 00分,也就是數碼管(或用液晶塊)顯示 00.00。秒信號用時的個位的小數點表示,秒信號(即小數點)在每秒鐘的前半秒點亮,后半秒鐘熄滅,秒信號每閃爍 60 次時“分”的計數加 1,秒計數變為 0。分計數加到 59分后,分鐘再加 1,分計數變為 0,時計數加 1。依次類推,時鐘最大的顯示值為 23 小時 59分。只要確定了1秒的定時時間,其他位均以此為基準往上累加。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (15.06 KB, 下載次數: 20)
下載附件
2019-4-17 02:01 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include <stdio.h>
- #define INT8U unsigned char
- #define INT16U unsigned int
- #define FREQ 11059200 //振蕩器頻率11.0592MHz
- sbit K1=P1^7;
- sbit K2=P1^0;
- //0 1 2 3 4 5 6 7 8 9
- INT8U code SEG_CODE[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0X86,0xDB,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00 };
- INT8U R[] = {0,0,0,0,0,0};
- INT8U S=0,F=0,M=0,k=0,flag=0,L=1;
- INT16U cnt=0,Judge=0;
- //-----------------------------------------------------------------
- // 延時程序
- //-----------------------------------------------------------------
- void delay_ms(INT16U x)
- {
- INT8U t;
- while(x--)
- for(t = 0; t<120; t++);
- }
- void Init_USART_uT1()
- {
- TMOD=0x21;
- SCON=0X50;
- PCON=0x00;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=TL1=0xfd;
- TR1=1;
- }
- void Send()
- {
- INT8U *s="請依次輸入時分秒。!\r\n";
- INT8U i=0;
- while(s[i]!='\0')
- {
- SBUF=s[i++];
- while(TI==0);
- TI=0;
- }
- }
- void Display()
- {
- P2=0XFE;P0=SEG_CODE[S/10];delay_ms(1);
- P2=0XFD;P0=SEG_CODE[S%10+10]; delay_ms(1);
- P2=0XFB;P0=SEG_CODE[F/10];delay_ms(1);
- if(M%2){P2=0XF7;P0=SEG_CODE[F%10+10];}
- else {P2=0XF7;P0=SEG_CODE[F%10];}delay_ms(1);
- }
- void keyscan()
- {
- if(K1==0)
- {
- delay_ms(5);
- if(K1==0)
- {
- flag=1;
- while(!K1);
- }
- }
- if(K2==0)
- {
- delay_ms(5);
- if(K2==0)
- {
- flag=2;
- while(!K2);
- }
- }
- }
- //-----------------------------------------------------------------
- // 主程序
- //-----------------------------------------------------------------
- void main()
- {
- EA=1;
- EX0=1;
- IT0=1;
- ET0=1;
- TR0=1;
- ES=1;
- Init_USART_uT1();
- Send();
- while(1)
- {
- keyscan();
- Display();
- if(flag==2)
- {
- TR0=0;
- }
- if(flag==1)
- {
- TR0=1;
- }
- }
- }
- //-----------------------------------------------------------------
- // 串口接收中斷
- //-----------------------------------------------------------------
- void receive_4_digit() interrupt 4
- {
- static INT8U i=0;
- INT8U c;
- if(RI)
- {
- RI=0;
- flag=2;
- c=SBUF;
- if(c=='#')i=0;
- else if(c>='0'&&c<='9')
- {
- R[i++]=c-'0';
- S=R[0]*10+R[1];
- F=R[2]*10+R[3];
- M=R[4]*10+R[5];
- if(i==6)i=0;
- }
- }
- }
- void Time0()interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ++cnt;
- if(cnt==20)
- {
- cnt=0;
- Judge++;
- if(Judge==10&&L==1)
- {
- flag=1;
- L=2;
- }
-
- if(flag==1)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (10.18 KB, 下載次數: 16)
下載附件
2019-4-17 02:01 上傳
所有資料51hei提供下載:附虛擬串口軟件
串口通訊.zip
(7.81 MB, 下載次數: 70)
2019-4-13 17:03 上傳
點擊文件名下載附件
串口時鐘設計 下載積分: 黑幣 -5
|