基于51單片機控制的1602液晶電子時鐘顯示程序參考模板_第1頁
基于51單片機控制的1602液晶電子時鐘顯示程序參考模板_第2頁
基于51單片機控制的1602液晶電子時鐘顯示程序參考模板_第3頁
基于51單片機控制的1602液晶電子時鐘顯示程序參考模板_第4頁
基于51單片機控制的1602液晶電子時鐘顯示程序參考模板_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于51單片機控制的1602液晶電子時鐘顯示程序 2007-05-31 13:31:45 | By: kevin 剛寫好的基于51單片機控制的1602液晶電子時鐘顯示程序,整理了一下,并盡量加上的注釋,放出來大家共享及交流。有興趣的可以參考一下,各管腳定義都比較明顯,有一定基礎(chǔ)的可稍作修改即可進行實驗。/基于51單片機控制的1602液晶電子時鐘顯示程序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 /用于檢測LCM狀態(tài)字中的Busy標識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()*  功能描述:延時子程序,大約延時 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(); /啟動等待,等LCM講入工作狀態(tài) LCMInit(); /LCM初始化 Delay5Ms(); /延時片刻(可不要) DisplayListChar(0, 1, MyNo);/*  函數(shù)名稱:Wr

7、iteDataLCM()*  功能描述:寫數(shù)據(jù)*  輸  入:  WDLCM*  輸  出:*  全局變量:*  調(diào)用模塊:*  作者:   kevin   *  日期:   2007年5月31日*/void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /檢測忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW =

8、0; LCM_E = 0; /若晶振速度太高可以在這后加小的延時 LCM_E = 0; /延時 LCM_E = 1;/*  函數(shù)名稱:WriteCommandLCM()*  功能描述:寫指令*  輸  入:*  輸  出:*  全局變量:*  調(diào)用模塊:*  作者:   kevin   *  日期:   2007年5月31日*/void WriteCommandLCM(unsigned char WCLCM

9、,BuysC) /BuysC為0時忽略忙檢測 if (BuysC) ReadStatusLCM(); /根據(jù)需要檢測忙 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); /檢測忙信號 return(LCM_Data);/*  函數(shù)名稱:LCMInit()*&#

12、160; 功能描述:LCM初始化*  輸  入:*  輸  出:*  全局變量:*  調(diào)用模塊:*  作者:   kevin   *  日期:   2007年5月31日*/void LCMInit(void) LCM_Data = 0; WriteCommandLCM(0x38,0); /三次顯示模式設(shè)置,不檢測忙信號 Delay5Ms(); WriteCommandLCM(0x38,0); Delay5M

13、s(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); /顯示模式設(shè)置,開始要求每次檢測忙信號 WriteCommandLCM(0x08,1); /關(guān)閉顯示 WriteCommandLCM(0x01,1); /顯示清屏 WriteCommandLCM(0x06,1); / 顯示光標移動設(shè)置 WriteCommandLCM(0x0C,1); / 顯示開及光標設(shè)置/*  函數(shù)名稱:DisplayOneChar()*  功能描述:按指

14、定位置顯示一個字符*  輸  入:*  輸  出:*  全局變量:*  調(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; /當要顯示第二行時地址碼+0x40; X |= 0x80; / 算出指令碼 WriteCommandLCM(X, 0); /這里不檢測忙信號,發(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) /若到達字串尾則退出     if (X <= 0xF) /X坐標應小于0xF 

17、;        DisplayOneChar(X, Y, DDataListLength); /顯示單個字符     ListLength+;     X+;      /*  函數(shù)名稱:Delay5Ms()*  功能描述:5ms延時*  輸  入:*  輸  出:*  全局變量:*  調(diào)用模塊:*  作者: 

18、60; kevin   *  日期:   2007年5月31日*/void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/*  函數(shù)名稱:Delay400Ms()*  功能描述:400ms延時*  輸  入:*  輸  出:*  全局變量:*  調(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秒重寫一次液晶,以此實現(xiàn)60秒計數(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個坐標顯示  DisplayOneChar(i+, 0, 'I');   /在第1行第2個坐標顯示  DisplayOneChar(i+, 0, 'M');   /在第1行第3個坐標顯示  DisplayOneChar(i+, 0,

23、 'E');   /在第1行第4個坐標顯示  DisplayOneChar(i+, 0, ':');   /在第1行第5個坐標顯示  DisplayOneChar(i+, 0, tablehour/10);   /在第1行第6個坐標顯示  DisplayOneChar(i+, 0, tablehour%10);   /在第1行第7個坐標顯示  DisplayOneChar(i+, 0, ':');   /在第

24、1行第1個坐標顯示  DisplayOneChar(i+, 0, tableminute/10);   /在第1行第8個坐標顯示  DisplayOneChar(i+, 0, tableminute%10);   /在第1行第9個坐標顯示  DisplayOneChar(i+, 0, ':');   /在第1行第10個坐標顯示  DisplayOneChar(i+, 0, tablesecond/10);   /在第1行第11個坐標顯示  Displ

25、ayOneChar(i+, 0, tablesecond%10);   /在第1行第12個坐標顯示  tcount=0;second+;  if(second=60)             /滿1分    second=0;minute+;      /分數(shù)加1,秒數(shù)歸零    if(minute=60)  

26、0;      /滿1小時         minute=0;hour+;     /小時數(shù)加1,分數(shù)歸零   if(hour=24)     hour=0;          /*  函數(shù)名稱:main()*  功能描述:主程序,設(shè)置初始時間,中斷設(shè)置初始化,液晶顯示,等待中斷*  輸&

27、#160; 入:*  輸  出:*  全局變量:*  調(diào)用模塊:*  作者:   kevin   *  日期:   2007年5月31日*/void main()uchar i; second=0;minute=0;hour=0;    /設(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個坐標顯示  DisplayOneChar(i+, 0, 'I');

溫馨提示

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

評論

0/150

提交評論