單片機(jī)時(shí)鐘設(shè)計(jì)(共17頁(yè))_第1頁(yè)
單片機(jī)時(shí)鐘設(shè)計(jì)(共17頁(yè))_第2頁(yè)
單片機(jī)時(shí)鐘設(shè)計(jì)(共17頁(yè))_第3頁(yè)
單片機(jī)時(shí)鐘設(shè)計(jì)(共17頁(yè))_第4頁(yè)
單片機(jī)時(shí)鐘設(shè)計(jì)(共17頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩14頁(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、單片機(jī)時(shí)鐘(shzhng)設(shè)計(jì)報(bào)告院系:姓名(xngmng):學(xué)號(hào):班級(jí)(bnj):日期:2012/11/20摘要(zhiyo)該課程設(shè)計(jì)是利用STC89C52單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)、以及鍵盤(pán)和LED顯示器等部件,設(shè)計(jì)一個(gè)單片機(jī)電子時(shí)鐘。設(shè)計(jì)的電子時(shí)鐘通過(guò)LED顯示器顯示,并能通過(guò)按鍵實(shí)現(xiàn)時(shí)間的設(shè)置(shzh)和啟動(dòng)控制。目錄(ml)設(shè)計(jì)(shj)原理1.1 軟件(run jin)原理11.2 硬件原理1二、元件的使用說(shuō)明2.1 STC89C52芯片12.2 按鍵鍵盤(pán)2 1602液晶屏3三、程序的設(shè)計(jì) 3.1 時(shí)鐘程序43.2 程序說(shuō)明123.3 實(shí)物圖13四、總結(jié)心得體會(huì)14設(shè)

2、計(jì)(shj)原理1.1軟件(run jin)原理軟時(shí)鐘是利用單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器來(lái)實(shí)現(xiàn)的,他的處理過(guò)程如下:首先設(shè)定單片機(jī)內(nèi)部的一個(gè)定時(shí)器/計(jì)數(shù)器工作于定時(shí)方式,對(duì)機(jī)器周期計(jì)數(shù)形成基準(zhǔn)時(shí)間(如10ms),然后(rnhu)用另一個(gè)定時(shí)器/計(jì)數(shù)器或者軟件計(jì)數(shù)的方法對(duì)基準(zhǔn)時(shí)間計(jì)數(shù)形成秒(對(duì)10ms計(jì)數(shù)100次),秒記60次形成分,分記60次形成小時(shí),小時(shí)記24次則記滿一天,最后通過(guò)LCD液晶屏把他們的內(nèi)容在相應(yīng)位置顯示出來(lái)。1.2硬件原理硬件主要包括單片機(jī)芯片我用的是STC89C52、1602LCD液晶屏、按鍵開(kāi)關(guān)電路。系統(tǒng)的時(shí)鐘采用的12MHz的晶振,機(jī)器周期也就為1us。二、元件的使用說(shuō)明

3、2.1 STC89C52芯片stc89c52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)flash,256字節(jié)ram, 32 位i/o 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,stc89c52可降至0hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,cpu 停止工作,允許ram、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,ram內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8k字節(jié)在系統(tǒng)可編程 flash。(stc89c52和at89c52都通用,這里電路圖就

4、用at89c52了,就不做過(guò)多的介紹了)2.2按鍵(n jin)鍵盤(pán)這個(gè)是用跳線來(lái)切換獨(dú)立按鍵(n jin)或者矩陣鍵盤(pán)的,因?yàn)閷?shí)驗(yàn)只用了三個(gè)按鍵,所以將跳線接到1,2位置變成獨(dú)立鍵盤(pán)使用。即對(duì)應(yīng)的口為P30,P31,P32,P33這幾個(gè)口來(lái)控制的。2.3 1602液晶屏1602采用標(biāo)準(zhǔn)(biozhn)的16腳接口,其中:第1腳:VSS為地電源(dinyun)第2腳:VDD接5V正電源第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選

5、擇指令寄存器。第5腳:RW為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線第1516腳:空腳 1602顯示屏的時(shí)序(sh x)圖如圖2.5。三、程序(chngx)的設(shè)計(jì)3.1時(shí)鐘(shzhng)程序#include#define uint unsigned int#define uchar unsigned charsbit rs=P24; /*數(shù)據(jù)

6、、命令選擇端*/sbit rw=P25; /*讀寫(xiě)選擇端*/sbit en=P26; /*使能信號(hào)*/sbit key1=P30; /*鍵盤(pán)(jinpn)*/sbit key2=P31;sbit key3=P32;uchar count,miao,fen,shi,key1num; void delay(uchar ms) /*延時(shí)程序(chngx) 取決于ms大小*/ uchar x,y; for(x=ms;x0;x-) for(y=110;y0;y-);void writecom(uchar com)/*寫(xiě)液晶命令(mng lng)函數(shù)*/ rs=0; rw=0; en=0; delay(5

7、); P0=com;/*送入命令*/ delay(5); en=1; delay(5); en=0;void writedata(uchar date) /*寫(xiě)液晶數(shù)據(jù)(shj)函數(shù)*/ rs=1; rw=0; en=0; delay(5); P0=date;/*送入數(shù)據(jù)(shj)*/ delay(5); en=1; delay(5); en=0;void write_addr(uchar a,uchar b,uchar *s) /*地址(dzh)處理函數(shù)*/ if(b=0) writecom(0 x80+a); /*數(shù)據(jù)寫(xiě)在液晶第一行*/ else writecom(0 xc0+a); /*

8、數(shù)據(jù)寫(xiě)在液晶第二行*/while(*s) writedata(*s); /*寫(xiě)入字符串?dāng)?shù)據(jù)*/ s+; void lcd_chushi()/*液晶屏初始化*/ writecom(0 x38); delay(5); writecom(0 x01); delay(5); writecom(0 x0c); delay(5); writecom(0 x06); delay(5); write_addr(0,0,Date 2012-11-20);/*初始顯示(xinsh)字幕*/ write_addr(0,1,Time 00:00:00); TMOD=0 x21; /*設(shè)定定時(shí)器T0,T1工作(gngz

9、u)方式*/ /*T0工作(gngzu)在方式1,T1工作在方式2*/ TH0=(65536-50000)/256; /*設(shè)置定時(shí)器T0初始值,為50ms定時(shí)初值*/ TL0=(65536-50000)%256; TH1=256; /*設(shè)定定時(shí)器T1初始值,這里設(shè)為256其實(shí)就是程序每都跳到T1中斷去,然后檢測(cè)按鍵*/ TL1=256; EA=1; /*打開(kāi)全局中斷*/ ET0=1; /*允許T0中斷*/ ET1=1; /*允許(ynx)T1中斷*/ TR0=1; /*開(kāi)啟(kiq)T0中斷*/ TR1=1; /*開(kāi)啟(kiq)T1中斷*/void ex_time(uchar x,uchar

10、shu) /*時(shí)間換算函數(shù)(將位數(shù)分離)*/ uchar shiwei,gewei; shiwei=shu/10; /*十位上的數(shù)字*/ gewei=shu%10; /*個(gè)位上的數(shù)字*/ writecom(0 xc0+x); /*時(shí)間Time放在液晶第二行*/ writedata(0 x30+shiwei); writedata(0 x30+gewei); void time0() interrupt 1 /*定時(shí)器T0服務(wù)子函數(shù)*/ TH0=(65536-50000)/256; /*設(shè)置定時(shí)器T0初始值,設(shè)50ms為定時(shí)初值*/ TL0=(65536-50000)%256; count+;

11、if(count=20) /*為了實(shí)現(xiàn)50*20ms=1s的延時(shí)*/ count=0; miao+; /*執(zhí)行秒開(kāi)始計(jì)數(shù)加*/ if(miao=60) miao=0; fen+; /*執(zhí)行(zhxng)分開(kāi)始計(jì)數(shù)加*/ if(fen=60) fen=0; shi+; /*執(zhí)行(zhxng)時(shí)開(kāi)始計(jì)數(shù)加*/ if(shi=24) shi=0; ex_time(7,shi); /*時(shí)放在液晶(yjng)的第7個(gè)位置上*/ ex_time(10,fen); /*分放在液晶的第10個(gè)位置上*/ ex_time(13,miao); /*秒放在液晶的第13個(gè)位置上*/ void time1() inter

12、rupt 3/*定時(shí)器T1服務(wù)子函數(shù)*/*定時(shí)器T0服務(wù)子函數(shù)*/ TR1=0; /*關(guān)閉T1定時(shí)器*/ if(key1=0) /*判斷key1按鍵是否按下*/ delay(2); /*延時(shí)去抖動(dòng)(dudng)*/ if(key1=0) /*再一次判斷key1按鍵(n jin)是否被按下*/ while(!key1); /*如果(rgu)按下*/ key1num+; /*記下key1被按下的次數(shù)*/ TR0=0; /*關(guān)閉定時(shí)器T0*/ if(key1num=1) /*如果key1被按下一次*/ writecom(0 x0f); /*光標(biāo)開(kāi)始閃爍*/ writecom(0 xc0+14); /

13、*光標(biāo)在液晶第14個(gè)位置上閃爍,也就是在秒的位置上*/ if(key1num=2) /*如果key1被按下二次*/ writecom(0 xc0+11); /*光標(biāo)在液晶第11個(gè)位置上閃爍,也就是在分的位置上*/ writecom(0 x0f); if(key1num=3) /*如果key1被按下三次*/ writecom(0 xc0+8); /*光標(biāo)在液晶第8個(gè)位置上閃爍,也就是在時(shí)的位置上*/ writecom(0 x0f); if(key1num=4) /*如果(rgu)key1被按下四次*/ TR0=1; /*定時(shí)器T0開(kāi)始(kish)工作*/ writecom(0 x0c); /*關(guān)

14、閉光標(biāo)(un bio),光標(biāo)不顯示*/ key1num=0; /*記下的次數(shù)清零*/ if(key2=0) /*判斷key2按鍵是否按下*/ delay(2); /*延時(shí)去抖動(dòng)*/ if(key2=0) /*再次判斷key2按鍵是否按下*/ while(!key2); switch(key1num) /*switch.case判斷語(yǔ)句,實(shí)現(xiàn)加1*/ case 1:miao+;if(miao=60)miao=0;writecom(0 xc0+14);ex_time(13,miao);break; case 2:fen+;if(fen=60)fen=0;writecom(0 xc0+11);ex_

15、time(10,fen);break; case 3:shi+;if(shi=24)shi=0;writecom(0 xc0+8);ex_time(7,shi);break; if(key3=0) delay(2); if(key3=0) while(!key3); switch(key1num) /*switch.case判斷(pndun)語(yǔ)句,實(shí)現(xiàn)減1*/ case 1:miao-;if(miao=-1)miao=59;writecom(0 xc0+14);ex_time(13,miao);break; case 2:fen-;if(fen=-1)fen=59;writecom(0 xc0

16、+11);ex_time(10,fen);break; case 3:shi-;if(shi=-1)shi=23;writecom(0 xc0+8);ex_time(7,shi);break; TH1=256; TL1=256; TR1=1; void main()/*主函數(shù)(hnsh)*/ lcd_chushi(); while(1);3.2程序(chngx)說(shuō)明這個(gè)程序是用了兩個(gè)定時(shí)器/計(jì)數(shù)器來(lái)實(shí)現(xiàn)的,一個(gè)(y )是T0用來(lái)定時(shí)設(shè)置初值為50ms,記20次 50msx20=1s。第二個(gè)T1是用來(lái)檢測(cè)鍵盤(pán)是否按下的,選擇8位自動(dòng)重裝方式,將初值設(shè)為256,其實(shí)就是每運(yùn)行一次中斷,跳到中斷程序

17、,就檢測(cè)一次鍵盤(pán)是否按下。其實(shí)可以只用一個(gè)定時(shí)器/計(jì)數(shù)器就能實(shí)現(xiàn)的。鍵盤(pán)key1是用來(lái)控制光標(biāo)的移動(dòng),按一次是關(guān)閉定時(shí)器T0,并且光標(biāo)開(kāi)始閃爍,在第14個(gè)位置上閃爍,也就是秒的位置。按第二次光標(biāo)在液晶(yjng)第11個(gè)位置上閃爍,也就是在分的位置上。按第三次光標(biāo)在液晶第8個(gè)位置上閃爍,也就是在時(shí)的位置上。按第四次定時(shí)器T0開(kāi)始工作,關(guān)閉光標(biāo)顯示。Key2,key3則是用來(lái)控制+1,-1的。3.3實(shí)物圖最后做成的實(shí)物圖(手機(jī)(shu j)像素不好)。因?yàn)槎际怯密浖?xiě)的,沒(méi)用時(shí)鐘芯片,所以日歷不好做出來(lái)(ch li),就沒(méi)有做日歷了。四、總結(jié)(zngji)心得體會(huì)由于單片機(jī)是自己的,所以就比較熟悉各個(gè)芯片功能,經(jīng)過(guò)幾次調(diào)試就做出來(lái)了,就沒(méi)有一一介紹出來(lái),總的來(lái)說(shuō)做這次設(shè)計(jì)也加深了對(duì)時(shí)鐘的設(shè)計(jì)流程,也進(jìn)一步的熟悉了定時(shí)器/計(jì)數(shù)器的使用和中斷處理程序的編程。本想用proteus進(jìn)行仿真,但是由于軟件有點(diǎn)問(wèn)題,最后就照了張實(shí)物圖。做設(shè)計(jì)之前必須要對(duì)單片機(jī)內(nèi)部的結(jié)構(gòu)進(jìn)行了解,還要有一個(gè)清晰的思路和一個(gè)完整的軟件設(shè)計(jì)流程,寫(xiě)程序的時(shí)候要先設(shè)計(jì)好,然后反復(fù)修改

溫馨提示

  • 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)論