電子時(shí)鐘設(shè)計(jì)及程序(共12頁(yè))_第1頁(yè)
電子時(shí)鐘設(shè)計(jì)及程序(共12頁(yè))_第2頁(yè)
電子時(shí)鐘設(shè)計(jì)及程序(共12頁(yè))_第3頁(yè)
電子時(shí)鐘設(shè)計(jì)及程序(共12頁(yè))_第4頁(yè)
電子時(shí)鐘設(shè)計(jì)及程序(共12頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上電子時(shí)鐘設(shè)計(jì)簡(jiǎn)介該設(shè)計(jì)主要由單片機(jī)AT89C51和液晶顯示器組成,實(shí)現(xiàn)常用的實(shí)時(shí)電子鐘功能。利用可編程芯片AT89C51強(qiáng)大的功能,我們了實(shí)現(xiàn)日歷功能、時(shí)鐘功能。該時(shí)鐘使用液晶顯示器作為顯示模塊,使用3個(gè)彈性小按鍵作為輸入模塊,調(diào)節(jié)年、月、日、星期、時(shí)、分、秒。一方案比較與論證根據(jù)設(shè)計(jì)要求,該時(shí)鐘系統(tǒng)可分輸入部分、處理部分和顯示數(shù)據(jù)部分。其中輸入部分是鍵盤(pán)輸入數(shù)據(jù)調(diào)整要顯示的內(nèi)容,處理部分單片機(jī)接收并通過(guò)算法處理鍵盤(pán)輸入的信息變成顯示模塊所能接受的信息,顯示部分是用來(lái)實(shí)時(shí)顯示處理部分處理后的數(shù)據(jù)。 輸入模塊處理模塊顯示模塊 輸入模塊我們選用三個(gè)獨(dú)立彈性小按鍵來(lái)實(shí)現(xiàn),選

2、用矩陣式鍵盤(pán)則太浪費(fèi)資處理模塊我們選用了STC公司的STC89C52芯片來(lái),與Atmel公司生產(chǎn)的AT89S52一樣,也是40腳雙列直插式封裝,這里芯片對(duì)剛學(xué)單片機(jī)的人來(lái)說(shuō)容易入手,其功能也很強(qiáng)大,用來(lái)實(shí)現(xiàn)一個(gè)電子鐘完全足夠了。顯示部分我們可有兩種選擇:數(shù)碼管和1602液晶顯示器。實(shí)現(xiàn)一個(gè)電子鐘若用數(shù)碼管則需6個(gè),所占空間相對(duì)大了些,而且我們還要實(shí)現(xiàn)日歷的功能,需要更多的數(shù)碼管,所點(diǎn)空間翻倍,而且還會(huì)造成單片機(jī)I/O引腳濫用甚至不夠用,用液晶顯示器來(lái)實(shí)現(xiàn)則方便得多,界面也相對(duì)友好,但液晶顯示器有個(gè)缺點(diǎn)就是價(jià)格比較貴。因此我們最終選擇了1602液晶顯示器。另處獨(dú)立彈性小按鍵具有價(jià)格便宜、容易獲得

3、、容易控制等特點(diǎn)。二系統(tǒng)理論分析、計(jì)算與電路仿真1、定時(shí)器與中斷原理電子鐘主要是利用單片機(jī)的定時(shí)器/計(jì)數(shù)器和中斷來(lái)實(shí)現(xiàn)。定時(shí)器實(shí)際是加1計(jì)數(shù)器,單片機(jī)每運(yùn)行一個(gè)機(jī)器周期定時(shí)器就自動(dòng)加1,當(dāng)計(jì)到所定的數(shù)N時(shí),單片機(jī)就產(chǎn)生一次中斷,停下所做的工作,轉(zhuǎn)而去執(zhí)行中斷服務(wù)程序。單片機(jī)每個(gè)機(jī)器周期等于外部晶振的12個(gè)振蕩周期,當(dāng)外部晶振是12MHz時(shí),則每個(gè)機(jī)器周期的時(shí)間是Tcy = 12×1/12=1µm(2-1)定數(shù)器設(shè)為N時(shí),即每計(jì)到N時(shí)產(chǎn)生一次中斷,而一次中斷的時(shí)間為:t = N×Tcyµm (2-2)當(dāng)產(chǎn)生X(x根據(jù)N來(lái)設(shè)置,兩者之積為1000000)次中

4、斷后我就知道過(guò)了1s,再通過(guò)液晶顯示出來(lái),這樣就達(dá)到了讓液晶每隔一秒跳一下的目的了。2、proteus仿真結(jié)果3、液晶部分 圖4-3 液晶1、2端口分別是工作電源的負(fù)、正極,15、16是液晶背光燈電源正負(fù)極,R4起限流作用,避免電流過(guò)大燒壞背光燈。第3端口還可接一電位器,調(diào)節(jié)液晶顯示對(duì)比度。無(wú)標(biāo)號(hào)的8個(gè)端口是數(shù)據(jù)端,通過(guò)一上拉電阻接到單片機(jī)的P0口。三系統(tǒng)的軟件設(shè)計(jì)(如必要,含有流程圖)1、程序流程圖流程圖中的X表示液晶中秒、分、時(shí)、星期、年、月、日中的任一個(gè)。N按2直到X不閃爍Y液晶X閃爍X減1按鍵4被按下X加1按鍵3被按下按鍵2被按下 X閃爍液晶X閃爍NY初始化結(jié)束掃描鍵盤(pán)是否被按下的同時(shí)

5、定時(shí)器是否到1秒往液晶送新數(shù)據(jù)YN開(kāi)始不掉電掉電 圖5-1 主程序流程圖 圖5-2 掃描鍵盤(pán)的子程序流程四系統(tǒng)測(cè)試及結(jié)果測(cè)試結(jié)果總的來(lái)說(shuō)很滿意,比預(yù)計(jì)的還要好。但由于中斷函數(shù)中代碼較長(zhǎng),故存在一定程度的誤差,用秒表測(cè)試大約為每5分鐘慢了一秒,這個(gè)問(wèn)題是用單片機(jī)定時(shí)器來(lái)數(shù)時(shí)所無(wú)法解決的,中斷函數(shù)必定會(huì)較長(zhǎng),處理這一函數(shù)會(huì)花費(fèi)一定的時(shí)間這就無(wú)法做到讓時(shí)鐘走得很精確。解決方法是用一時(shí)鐘芯片來(lái)實(shí)現(xiàn),由于時(shí)鐘芯片不好買(mǎi)又比較貴(新的20幾塊一片),暫時(shí)就不考慮了,有機(jī)會(huì)再嘗試。1 源程序/主函數(shù)放在最后面#include <reg51.h>#define uchar unsigned cha

6、r#define uint unsigned intsbit rs=P24;/定義液晶數(shù)據(jù)命令選擇端sbit lcden=P25;/液晶使能端sbit s1=P20;/按鍵1sbit s2=P21;/按鍵2sbit s3=P22;/按鍵3uchar count,s1num;char shi,fen,miao;/時(shí)、分、秒char year,month,day,week;/年月日星期void delay(uint x)/延時(shí)子程序uint j,k;for(j=x;j>0;j-)for(k=110;k>0;k-);/-液晶寫(xiě)命令功能-void write_com(uchar com)r

7、s=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;/-液晶寫(xiě)數(shù)據(jù)功能-void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;/-寫(xiě)入時(shí)、分、秒-?void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);/-寫(xiě)入年、

8、月、日-void write_nyr(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);/-寫(xiě)入星期X-void write_week(uchar we)write_com(0x80+12);switch(we)case 1: write_date('M');delay(5);write_date('O');delay(5);write_date('N');bre

9、ak;case 2: write_date('T');delay(5);write_date('U');delay(5);write_date('E');break;case 3: write_date('W');delay(5);write_date('E');delay(5);write_date('D');break;case 4: write_date('T');delay(5);write_date('H');delay(5);write_date('

10、;U');break;case 5: write_date('F');delay(5);write_date('R');delay(5);write_date('I');break;case 6: write_date('S');delay(5);write_date('A');delay(5);write_date('T');break;case 7: write_date('S');delay(5);write_date('U');delay(5);wri

11、te_date('N');break;/-實(shí)現(xiàn)初始化功能-void init()lcden=0;shi=1;fen=1;miao=1;day=1;month=1;year=1;week=1;count=0;s1num=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+1);write_date('2');write_com(0x80+2);write_date('0');write_com(0x80+5);write_date('

12、;-');write_com(0x80+8);write_date('-');write_nyr(9,day);write_nyr(6,month);write_nyr(3,year);write_week(week);write_com(0x80+0x40+6);write_date(':');write_com(0x80+0x40+9);write_date(':');write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);TMOD=0x01;TH0=(65536-50000)/256

13、;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;/ -鍵盤(pán)掃描功能-void keyscan()if(s1=0)/鍵盤(pán)1是否被按下delay(5);/如果檢測(cè)到鍵盤(pán)被按下,延時(shí)約if(s1=0)/5毫秒看是否為鍵下,這樣可越過(guò)按 /鍵盤(pán)時(shí)的抖動(dòng)時(shí)間,防止誤判s1num+;while(!s1);if(s1num=1)TR0=0;write_com(0x80+0x40+10);write_com(0x0f);if(s1num=2)write_com(0x80+0x40+7);if(s1num=3)write_com(0x80+0x40+4);if(s1num=4)w

14、rite_com(0x80+12);if(s1num=5)write_com(0x80+9);if(s1num=6)write_com(0x80+6);if(s1num=7)write_com(0x80+3);if(s1num=8)s1num=0;write_com(0x0c);TR0=1;if(s1num!=0)/鍵盤(pán)2是否被按下if(s2=0)delay(5);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen+;if(

15、fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s1num=4)week+;if(week=8)week=1;write_week(week);write_com(0x80+12);if(s1num=5)day+;if(day=32)day=1;write_nyr(9,day);write_com(0x80+9);if(s1num=6)month+;if(month=13)month=1;

16、write_nyr(6,month);write_com(0x80+6);if(s1num=7)year+;if(year=100)year=0;write_nyr(3,year);write_com(0x80+3);if(s3=0)/鍵盤(pán)3是否被按下delay(5);if(s3=0)while(!s3);if(s1num=1)miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x

17、40+7);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);if(s1num=4)week-;if(week=0)week=7;write_week(week);write_com(0x80+12);if(s1num=5)day-;if(day=0)day=31;write_nyr(9,day);write_com(0x80+9);if(s1num=6)month-;if(month=0)month=12;write_nyr(6,month);write_com(0x80+6);if(s1num=7)year-;if(year=-1)year=99;write_nyr(3,year);write_com(0x80+3);/-主函數(shù)-void main()init(); /初始化子函數(shù)while(1)keyscan();/-中斷服務(wù)子程序-void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=20)count=0;miao+;if(miao=6

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論