|
0.png (171.87 KB, 下載次數(shù): 21)
下載附件
2019-4-17 02:01 上傳
本次設(shè)計(jì)要求設(shè)計(jì)一基于單片機(jī)控制的串行口調(diào)時(shí)時(shí)鐘設(shè)計(jì)計(jì),該數(shù)字鐘能同時(shí)顯小時(shí),分鐘和秒。并能對(duì)時(shí)鐘進(jìn)行設(shè)置。時(shí)鐘開(kāi)始顯示為00時(shí) 00分,也就是數(shù)碼管(或用液晶塊)顯示 00.00。秒信號(hào)用時(shí)的個(gè)位的小數(shù)點(diǎn)表示,秒信號(hào)(即小數(shù)點(diǎn))在每秒鐘的前半秒點(diǎn)亮,后半秒鐘熄滅,秒信號(hào)每閃爍 60 次時(shí)“分”的計(jì)數(shù)加 1,秒計(jì)數(shù)變?yōu)?0。分計(jì)數(shù)加到 59分后,分鐘再加 1,分計(jì)數(shù)變?yōu)?0,時(shí)計(jì)數(shù)加 1。依次類推,時(shí)鐘最大的顯示值為 23 小時(shí) 59分。只要確定了1秒的定時(shí)時(shí)間,其他位均以此為基準(zhǔn)往上累加。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (15.06 KB, 下載次數(shù): 20)
下載附件
2019-4-17 02:01 上傳
單片機(jī)源程序如下:
- #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;
- //-----------------------------------------------------------------
- // 延時(shí)程序
- //-----------------------------------------------------------------
- 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="請(qǐng)依次輸入時(shí)分秒!!!\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)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (10.18 KB, 下載次數(shù): 16)
下載附件
2019-4-17 02:01 上傳
所有資料51hei提供下載:附虛擬串口軟件
串口通訊.zip
(7.81 MB, 下載次數(shù): 70)
2019-4-13 17:03 上傳
點(diǎn)擊文件名下載附件
串口時(shí)鐘設(shè)計(jì) 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|