久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機LCD2004時間和溫度顯示測試(非官方簡易測試程序)第一節 [打印本頁]

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

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

四行內容,每行每個字符的顯示位置,另外就是要把它官方的參考程序部分有些東西復制下來,
具體做法:
1.新建一個LCD2004TEST.H文件
2.把它官方的參考程序中LCD2004  寫數據、寫指令、忙檢測三部分復制到你新建的
LCD2004TEST文件中
//**************************************************************
//【LCD2004寫數據】
//**************************************************************
void Wr_Data(uchar wr_data)
{
Rd_Status();
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 1;
LCM_Data = wr_data;
LCM_E = 0; //若晶振速度太高可以在這后加小的延時
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; //若晶振速度太高可以在這后加小的延時
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;
}
}

      以上三個函數一定要用官網的,這樣可以避免很多麻煩,因為官方的測試程序至少不需
要調試,直接可以正常顯示,然后需要自己寫一個向LCD2004寫字符串的函數,具體如下:
//**************************************************************
//【向LCD發送一個字符串】
//**************************************************************
void LCDSendWord(u8 *p)         
{
while(*p>0)                            //比如void LCDSendWord('HALOO');就是讓LCD顯示"HALOO"
{
  Wr_Data(*p);
  p++;
}
}                  

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


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

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

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


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

制作出來的實物圖如下:

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

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


作者: xiaoyuxinke    時間: 2023-3-25 14:37
自己頂起
作者: xiaoyuxinke    時間: 2023-7-27 19:30
xiaoyuxinke 發表于 2023-3-25 14:37
自己頂起

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

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




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 色婷婷网 | 日韩精品免费一区二区夜夜嗨 | 亚洲免费在线播放 | 国产九九精品 | 免费观看全黄做爰的视频 | 国产又粗又黄又爽又硬的视频 | 天天射综合 | 亚洲精品乱码久久久久久动漫 | 91爱视频 | 91久久国产综合久久 | 日韩在线免费观看视频 | 久久国产综合 | www.黄视频 | 日本丰满少妇裸体自慰 | 最新中文字幕在线 | 福利视频在线 | 中文字幕精品在线观看 | 久久久久久久久国产精品 | www.黄色| 高潮毛片又色又爽免费 | 精品欧美黑人一区二区三区 | 22精品一区二区三区 | 91动漫在线观看 | 免费国产一区 | 国产精品久久久久久99 | 日韩在线免费 | 国产午夜激情 | 日韩精品免费观看 | 日本不卡在线 | 日本久久一区二区 | 国产一区二区在线看 | 亚洲国产成人av | 在线免费看黄色 | 免费在线观看www | 国产美女自拍视频 | 九九热精品在线 | 国产精品综合网 | 黄色高清网站 | 亚洲综合激情网 | 欧美一级淫片免费视频黄 | 成人激情视频在线观看 |