![基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/52f9a897-75f4-4806-968b-045a8f42a206/52f9a897-75f4-4806-968b-045a8f42a2061.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序 2007-05-31 13:31:45 | By: kevin 剛寫(xiě)好的基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序,整理了一下,并盡量加上的注釋?zhuān)懦鰜?lái)大家共享及交流。有興趣的可以參考一下,各管腳定義都比較明顯,有一定基礎(chǔ)的可稍作修改即可進(jìn)行實(shí)驗(yàn)。/基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序i nclude <intrins.h>i nclude <at89x51.h>*define uchar unsigned char*define LCM_RS P2_2 /定義引腳*define LCM_
2、RW P2_1*define LCM_E P2_0*define LCM_Data P0*define Busy 0x80 /用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)uchar i, j, k, second, tcount, minute, hour;void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char
3、ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void DisplayqListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);v
4、oid Delay400Ms(void);unsigned char code table='0','1','2','3','4','5','6','7','8','9'/數(shù)碼管數(shù)字編碼unsigned char code MyNo = "NAME:Who_am_I"/* 函數(shù)名稱(chēng):delay()* 功能描述:延時(shí)子程序,大約延時(shí) n MS* 輸 入:* 輸
5、 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/delay(uchar n)uchar i,j,k; for(i=2;i>0;i-) for(j=n;j>0;j-) for(k=125;k>0;k-);/* 函數(shù)名稱(chēng):lcd()* 功能描述:液晶初始化,然后在液晶屏第二行顯示提示信息* 輸 入:* 輸
6、; 出:* 全局變量:* 調(diào)用模塊:Delay400Ms(),LCMInit(),DisplayListChar()* 作者: kevin * 日期: 2007年5月31日*/void lcd(void) Delay400Ms(); /啟動(dòng)等待,等LCM講入工作狀態(tài) LCMInit(); /LCM初始化 Delay5Ms(); /延時(shí)片刻(可不要) DisplayListChar(0, 1, MyNo);/* 函數(shù)名稱(chēng):WriteDat
7、aLCM()* 功能描述:寫(xiě)數(shù)據(jù)* 輸 入: WDLCM* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /檢測(cè)忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0;
8、0;LCM_E = 0; /若晶振速度太高可以在這后加小的延時(shí) LCM_E = 0; /延時(shí) LCM_E = 1;/* 函數(shù)名稱(chēng):WriteCommandLCM()* 功能描述:寫(xiě)指令* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void WriteCommandLCM(unsigned char WCLCM,BuysC
9、) /BuysC為0時(shí)忽略忙檢測(cè) if (BuysC) ReadStatusLCM(); /根據(jù)需要檢測(cè)忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1;/* 函數(shù)名稱(chēng):ReadDataLCM()* 功能描述:讀數(shù)據(jù)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin
10、60; * 日期: 2007年5月31日*/unsigned char ReadDataLCM(void) LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; return(LCM_Data);/* 函數(shù)名稱(chēng):ReadStatusLCM()* 功能描述:讀狀態(tài)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者:
11、 kevin * 日期: 2007年5月31日*/unsigned char ReadStatusLCM(void) LCM_Data = 0xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; while (LCM_Data & Busy); /檢測(cè)忙信號(hào) return(LCM_Data);/* 函數(shù)名稱(chēng):LCMInit()* 功
12、能描述:LCM初始化* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void LCMInit(void) LCM_Data = 0; WriteCommandLCM(0x38,0); /三次顯示模式設(shè)置,不檢測(cè)忙信號(hào) Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms();
13、160;WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); /顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào) WriteCommandLCM(0x08,1); /關(guān)閉顯示 WriteCommandLCM(0x01,1); /顯示清屏 WriteCommandLCM(0x06,1); / 顯示光標(biāo)移動(dòng)設(shè)置 WriteCommandLCM(0x0C,1); / 顯示開(kāi)及光標(biāo)設(shè)置/* 函數(shù)名稱(chēng):DisplayOneChar()* 功能描述:按指定位置顯示一
14、個(gè)字符* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /當(dāng)要
15、顯示第二行時(shí)地址碼+0x40; X |= 0x80; / 算出指令碼 WriteCommandLCM(X, 0); /這里不檢測(cè)忙信號(hào),發(fā)送地址碼 WriteDataLCM(DData);/* 函數(shù)名稱(chēng):DisplayListChar()* 功能描述:按指定位置顯示一串字符* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月3
16、1日*/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 while (DDataListLength>0x20) /若到達(dá)字串尾則退出 if (X <= 0xF) /X坐標(biāo)應(yīng)小于0xF
17、; DisplayOneChar(X, Y, DDataListLength); /顯示單個(gè)字符 ListLength+; X+; /* 函數(shù)名稱(chēng):Delay5Ms()* 功能描述:5ms延時(shí)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: ke
18、vin * 日期: 2007年5月31日*/void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/* 函數(shù)名稱(chēng):Delay400Ms()* 功能描述:400ms延時(shí)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期:
19、 2007年5月31日*/void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-); /* 函數(shù)名稱(chēng):timer0()* 功能描述:中斷子程序,1秒重寫(xiě)一次液晶,以此實(shí)現(xiàn)60秒計(jì)數(shù)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:*
20、0; 作者: kevin * 日期: 2007年5月31日*/void timer0() interrupt 1 using 0int i; TH0=(65536-50000)/256*3; /中斷設(shè)置初始化
21、; TL0=(65536-50000)%256*3; tcount+; if(tcount=60)
22、; /滿1秒 i=0; DisplayOneChar(i+, 0, 'T'); /在第1行第1個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, 'I'); /在第1行第2個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, 'M'); /在第1行第3個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, '
23、E'); /在第1行第4個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, ':'); /在第1行第5個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, tablehour/10); /在第1行第6個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, tablehour%10); /在第1行第7個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, ':'); /在第1行第1個(gè)坐
24、標(biāo)顯示 DisplayOneChar(i+, 0, tableminute/10); /在第1行第8個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, tableminute%10); /在第1行第9個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, ':'); /在第1行第10個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, tablesecond/10); /在第1行第11個(gè)坐標(biāo)顯示 DisplayOneC
25、har(i+, 0, tablesecond%10); /在第1行第12個(gè)坐標(biāo)顯示 tcount=0;second+; if(second=60) /滿1分 second=0;minute+; /分?jǐn)?shù)加1,秒數(shù)歸零 if(minute=60)
26、0; /滿1小時(shí) minute=0;hour+; /小時(shí)數(shù)加1,分?jǐn)?shù)歸零 if(hour=24) hour=0; /* 函數(shù)名稱(chēng):main()* 功能描述:主程序,設(shè)置初始時(shí)間,中斷設(shè)置初始化,液晶顯示,等待中斷* 輸
27、入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void main()uchar i; second=0;minute=0;hour=0; /設(shè)置初始時(shí)間 TH0=(65536-50000)/256; /中斷設(shè)置初始化
28、60; TL0=(65536-50000)%256; EA=1;ET0=1;TMOD=0x21;TR0=1; lcd(); i=0; DisplayOneChar(i+, 0, 'T'); /在第1行第1個(gè)坐標(biāo)顯示 DisplayOneChar(i+, 0, 'I'); &
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代收美金合同范本
- 2025年度新型環(huán)保混凝土材料購(gòu)銷(xiāo)合同范本集錦
- 勞動(dòng)生產(chǎn)合同范例
- 喬木修剪合同范本
- 公司投資電影合同范例
- 個(gè)人外貿(mào)合同范例
- 2014家裝合同范例
- 信息資產(chǎn)安全合同范本
- 借用合同范例 英文
- 旅游業(yè)個(gè)性化旅游定制服務(wù)方案
- 酒店春節(jié)營(yíng)銷(xiāo)方案
- 營(yíng)銷(xiāo)管理方案中的定價(jià)策略與盈利模式
- 2024年西寧城市職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年臨沂市高三一模(學(xué)業(yè)水平等級(jí)考試模擬試題)物理試卷
- 廣州獵德大橋三維曲面塔清水混凝土施工技術(shù)
- 我國(guó)糖尿病視網(wǎng)膜病變臨床診療指南2022解讀
- 高級(jí)茶藝師技能鑒定(協(xié)會(huì)版)備考題庫(kù)-下(多選、判斷題匯總)
- 特種設(shè)備作業(yè)人員體檢表(叉車(chē))
- c30混凝土路面施工方案
- 加強(qiáng)師德師風(fēng)建設(shè)學(xué)校師德師風(fēng)警示教育講座培訓(xùn)課件
- 豬飼料購(gòu)銷(xiāo)合同書(shū)
評(píng)論
0/150
提交評(píng)論