




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序 2007-05-31 13:31:45 | By: kevin 剛寫好的基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序,整理了一下,并盡量加上的注釋,放出來大家共享及交流。有興趣的可以參考一下,各管腳定義都比較明顯,有一定基礎(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_R
2、W 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 R
3、eadStatusLCM(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);vo
4、id 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ù)名稱: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-);2 / 14/* 函數(shù)名稱: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ù)名稱:Wr
7、iteDataLCM()* 功能描述:寫數(shù)據(jù)* 輸 入: WDLCM* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /檢測(cè)忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW =
8、0; LCM_E = 0; /若晶振速度太高可以在這后加小的延時(shí) LCM_E = 0; /延時(shí) LCM_E = 1;/* 函數(shù)名稱:WriteCommandLCM()* 功能描述:寫指令* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void WriteCommandLCM(unsigned char WCLCM
9、,BuysC) /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ù)名稱:ReadDataLCM()* 功能描述:讀數(shù)據(jù)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: ke
10、vin * 日期: 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ù)名稱:ReadStatusLCM()* 功能描述:讀狀態(tài)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:*
11、0; 作者: 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ù)名稱:LCMInit()*
12、160; 功能描述:LCM初始化* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void LCMInit(void) LCM_Data = 0; WriteCommandLCM(0x38,0); /三次顯示模式設(shè)置,不檢測(cè)忙信號(hào) Delay5Ms(); WriteCommandLCM(0x38,0); Delay5M
13、s(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); /顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào) WriteCommandLCM(0x08,1); /關(guān)閉顯示 WriteCommandLCM(0x01,1); /顯示清屏 WriteCommandLCM(0x06,1); / 顯示光標(biāo)移動(dòng)設(shè)置 WriteCommandLCM(0x0C,1); / 顯示開及光標(biāo)設(shè)置/* 函數(shù)名稱: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 |= 0x4
15、0; /當(dāng)要顯示第二行時(shí)地址碼+0x40; X |= 0x80; / 算出指令碼 WriteCommandLCM(X, 0); /這里不檢測(cè)忙信號(hào),發(fā)送地址碼 WriteDataLCM(DData);/* 函數(shù)名稱:DisplayListChar()* 功能描述:按指定位置顯示一串字符* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 20
16、07年5月31日*/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ù)名稱:Delay5Ms()* 功能描述:5ms延時(shí)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者:
18、60; kevin * 日期: 2007年5月31日*/void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/* 函數(shù)名稱: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ù)名稱:timer0()* 功能描述:中斷子程序,1秒重寫一次液晶,以此實(shí)現(xiàn)60秒計(jì)數(shù)* 輸 入:* 輸 出:* 全局變量:* 調(diào)用模塊
20、:* 作者: 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, ':'); /在第
24、1行第1個(gè)坐標(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)顯示 Displ
25、ayOneChar(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ù)名稱:main()* 功能描述:主程序,設(shè)置初始時(shí)間,中斷設(shè)置初始化,液晶顯示,等待中斷* 輸&
27、#160; 入:* 輸 出:* 全局變量:* 調(diào)用模塊:* 作者: kevin * 日期: 2007年5月31日*/void main()uchar i; second=0;minute=0;hour=0; /設(shè)置初始時(shí)間 TH0=(65536-50000)/256; /中斷設(shè)置
28、初始化 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全生產(chǎn)堅(jiān)持的方針
- 防溺水安全心得體會(huì)
- 護(hù)理部主任崗位面試問題及答案
- 江西省南昌市進(jìn)賢二中2025年物理高二下期末調(diào)研模擬試題含解析
- 2025年新疆昌吉二中物理高一第二學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 會(huì)計(jì)專業(yè)大學(xué)生自我鑒定
- 親子運(yùn)動(dòng)會(huì)園長簡單致辭
- 廣西南寧三中2025年物理高一下期末檢測(cè)試題含解析
- 肝膽管炎的健康宣教
- “卓越工程師”培養(yǎng):物理課程實(shí)驗(yàn)教學(xué)的創(chuàng)新路徑探索
- 裕龍島煉化一體化項(xiàng)目(一期)環(huán)境影響報(bào)告
- 跨境電商海外倉租賃協(xié)議
- 2024年黑龍江高中學(xué)業(yè)水平合格性考試數(shù)學(xué)試卷試題(含答案詳解)
- 截肢術(shù)患者圍手術(shù)期護(hù)理
- (正式版)HGT 6277-2024 甲醇制烯烴(MTO)級(jí)甲醇
- vcm音圈馬達(dá)制造工藝
- 喘息性肺炎護(hù)理查房
- 暖氣片購銷合同
- 【特崗】2017-2019年云南省特崗教師化學(xué)真題全解析版
- 夏季防暑降溫科普課件
- 背膠作業(yè)指導(dǎo)書
評(píng)論
0/150
提交評(píng)論