單片機電子時鐘(LCD顯示)_第1頁
單片機電子時鐘(LCD顯示)_第2頁
單片機電子時鐘(LCD顯示)_第3頁
單片機電子時鐘(LCD顯示)_第4頁
單片機電子時鐘(LCD顯示)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實用文檔 單片機綜合實驗報告 題 目: 電子時鐘(LCD)顯示 班 級: 0310405班 學(xué) 號: 031040514 學(xué)生姓名: 張 金 龍 指導(dǎo)老師: 高 林 2013年 6 月 17 日一、 實驗內(nèi)容:以AT89C51單片機為核心的時鐘,在LCD顯示器上顯示當(dāng)前的時間:l 使用字符型LCD顯示器顯示當(dāng)前時間。l 顯示格式為“時時:分分:秒秒”。l 用4個功能鍵操作來設(shè)置當(dāng)前時間,4個功能鍵接在P1.0P1.3引腳上。 功能鍵K1K4功能如下。l K1進入設(shè)置現(xiàn)在的時間。l K2設(shè)置小時。l K3設(shè)置分鐘。l K4確認完成設(shè)置。程序執(zhí)行后工作指示燈LED閃動,表示程序開始執(zhí)行,LCD顯示

2、“00:00:00”,然后開始計時。二、實驗電路及功能說明1) 單片機主控制模塊以AT89C51單片機為核心進行一系列控制。2) 時鐘顯示模塊用1602為LCD顯示模塊,把對應(yīng)的引腳和最小系統(tǒng)上的引腳相連,連接后用初始化程序?qū)ζ溥M行簡單的功能測試。測試成功后即可為實驗所用,如圖:3) 時間調(diào)整電路用4個功能鍵操作來設(shè)置當(dāng)前時間,4個功能鍵接在P1.0P1.3引腳上。 功能鍵K1K4功能如下。K1進入設(shè)置現(xiàn)在的時間。K2設(shè)置小時。K3設(shè)置分鐘。K4確認完成設(shè)置。如圖:三、實驗程序流程圖:主程序: 時 鐘 主 程 序 流 程子程序:四、實驗結(jié)果分析 實驗結(jié)果及分析:單片機的晶振可以根據(jù)要求設(shè)定。6

3、MHZ為和現(xiàn)實時間顯示相同。實驗采用12MHZ晶振采用方式1定時,選取50ms采用20次中斷達到一秒,采用查表方式控制LCD顯示。當(dāng)燒入程序后開始運行,根據(jù)初始值設(shè)定可以觀察到顯示的時間,這里為了更明顯觀察顯示數(shù)據(jù)變化把起始值設(shè)為 23:59:50 運行后顯示,K1為進入現(xiàn)在設(shè)置時間,當(dāng)按下K1后顯示, 和實驗要求相比較,實現(xiàn)了按下K1進入現(xiàn)在時間設(shè)置,按下K4確認完成時間設(shè)置的功能;不同之處: 當(dāng)進入時間設(shè)置時在按下K1設(shè)置小時,再次按下K1是設(shè)置分鐘。增加功能:進入時間設(shè)置并選擇設(shè)置位置后K2鍵位數(shù)字增加功能,K3鍵為數(shù)字減小功能。根據(jù)仿真結(jié)果能夠確定編程正確,基本實現(xiàn)了所有功能,而且有所

4、改進。五、心得體會每次做單片機實驗都會有不同的等收獲,而這次的實驗讓我感覺收獲更大。這次的實驗讓我鞏固了以往所學(xué),而且鍛煉了自己發(fā)現(xiàn)問題解決問題的能力。在編程過程,發(fā)現(xiàn)自己對C語言很生疏,很多技巧和函數(shù)運用都不會,通過參考資料和詢問同學(xué)終于讓我完成了程序,并實現(xiàn)了程序的功能。這不僅提高了自己動手能力,也培養(yǎng)了自己的思考能力。這次在編程過程中學(xué)到了很多新東西,特別是LCD的顯示,在設(shè)定的顯示字符后,正確編譯后顯示各種設(shè)定值,LCD顯示16位字符,在最初編程時編譯正確但是LCD上的顯示字符有缺失,顯示不完整,經(jīng)過不斷調(diào)試發(fā)現(xiàn)空格同樣占據(jù)字符,只有所有字符不超過16位且位置正確時才能完整正確顯示。時

5、間的顯示需要每一個顯示的位子有定義,而且要給“:”留下特定位子。同時編程時發(fā)現(xiàn)還可以顯示其他如日期。但本實驗不需要且很難完成最終沒實現(xiàn)。在仿真過程中發(fā)現(xiàn)許多模型不知道名稱,最后搜索了一份Proteus 元件庫,里邊有很多元件模型的名稱。最后搭建成功了仿真模型,并且運行成功。 在這里要感謝老師在以往實驗過程中不厭其煩的幫助自己解決所遇到的問題和傳授一些知識和小竅門。讓我對單片機有機會加深了解,體會到了單片機的強大,學(xué)到了很多,感謝。六、程序清單#include #include #define uchar unsigned char#define uint unsigned int #defin

6、e DelayNOP() _nop_();_nop_();_nop_();_nop_();sbit K1 =P10; /選擇調(diào)整小時,分鐘sbit K2 =P11;/增加sbit K3 =P12;/減小sbit K4 =P13;sbit SPK=P30; sbit RS =P20;sbit RW =P21;sbit E =P22; uchar code Str1 = Current Time ; /一下兩個字符串的串長均為16 uchar code Str2 = Set New Time; uchar HMS_String= 00:00:00 ;/帶顯示的時間串 bit Settime=0;

7、/是否修改時間 bit Change_H_or_M =1;/1表示修改時.0表示修改分 uchar MilliSecond,Hour =23,Minute=59, Second =50; /延時函數(shù) void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); /LCD忙狀態(tài)檢測 bit LCD_Busy_Check() bit result; RS = 0;RW = 1;E = 1;DelayNOP();result = (bit)(P0 & 0x80);E = 0; return result; /寫LCD命令 void LCD_Wri

8、te_Command(uchar cmd) while(LCD_Busy_Check();/判斷LCD是否忙碌 RS = 0;RW = 0;E = 0;_nop_();_nop_();P0 = cmd; DelayNOP(); E = 1;DelayNOP();E = 0; /設(shè)置LCD顯示位置 void LCD_Set_Pos(uchar pos) LCD_Write_Command(pos | 0x80); /寫LCD數(shù)據(jù) void LCD_Write_Data(uchar dat) while(LCD_Busy_Check();/判斷LCD是否忙碌 RS = 1;RW = 0;E = 0

9、; P0 = dat; DelayNOP(); E = 1;DelayNOP();E = 0; /LCD初始化 void LCD_Initialize() LCD_Write_Command(0x38);DelayMS(1); LCD_Write_Command(0x0c);DelayMS(1); LCD_Write_Command(0x06);DelayMS(1); LCD_Write_Command(0x01);DelayMS(1); / 顯示函數(shù),在LCD指定的行上顯示字符串 void Display_String(uchar*str,uchar LineNo) uchar k; LCD

10、_Set_Pos(LineNo); for(k=0;k;/顯示修改標(biāo)志 else HMS_String3 = ; /不顯示修改標(biāo)志HMS_String4 = h/10 + 0; /時十位 HMS_String5 = h/10 + 0; HMS_String5 = h%10 + 0; /時個位 HMS_String5 = h%10 + 0; HMS_String7 = m/10 + 0; /分 HMS_String8 = m/10 + 0;HMS_String8 = m%10 + 0; /分 HMS_String8 = m%10 + 0;HMS_String10= s/10 + 0; /秒 HM

11、S_String11= s/10 + 0; HMS_String11= s%10 + 0; /秒 HMS_String11= s%10 + 0;Display_String(HMS_String,0x40); /設(shè)置時間 void Change_Time() Settime=0; if(K1=0) /按下k1鍵即進入修改狀態(tài) TR0 = 0; Display_String(Str2,0x00); /第一行提示修改時間 Settime = 1; while (Settime) if(K1 = 0) /確定調(diào)整小時還是分鐘 while(K1 = 0) Change_H_or_M = !Change

12、_H_or_M; else if(K2 = 0) /增加 while(K2 = 0); if(Change_H_or_M=1) if(+Hour = 24) Hour = 0; else if(+Minute = 60) Minute = 0; else if(K3 = 0) /減少 while(K3 = 0); if(Change_H_or_M = 1) if(-Hour = 0xff) Hour = 23; else if(-Minute = 0xff) Minute = 59; else if(K4 = 0) /確定 while(K4 = 0); Display_String(Str1,

13、0x00); /第一行還原顯示str1 Settime = 0; TR0 = 1; Display_HMS(Hour,Minute,Second); /外層While在這里結(jié)束 /定時器0中斷 void Time0() interrupt 1 TH0 = (65536 -50000)/256; TL0 = (65536 -50000)%256; /重新裝入50MS定時 if(+MilliSecond = 20) /50*20=1s MilliSecond = 0; if(+Second = 60) Second = 0; if(+Minute = 60) Minute = 0; if(+Hour = 24) Hour = 0;Minute = 0;Second = 0; /主函數(shù) void main() TMOD = 0x01; TH0 = (65536-50000)/256; TL0 =

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論