單片機時鐘設(shè)計_第1頁
單片機時鐘設(shè)計_第2頁
單片機時鐘設(shè)計_第3頁
單片機時鐘設(shè)計_第4頁
單片機時鐘設(shè)計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機時鐘設(shè)計報告院系:姓名:學(xué)號:班級:日期:2012/11/20摘要該課程設(shè)計是利用STC89C52單片機內(nèi)部的定時器/計數(shù)器、中斷系統(tǒng)、以及鍵盤和LED顯示器等部件,設(shè)計一個單片機電子時鐘。設(shè)計的電子時鐘通過LED顯示器顯示,并能通過按鍵實現(xiàn)時間的設(shè)置和啟動控制。目錄一、 設(shè)計原理1.1 軟件原理11.2 硬件原理1二、元件的使用說明2.1 STC89C52芯片12.2 按鍵鍵盤22.3 1602液晶屏3三、程序的設(shè)計 3.1 時鐘程序43.2 程序說明123.3 實物圖13四、總結(jié)心得體會14一、 設(shè)計原理1.1軟件原理軟時鐘是利用單片機內(nèi)部的定時器/計數(shù)器來實現(xiàn)的,他的處理過程如下:

2、首先設(shè)定單片機內(nèi)部的一個定時器/計數(shù)器工作于定時方式,對機器周期計數(shù)形成基準(zhǔn)時間(如10ms),然后用另一個定時器/計數(shù)器或者軟件計數(shù)的方法對基準(zhǔn)時間計數(shù)形成秒(對10ms計數(shù)100次),秒記60次形成分,分記60次形成小時,小時記24次則記滿一天,最后通過LCD液晶屏把他們的內(nèi)容在相應(yīng)位置顯示出來。1.2硬件原理硬件主要包括單片機芯片我用的是STC89C52、1602LCD液晶屏、按鍵開關(guān)電路。系統(tǒng)的時鐘采用的12MHz的晶振,機器周期也就為1us。二、元件的使用說明2.1 STC89C52芯片stc89c52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)flash,256字節(jié)ram, 32 位i/o 口線,

3、看門狗定時器,2 個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,stc89c52可降至0hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,cpu 停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,ram內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。8 位微控制器 8k字節(jié)在系統(tǒng)可編程 flash。(stc89c52和at89c52都通用,這里電路圖就用at89c52了,就不做過多的介紹了)2.2按鍵鍵盤這個是用跳線來切換獨立按鍵或者矩陣鍵盤的,因為實驗只用了三個按鍵,所以將

4、跳線接到1,2位置變成獨立鍵盤使用。即對應(yīng)的口為P30,P31,P32,P33這幾個口來控制的。2.3 1602液晶屏1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:VSS為地電源第2腳:VDD接5V正電源第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時可以讀忙信號,當(dāng)RS為高電

5、平RW為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線第1516腳:空腳 1602顯示屏的時序圖如圖2.5。三、程序的設(shè)計3.1時鐘程序#include#define uint unsigned int#define uchar unsigned charsbit rs=P24; /*數(shù)據(jù)、命令選擇端*/sbit rw=P25; /*讀寫選擇端*/sbit en=P26; /*使能信號*/sbit key1=P30; /*鍵盤*/sbit key2=P31;sbit key3=P32;uchar count,mi

6、ao,fen,shi,key1num; void delay(uchar ms) /*延時程序 取決于ms大小*/ uchar x,y; for(x=ms;x0;x-) for(y=110;y0;y-);void writecom(uchar com)/*寫液晶命令函數(shù)*/ rs=0; rw=0; en=0; delay(5); P0=com;/*送入命令*/ delay(5); en=1; delay(5); en=0;void writedata(uchar date) /*寫液晶數(shù)據(jù)函數(shù)*/ rs=1; rw=0; en=0; delay(5); P0=date;/*送入數(shù)據(jù)*/ del

7、ay(5); en=1; delay(5); en=0;void write_addr(uchar a,uchar b,uchar *s) /*地址處理函數(shù)*/ if(b=0) writecom(0x80+a); /*數(shù)據(jù)寫在液晶第一行*/ else writecom(0xc0+a); /*數(shù)據(jù)寫在液晶第二行*/while(*s) writedata(*s); /*寫入字符串?dāng)?shù)據(jù)*/ s+; void lcd_chushi()/*液晶屏初始化*/ writecom(0x38); delay(5); writecom(0x01); delay(5); writecom(0x0c); delay(

8、5); writecom(0x06); delay(5); write_addr(0,0,Date 2012-11-20);/*初始顯示字幕*/ write_addr(0,1,Time 00:00:00); TMOD=0x21; /*設(shè)定定時器T0,T1工作方式*/ /*T0工作在方式1,T1工作在方式2*/ TH0=(65536-50000)/256; /*設(shè)置定時器T0初始值,為50ms定時初值*/ TL0=(65536-50000)%256; TH1=256; /*設(shè)定定時器T1初始值,這里設(shè)為256其實就是程序每都跳到T1中斷去,然后檢測按鍵*/ TL1=256; EA=1; /*打開

9、全局中斷*/ ET0=1; /*允許T0中斷*/ ET1=1; /*允許T1中斷*/ TR0=1; /*開啟T0中斷*/ TR1=1; /*開啟T1中斷*/void ex_time(uchar x,uchar shu) /*時間換算函數(shù)(將位數(shù)分離)*/ uchar shiwei,gewei; shiwei=shu/10; /*十位上的數(shù)字*/ gewei=shu%10; /*個位上的數(shù)字*/ writecom(0xc0+x); /*時間Time放在液晶第二行*/ writedata(0x30+shiwei); writedata(0x30+gewei); void time0() inter

10、rupt 1 /*定時器T0服務(wù)子函數(shù)*/ TH0=(65536-50000)/256; /*設(shè)置定時器T0初始值,設(shè)50ms為定時初值*/ TL0=(65536-50000)%256; count+; if(count=20) /*為了實現(xiàn)50*20ms=1s的延時*/ count=0; miao+; /*執(zhí)行秒開始計數(shù)加*/ if(miao=60) miao=0; fen+; /*執(zhí)行分開始計數(shù)加*/ if(fen=60) fen=0; shi+; /*執(zhí)行時開始計數(shù)加*/ if(shi=24) shi=0; ex_time(7,shi); /*時放在液晶的第7個位置上*/ ex_time

11、(10,fen); /*分放在液晶的第10個位置上*/ ex_time(13,miao); /*秒放在液晶的第13個位置上*/ void time1() interrupt 3/*定時器T1服務(wù)子函數(shù)*/*定時器T0服務(wù)子函數(shù)*/ TR1=0; /*關(guān)閉T1定時器*/ if(key1=0) /*判斷key1按鍵是否按下*/ delay(2); /*延時去抖動*/ if(key1=0) /*再一次判斷key1按鍵是否被按下*/ while(!key1); /*如果按下*/ key1num+; /*記下key1被按下的次數(shù)*/ TR0=0; /*關(guān)閉定時器T0*/ if(key1num=1) /*

12、如果key1被按下一次*/ writecom(0x0f); /*光標(biāo)開始閃爍*/ writecom(0xc0+14); /*光標(biāo)在液晶第14個位置上閃爍,也就是在秒的位置上*/ if(key1num=2) /*如果key1被按下二次*/ writecom(0xc0+11); /*光標(biāo)在液晶第11個位置上閃爍,也就是在分的位置上*/ writecom(0x0f); if(key1num=3) /*如果key1被按下三次*/ writecom(0xc0+8); /*光標(biāo)在液晶第8個位置上閃爍,也就是在時的位置上*/ writecom(0x0f); if(key1num=4) /*如果key1被按下

13、四次*/ TR0=1; /*定時器T0開始工作*/ writecom(0x0c); /*關(guān)閉光標(biāo),光標(biāo)不顯示*/ key1num=0; /*記下的次數(shù)清零*/ if(key2=0) /*判斷key2按鍵是否按下*/ delay(2); /*延時去抖動*/ if(key2=0) /*再次判斷key2按鍵是否按下*/ while(!key2); switch(key1num) /*switch.case判斷語句,實現(xiàn)加1*/ case 1:miao+;if(miao=60)miao=0;writecom(0xc0+14);ex_time(13,miao);break; case 2:fen+;if

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

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

16、,跳到中斷程序,就檢測一次鍵盤是否按下。其實可以只用一個定時器/計數(shù)器就能實現(xiàn)的。鍵盤key1是用來控制光標(biāo)的移動,按一次是關(guān)閉定時器T0,并且光標(biāo)開始閃爍,在第14個位置上閃爍,也就是秒的位置。按第二次光標(biāo)在液晶第11個位置上閃爍,也就是在分的位置上。按第三次光標(biāo)在液晶第8個位置上閃爍,也就是在時的位置上。按第四次定時器T0開始工作,關(guān)閉光標(biāo)顯示。Key2,key3則是用來控制+1,-1的。3.3實物圖最后做成的實物圖(手機像素不好)。因為都是用軟件寫的,沒用時鐘芯片,所以日歷不好做出來,就沒有做日歷了。四、總結(jié)心得體會由于單片機是自己的,所以就比較熟悉各個芯片功能,經(jīng)過幾次調(diào)試就做出來了,就沒有一一介紹

溫馨提示

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

評論

0/150

提交評論