版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東石油化工學(xué)院《管理學(xué)前沿》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等專(zhuān)科學(xué)?!妒称访庖邔W(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東農(nóng)工商職業(yè)技術(shù)學(xué)院《研學(xué)旅行課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東南方職業(yè)學(xué)院《數(shù)理統(tǒng)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名農(nóng)林科技職業(yè)學(xué)院《工程力學(xué)輔導(dǎo)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《預(yù)防醫(yī)學(xué)新》2023-2024學(xué)年第一學(xué)期期末試卷
- 三年級(jí)數(shù)學(xué)計(jì)算題專(zhuān)項(xiàng)練習(xí)匯編及答案
- 2021高中物理-第四章-波粒二象性-章末總結(jié)-學(xué)案(教科版選修3-5)
- 大學(xué)生勞動(dòng)教育(合肥工業(yè)大學(xué))學(xué)習(xí)通測(cè)試及答案
- 八年級(jí)上冊(cè)英語(yǔ)思維導(dǎo)圖
- 角的概念推廣說(shuō)課課件.
- 壓密注漿施工工藝
- 2019-2020學(xué)年江蘇省徐州市九年級(jí)(上)期末英語(yǔ)試卷(解析版)
- 蘇教版八年級(jí)下《二次根式》單元測(cè)試卷(含答案)
- 履帶吊驗(yàn)收表
- AAEM的應(yīng)用機(jī)理
- 2018-2019學(xué)年第一學(xué)期西城小學(xué)三年級(jí)數(shù)學(xué)期末試題
- GB-T-12137-2015-氣瓶氣密性試驗(yàn)方法
- 學(xué)生學(xué)習(xí)挑戰(zhàn)書(shū)
- 煙葉種植及加工項(xiàng)目可行性研究報(bào)告寫(xiě)作范文
- 員工知識(shí)產(chǎn)權(quán)歸屬協(xié)議
評(píng)論
0/150
提交評(píng)論