標(biāo)題: 單片機(jī)LCD2004時(shí)間和溫度顯示測試(非官方簡易測試程序)第一節(jié) [打印本頁]

作者: xiaoyuxinke    時(shí)間: 2023-3-22 11:41
標(biāo)題: 單片機(jī)LCD2004時(shí)間和溫度顯示測試(非官方簡易測試程序)第一節(jié)
      很多朋友在制作各種電子設(shè)備時(shí)不會(huì)使用如LCD1602、LCD12864、LCD2004等液晶屏,LCD1602和LCD12864本文不再介紹,因?yàn)槲仪懊姘l(fā)過各種貼子大家可以參照,這里只講一
下LCD2004的顯示,我會(huì)以通俗到不能再通俗的方法來教大家使用LCD2004這個(gè)液晶屏。我們拿到一個(gè)LCD液晶屏,首先要有它的顯示地址列表,其次它會(huì)有官方的參考程序,以上
這兩個(gè)是必需的。

這里是一個(gè)LCD2004顯示地址定義列表,意思就是在這個(gè)屏上每個(gè)字符顯示的地址位置。
這個(gè)列表的作用很簡單,就是告訴你LCD2004液晶屏(每行顯示20個(gè)字符,共四行)共顯示

四行內(nèi)容,每行每個(gè)字符的顯示位置,另外就是要把它官方的參考程序部分有些東西復(fù)制下來,
具體做法:
1.新建一個(gè)LCD2004TEST.H文件
2.把它官方的參考程序中LCD2004  寫數(shù)據(jù)、寫指令、忙檢測三部分復(fù)制到你新建的
LCD2004TEST文件中
//**************************************************************
//【LCD2004寫數(shù)據(jù)】
//**************************************************************
void Wr_Data(uchar wr_data)
{
Rd_Status();
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 1;
LCM_Data = wr_data;
LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
DelayMs(15);
}
//**************************************************************
//【LCD2004寫指令】
//**************************************************************
void Wr_Command(uchar wr_command)
{
Rd_Status();
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 1;
LCM_Data = wr_command;
LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
DelayMs(15);
}
//**************************************************************
//【LCD2004忙檢測】
//**************************************************************
void Rd_Status(void)
{while(1)
{
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_Data = 0xFF;
LCM_E = 1;
if((LCM_Data & BUSY)==0)
break;
}
}

      以上三個(gè)函數(shù)一定要用官網(wǎng)的,這樣可以避免很多麻煩,因?yàn)楣俜降臏y試程序至少不需
要調(diào)試,直接可以正常顯示,然后需要自己寫一個(gè)向LCD2004寫字符串的函數(shù),具體如下:
//**************************************************************
//【向LCD發(fā)送一個(gè)字符串】
//**************************************************************
void LCDSendWord(u8 *p)         
{
while(*p>0)                            //比如void LCDSendWord('HALOO');就是讓LCD顯示"HALOO"
{
  Wr_Data(*p);
  p++;
}
}                  

    上面這個(gè)顯示字符串的程序是經(jīng)很多程序驗(yàn)證過的,可以靈活應(yīng)用在LCD1602、LCD2004、
LCD12864、LCD19264等液晶屏中用來顯示一串字符或漢字,當(dāng)然用在LCD2004中只能用來顯
示字符,就是發(fā)送漢字它也顯示不出來。另外這段函數(shù)不限顯示字符個(gè)數(shù),只要屏裝的下你只
管在LCDSendWord('HALOO')里面寫就行了,這段函數(shù)還有一個(gè)好處就是不用管除了你要顯示的字
符外,前后空余部分,有些函數(shù)除了要顯示的文字內(nèi)容外,還要把沒顯示的部分用空格占掉,
不然會(huì)顯示亂碼,這段函數(shù)不會(huì)。


    最后再自己寫一段函數(shù),具體如下:
//**************************************************************
//【LCD2004寫指令或者寫數(shù)據(jù)】
//**************************************************************
void LCDTestWord(bit i,u8 word)
{
if(i==0)
{
  Wr_Command(word);             //i=0;則寫入指令
}
else
{
  Wr_Data(word);                //i=1;則寫入數(shù)據(jù)  
}
}

      這段函數(shù)的意思很明顯,在C文件中用到LCD2004TEST.H這個(gè)文件的時(shí)候,你可以
寫一行代碼就可以寫指令或?qū)憯?shù)據(jù),區(qū)分指令還是數(shù)據(jù)只要用括號內(nèi)的0和1就行了。比
如像下面這樣的寫法
      LCDTestWord(0,0xc0);                                                 //在第二行第一個(gè)位置顯示
      這行代碼的意思就是向LCD2004寫指令,后面的0xc0就是說在LCD2004的第二
行第一個(gè)位置開始顯示
      LCDTestWord(1,(mon/16)+0x30);                                      //月份十位顯示
      這行代碼的意思就是向LCD2004寫數(shù)據(jù),把月十位的數(shù)據(jù)送到LCD2004去顯示。

      
      最后我們要做的就是把LCD2004TEST.H這個(gè)文件補(bǔ)齊,意思就是把前面的宏定義搞一下,
這個(gè)就算是新手應(yīng)該都會(huì),具體如下:
#include <STC12C5A60S2.h>                                //載入相應(yīng)單片機(jī)頭文件,防止程序出現(xiàn)意外錯(cuò)誤
#include <hong.h>                                               //載入宏定義文件,此文件中定義了延時(shí)函數(shù)等需要全局調(diào)用的函數(shù)
//**************************************************************
//【LCD2004引腳和宏定義】
//**************************************************************
sbit LCM_RS = P2^6 ;
sbit LCM_RW = P2^5 ;
sbit LCM_E = P2^7;
#define LCM_Data P0
#define BUSY 0x80 //用于檢測 LCM 狀態(tài)字中的 Busy 標(biāo)
//以上是LCD相關(guān)引腳和宏定義
//**************************************************************
//**************************************************************
void Wr_Data(u8 wr_data);                                 //寫數(shù)據(jù)
void Wr_Command(u8 wr_command);                  //寫指令
void Rd_Status(void);                                         //讀忙
void LCDInit(void);                                             //初始化
void LCDSendWord(u8 *p);                                 //向LCD發(fā)送一個(gè)字符串
void LCDTestWord(bit i,u8 word);                        //LCD2004寫指令或者寫數(shù)據(jù)
void LCDInit(void);                                            //LCD2004初始化
void LCDClear(void);                                         //LCD2004清屏


//**************************************************************
   至此,一個(gè)完整的LCD2004TEST.H文件就完成了。

制作出來的實(shí)物圖如下:

這個(gè)是實(shí)際顯示效果,
在C文件MAIN函數(shù)中只要調(diào)用一下LCD2004的初始化函數(shù)和清屏函數(shù)就可以顯示了
Keil代碼下載:
LCD2004TEST.zip (181.84 KB, 下載次數(shù): 35)

這里附上程序,大家自行下載,程序中有兩個(gè)警告,大家可以不必理會(huì),是有兩個(gè)函數(shù)暫時(shí)沒用到,以后要用的。


作者: xiaoyuxinke    時(shí)間: 2023-3-25 14:37
自己頂起
作者: xiaoyuxinke    時(shí)間: 2023-7-27 19:30
xiaoyuxinke 發(fā)表于 2023-3-25 14:37
自己頂起

學(xué)習(xí)了
作者: xiaoyuxinke    時(shí)間: 2023-10-21 20:02
下次再講一些其它LCD屏的應(yīng)用。用可能讓一些初接觸LCD的新手能理解。
作者: jiban530    時(shí)間: 2023-10-23 15:44
好好好,簡潔明了

作者: xiaoyuxinke    時(shí)間: 2023-11-7 15:53
很多人會(huì)用到LCD屏,此貼對一些新手幫助很大。
作者: duckyer    時(shí)間: 2023-12-16 11:41
容易理解,很有幫助。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1