要求:1.秒表最長(zhǎng)計(jì)時(shí)為23:59:59; 2.秒表精度為1秒; 3.設(shè)置三個(gè)按鍵,分別為啟動(dòng),暫停和清零; 4. 用數(shù)碼管(或液晶)進(jìn)行顯示。
電路模塊介紹2.3.1時(shí)鐘電路圖 3時(shí)鐘振蕩電路 在內(nèi)部方式時(shí)鐘電路中,必須在XTAL1和XTAL2引腳兩端跨接石英晶體振蕩器和兩個(gè)微調(diào)電容構(gòu)成振蕩電路。 2.3.2按鍵電路圖 4按鍵電路 按鍵電路分矩陣鍵盤和獨(dú)立按鍵兩種。獨(dú)立按鍵式直接用I/O口線構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)是每個(gè)按鍵單獨(dú)占用一根I/O口線,每個(gè)按鍵的工作不會(huì)影響其他I/O口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一個(gè)I/O口線,因此,在按鍵較多時(shí),I/O口線浪費(fèi)較大,不宜采用。 本次設(shè)計(jì)采用的是獨(dú)立按鍵,按鍵處理設(shè)置為: 按下K1鍵,啟動(dòng);K2鍵,暫停;K3鍵,清零。 2.3.3顯示電路圖 5顯示電路 顯示電路中使用的是8位共陰極數(shù)碼管,其中,由P2口進(jìn)行位選,P0口進(jìn)行段選并利用數(shù)碼管進(jìn)行動(dòng)態(tài)顯示。 2.3.4復(fù)位電路圖 6復(fù)位電路 51單片機(jī)一般要求的是高電平復(fù)位。復(fù)位電路的目的就是在上電的瞬間提供一個(gè)與正常工作狀態(tài)下相反的電平。一般利用電容電壓不能突變的原理,將電容與電阻串聯(lián),上電時(shí)刻,電容沒有充電,兩端電壓為零,此時(shí),提供復(fù)位脈沖,電源不斷的給電容充電,直至電容兩端電壓為電源電壓,電路進(jìn)入正常工作狀態(tài)。
3.軟件設(shè)計(jì)3.1軟件簡(jiǎn)介Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、鏈接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過(guò)一個(gè)集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。運(yùn)行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。 C51工具包的整體結(jié)構(gòu),μVision與Ishell分別是C51 for Windows 和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.obj)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.abs)。abs文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。 使用獨(dú)立的Keil仿真器時(shí),注意事項(xiàng): *仿真器標(biāo)配11.0592MHz的晶振,但用戶可以在仿真器上的晶振插孔中換插其他頻率的晶振。 *仿真器上的復(fù)位按鈕只復(fù)位仿真芯片,不復(fù)位目標(biāo)系統(tǒng)。 *仿真芯片的31腳(/EA)已接至高電平,所以仿真時(shí)只能使用片內(nèi)ROM,不能使用片外ROM;但仿真器外引插針中的31腳并不與仿真芯片的31腳相連,故該仿真器仍可插入到擴(kuò)展有外部ROM(其CPU的/EA引腳接至低電平)的目標(biāo)系統(tǒng)中使用。
3.2流程圖
51hei.png (3.52 KB, 下載次數(shù): 64)
下載附件
2020-11-19 17:36 上傳
51hei.png (13.35 KB, 下載次數(shù): 61)
下載附件
2020-11-19 17:36 上傳
3.3設(shè)計(jì)思路利用單片機(jī)16位定時(shí)/計(jì)數(shù)器方式,TMOD為0X01。每1ms計(jì)數(shù)一次,共計(jì)1000次即1s,此時(shí)秒單位進(jìn)一;當(dāng)秒數(shù)值達(dá)到60時(shí),秒數(shù)值清零,分單位進(jìn)一;分?jǐn)?shù)值達(dá)到60時(shí),時(shí)單位進(jìn)一,分?jǐn)?shù)值清零,以此達(dá)到時(shí)鐘功能。k1控制中斷總開關(guān),用來(lái)控制計(jì)數(shù)器工作。按下k1鍵啟動(dòng)中斷,按下k2鍵關(guān)閉,k3鍵則用來(lái)控制秒、分、時(shí)的數(shù)值清零。
4.總結(jié)本次設(shè)計(jì)主題為基于單片機(jī)設(shè)計(jì)的時(shí)鐘電路,體現(xiàn)了AT89C51的簡(jiǎn)易性、可控性等諸多優(yōu)良特性。用單片機(jī)來(lái)設(shè)計(jì)時(shí)鐘電路,其優(yōu)點(diǎn)十分明顯,即穩(wěn)定性高、方便維護(hù)和操作簡(jiǎn)單。但它的缺點(diǎn)也較明顯,即難以滿足較為復(fù)雜的功能。 拿到課題后,我們小組每個(gè)成員先上網(wǎng)查閱資料以及翻閱單片機(jī)課本,復(fù)習(xí)本次設(shè)計(jì)內(nèi)容,比如七段譯碼顯示器、計(jì)數(shù)器、振蕩器等等。然后根據(jù)設(shè)計(jì)要求畫出整體設(shè)計(jì)框架。做完準(zhǔn)備工作后就正式開始設(shè)計(jì)與繪圖。 在軟件設(shè)計(jì)過(guò)程中我們遇到了許多困難,其中最主要的困難是設(shè)計(jì)好按鍵程序后,進(jìn)行實(shí)際開發(fā)板測(cè)試時(shí)按鍵無(wú)法工作,我們經(jīng)過(guò)多次檢查和測(cè)試后發(fā)現(xiàn)是由于P2口控制數(shù)碼管位選時(shí)連續(xù)發(fā)送的數(shù)據(jù)對(duì)按鍵造成了干擾,最后我們更換了接口,解決了這個(gè)問題。 我們小組從這次的設(shè)計(jì)中收獲頗多,不僅溫習(xí)了一遍大二學(xué)過(guò)的單片機(jī)編程知識(shí),而且還加深了對(duì)單片機(jī)的理解,感受到了設(shè)計(jì)的樂趣。
附錄1.總電路圖 8總電路圖 2.程序代碼- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- void Delayms(uint x);
- sbit L=P2^0;
- sbit LA=P2^1;
- sbit LB=P2^2;
- void Display();
- sbit key1=P1^5;
- sbit key2=P1^6;
- sbit key3=P1^7;
- /*位碼*/uchar tablew[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
- /*位選*/uchar shu[8]={0};
- /*共陰極*/
- uchar table6[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uint aa,bb,cc,dd;
- void main()
- {
- TMOD=0x01;//設(shè)置工作方式
- TH0=(65536-1000)/256;//設(shè)置定時(shí)器高八位
- TL0=(65536-1000)%256;//設(shè)置定時(shí)器低八位
- ET0=1;//打開定時(shí)器T0的中斷開關(guān)
- TR0=1;//啟動(dòng)定時(shí)器T0工作
- EA=0;//打開總中斷開關(guān)
- while(1)
- {
- uchar mshi,mge,fshi,fge,sshi,sge;
- if(key1==0)
- {
- EA=1;
- }
- else if(key2==0)
- {
- EA=0;
- }
- else if(key3==0)
- {
- bb=0;cc=0;dd=0;
- }
- else;
- mshi=bb/10;
- mge=bb%10;
- if(bb>59)
- {
- bb=0;
- cc++;
- }
- fshi=cc/10;
- fge=cc%10;
- if(cc>59)
- {
- cc=0;
- dd++;
- }
- sshi=dd/10;
- sge=dd%10;
- if(dd>23)
- {
- dd=0;
- }
- shu[7]=table6[mge];
- shu[6]=table6[mshi];
- shu[5]=0x40;
- shu[4]=table6[fge];
- shu[3]=table6[fshi];
- shu[2]=0x40;
- shu[1]=table6[sge];
- shu[0]=table6[sshi];
- Display();
- }
- }
- void int0_0() interrupt 1
- {
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- aa++;//1ms加一次
- if(aa>1000)
- {
- aa=0;
- bb++;//1S加一次
- }
- }
- void Display()
- {
- uint i;
- for(i=0;i<8;i++)
- {
- P2=tablew[i];
- P0=shu[i];
- Delayms(1);
- }
- }
- void Delayms(uint x)
- {
- uchar j;
- while(x--)
- {
- for(j=0;j<125;j++);
- }
- }
復(fù)制代碼
以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便保存):
基于單片機(jī)的電子時(shí)鐘.docx
(272.49 KB, 下載次數(shù): 53)
2020-11-19 12:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|