找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2653|回复: 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 分享淘帖 顶 踩
回复

使用道具 举报

6#
ID:1030595 发表于 2023-12-16 11:41 | 只看该作者
容易理解,很有帮助。
回复

使用道具 举报

5#
ID:61140 发表于 2023-11-7 15:53 | 只看该作者
很多人会用到LCD屏,此贴对一些新手帮助很大。
回复

使用道具 举报

地板
ID:1096212 发表于 2023-10-23 15:44 | 只看该作者
好好好,简洁明了
回复

使用道具 举报

板凳
ID:61140 发表于 2023-10-21 20:02 | 只看该作者
下次再讲一些其它LCD屏的应用。用可能让一些初接触LCD的新手能理解。
回复

使用道具 举报

沙发
ID:61140 发表于 2023-7-27 19:30 | 只看该作者

学习了
回复

使用道具 举报

楼主
ID:61140 发表于 2023-3-25 14:37 | 只看该作者
自己顶起
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表