基于51單片機(jī)控制的1602液晶電子時(shí)鐘顯示程序_第1頁(yè)
已閱讀5頁(yè),還剩12頁(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、.基于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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論