液晶屏显示模块与数码管相比,它显得更为专业、漂亮。液晶显示屏以其微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,在通讯、仪器仪表、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用,使这些电子设备的人机界面变得越来越直观形象,目前已广泛应用于电子表、计算器、IC卡电话机、液晶电视机、便携式电脑、掌上型电子玩具、复印机、传真机等许多方面。1602字符型液晶模块(带背光),是目前工控系统中使用最为广泛的液晶屏之一。1602采用标准的16脚接口,其引脚功能如下:
  第1脚:VSS为电源地,接GND。
  第2脚:VDD接5V正电源。
  第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
  第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
  第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
  第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
  第7~14脚:D0~D7为8位双向数据线。
  第15脚:BLA背光电源正极(+5V)输入引脚。
  第16脚:BLK背光电源负极,接GND。
       1602液晶模块内带标准字库,内部的字符发生存储器(CGROM)已经存储了192个5×7点阵字符,32个5×10点阵字符。另外还有字符生成RAM(CGRAM)512字节,供用户自定义字符。如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
    液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。
    C51程序如下:

[ 注 :AT89S51 使用 12M 晶振 ]
/*==========================================================*/
#include <reg51.h>
#define LCM_Data P1
#define Busy 0x80 // 用于检测 LCM 状态字中的 Busy 标识
sbit LCM_RW P2^0; //定义引脚
sbit LCM_RS P2^1;
sbit LCM_E P2^2;

void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCM,BuysC);
unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(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 Delay5Ms(void);
void Delay400Ms(void);
unsigned char code csdn[] = {"csdn"};
unsigned char code net[] = {www.csdn.net};
void main(void)
{
LCMInit(); //LCM 初始化
Delay5Ms(); // 延时片刻 ( 可不要 )
DisplayListChar(0, 5, csdn);
DisplayListChar(1, 0, net);
ReadDataLCM();// 测试用句无意义
while(1);
}
// 写数据
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); // 检测忙
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0; // 若晶振速度太高可以在这后加小的延时
LCM_E = 0; // 延时
LCM_E = 1;
}
// 写指令
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC 为 0 时忽略忙检测
{
if (BuysC) ReadStatusLCM(); // 根据需要检测忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
// 读数据
unsigned char ReadDataLCM(void)
{
LCM_RS = 1;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
return(LCM_Data);
}
// 读状态
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);
}
void LCMInit(void) //LCM 初始化
{
LCM_Data = 0;
WriteCommandLCM(0x38,0); // 三次显示模式设置,不检测忙信号
Delay5Ms();
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,1); // 显示模式设置 , 开始要求每次检测忙信号
WriteCommandLCM(0x08,1); // 关闭显示
WriteCommandLCM(0x01,1); // 显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置
WriteCommandLCM(0x0C,1); // 显示开及光标设置
}
// 按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; // 限制 X 不能大于 15 , Y 不能大于 1
if (Y) X |= 0x40; // 当要显示第二行时地址码 0x40;
X |= 0x80; // 算出指令码
WriteCommandLCM(X, 0); // 这里不检测忙信号,发送地址码
WriteDataLCM(DData);
}
// 按指定位置显示一串字符
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 (DData[ListLength]>0x20) // 若到达字串尾则退出
{
if (X <= 0xF) //X 坐标应小于 0xF
{
DisplayOneChar(X, Y, DData[ListLength]); // 显示单个字符
ListLength++;
X++;
}
}
}
//5ms 延时
void Delay5Ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}

1602液晶显示程序相关推荐

  1. 基于AT89C52单片机的1602液晶显示程序

    基于AT89C52单片机的1602液晶显示程序 1602液晶显示 1.keyscan.c 2.boardinit.c 3.delay.c 4.clock.c 5.74hc595.c 6.1602led ...

  2. 步进电机红外遥控C语言程序,单片机红外遥控+步进电机+1602液晶显示c语言源程序...

    这是我做的红外遥控控制的1602显示转速和转向的步进电机c语言原程序,已经调试成功!有些模块是以前做其他实验时做的,现在是直接调用的,包括1602液晶显示技术,TC9012红外解码,然后就是四相步进电 ...

  3. 51lcd显示光传感器c语言程序,基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例...

    基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例,系统由GY-30数字光照传感器.51单片机最小系统.1602液晶显示屏组成,电路简单,附件中的程序是实物验证过了的.1 ...

  4. c语言日历时钟编程,基于DS1302的日历时钟(1602液晶显示DS1302时钟)C语言程序设计...

    原标题:基于DS1302的日历时钟(1602液晶显示DS1302时钟)C语言程序设计 //实例98:基于 的 #include //包含寄存器的头文件 #include //包含_nop_()函数定义 ...

  5. 超声波测距1602显示程序

    超声波测距1602显示程序 1.intrins.c 2.1602led.c 3.boardinit.c 4.delay.c #include <reg52.H> //机器器件配置文件 #i ...

  6. 单片机1602液晶显示

    基于单片机STC12C5A60S2芯片的1602液晶显示,跳线按照要求连接 附上主程序 #include "stc12c5a60s2.h" #include "intri ...

  7. 用1602液晶显示秒表功能 c语言编写程序 单片机 加注释,1602LCD液晶显示秒表

    1602LCD液晶显示秒表 [源程序:] ;------------------------------------------------------------------ ;      ME30 ...

  8. 用1602液晶显示秒表功能 c语言编写程序 单片机 加注释,单片机课程设计--1602LCD显示的秒表.doc...

    单片机课程设计 题目: 1602LCD显示的秒表 系别/班级:信息工程系11级嵌入式技术与应用专业 小组成员: 小组成员学号: 指导老师: 目录 1 单片机原理-------------------3 ...

  9. 51单片机DS12C887时钟芯片和1602液晶显示完善前人例程版本

    1.实现显示年月日,星期,时间 2.功能键,调整加,调整减,闹钟设置键4个按键 3.改进按键误入时钟或闹钟调整界面 ,时钟会停止计时. 改进后,如果不发生实际调整,时间不会停止计时. 4.改进闹钟没打 ...

最新文章

  1. vue监听h5页面返回健(微信和支付宝浏览器亲测):
  2. python小程序-整理了适合新手的20个Python练手小程序
  3. 迅雷(XUNLEI)的工作原理揭密(续)---突出重围
  4. Year-End Review
  5. oracle12c清理游标,Oracle专题12之游标
  6. python计算2的平方代码_计算平方根
  7. linux ftp安装_Linux 文件共享方案
  8. 数组方法 splice()与slice()的区别
  9. Taro使用wxParse富文本组件
  10. 信源编码与信道编码区别(十一),Android面试题集2021版
  11. 常见电脑蓝屏代码以及解决办法
  12. Lattice Diamond 加入未默认支持flash
  13. PostgreSQL—适合金融的数据库
  14. MyEclipse的注册机的使用
  15. 还在用收费的工具处理PDF?用Python助力冲破会员牢笼
  16. 网易有道三季报解读:转型“有道”,但依旧道阻且长
  17. Visual Studio 2017 Intro
  18. bzoj4864: [BeiJing 2017 Wc]神秘物质
  19. NumPy 笔记(超级全!收藏√)
  20. 遇到maven私服下载过慢或者卡死的情况

热门文章

  1. [转自左潇龙的博客]设计模式大杂烩(24种设计模式的总结以及学习设计模式的几点建议)...
  2. git add出现 “fatal: in unpopulated submodule XXX“ 错误
  3. php电子杂志,Phpwind推电子杂志《站长天下》 网罗站长故事
  4. The Shawshank Redemption-19
  5. 培训机构管理信息系统设计与开发(一)
  6. GPS授时模块:UTC时间,GMT,GPS时,北斗时,北京时间及其关系
  7. 莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
  8. 吉天工业数据自动采集系统(DCS)实现工业4.0的智慧工厂
  9. jquery实现的网页计数器
  10. span与label的区别