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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2600|回復: 6
打印 上一主題 下一主題
收起左側

單片機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)

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:61140 發表于 2023-3-25 14:37 | 只看該作者
自己頂起
回復

使用道具 舉報

板凳
ID:61140 發表于 2023-7-27 19:30 | 只看該作者

學習了
回復

使用道具 舉報

地板
ID:61140 發表于 2023-10-21 20:02 | 只看該作者
下次再講一些其它LCD屏的應用。用可能讓一些初接觸LCD的新手能理解。
回復

使用道具 舉報

5#
ID:1096212 發表于 2023-10-23 15:44 | 只看該作者
好好好,簡潔明了
回復

使用道具 舉報

6#
ID:61140 發表于 2023-11-7 15:53 | 只看該作者
很多人會用到LCD屏,此貼對一些新手幫助很大。
回復

使用道具 舉報

7#
ID:1030595 發表于 2023-12-16 11:41 | 只看該作者
容易理解,很有幫助。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女福利视频网站 | 国产欧美日韩一区二区三区 | 在线视频日韩 | 日韩精品免费看 | 久久精品影视 | 欧美一级免费 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 精品久久99 | 日韩精品免费 | 国产一区二区高清在线 | 久久一区二区免费视频 | av免费电影在线 | www.一级毛片 | 国产免费xxx | 成人1区2区 | 国产有码 | 国产高清精品一区二区三区 | 国产精品黄视频 | 日韩中文字幕在线观看视频 | 久久综合色综合 | 一区二区三区四区在线 | 一区二区三区不卡视频 | 天堂在线中文 | 日本在线精品视频 | 精品一区二区三区四区五区 | 国产99热| 国产精品成人一区二区 | 91国内精品 | 亚洲精品在线看 | 91伊人| 中文字幕一区在线观看视频 | www国产成人免费观看视频,深夜成人网 | 免费观看国产视频在线 | 日本亚洲一区 | 久久大陆| 一区二区三区免费在线观看 | 久久精品小视频 | 日本精品久久久一区二区三区 | 久久免费看| 精品国产乱码久久久久久蜜退臀 | 欧美成人免费在线 |