LCD1602液晶显示屏的入门级应用(一)
嵌入式小白,今天用到1602,被CGRAM DDRAM CGROM搞得乱七八糟,特此记录一下,供大家参考。
首先,1602液晶显示屏除了电源、地以外,有3个控制引脚 RS R/W E 和8个数据引脚DB0-7。建议8个数据引脚接在同一组上,程序写起来比较简单。硬件连接参考如图。
连接上硬件电路,就要写程序了,从名字可以看出来,1602显示两行,每行16个字符,一个字符包含的点阵可以自己设置(后边介绍)。
首先显示内容分为两种,一种是常用字符,存储在CGROM中,用户可以直接调用,另一种是自定义的字符,比如自己设计的一些奇怪的图形之,存储在CGRAM。当时被这两个名词和DDRAM搞得很乱,这里详细解释一下。
DDRAM是显示用的,从RAM可以看出来,是读的意思,地址与显示位置如下,每行40个地址,1602只用到前16个,共两行,对应关系如下。
当我们想在指定位置写入内容时,要先指定地址,如在第一行第一位写入,地址位是00H,再加上DB7的1,即80H(0010000000),第二行第一位是40H,再加上DB7的1,即C0H(0011000000),依次类推。
LCD的已有的字模存储在CGROM中,自定义的存储在CGRAM,留给自定义的位置只有8个地址,字模地址为01000000-01000111八个地址,也就是最多自定义8个符号或者图形。
根据这条指令,来写一个摄氏度℃的自定义符号,对应图如下
字符对应的数组为table【】={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00},将℃写入指定的位置之前,要先把对应数组写入CGRAM存储,再写入DDRAM显示。如果直接用已有的字符,可以直接把数组写入DDRAM显示。
区分清楚自定义字符和已有字符,程序就简单了。主要步骤是延时函数、写指令、写数据、初始化、主函数。
下面举两个例子,写入常规字符串12345,写入字符串℃。
程序一
#include<reg52.h> //包含头文件
#define uint unsigned int //预定义
#define uchar unsigned char
sbit rs=P2^6; //1602的数据/指令选择控制线
sbit rw=P2^5; //1602的读写控制线
sbit en=P2^7; //1602的使能控制线
/*P0口接1602的D0~D7*/
uchar code table[]="1234"; //要显示的内容放入数组table
void delay(uint n) //延时函数
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com) //1602写命令函数
{
rs=0; //选择指令寄存器
rw=0; //选择写
P0=com; //把命令字送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(uchar dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
P0=dat; //把要显示的数据送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函数
{
uchar m=0;
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位
for(m=0;m<4;m++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table[m]);
delay(200);
}
while(1); //动态停机
}
程序二
#include<reg52.h> //包含头文件
#define uint unsigned int //预定义
#define uchar unsigned char
sbit rs=P2^6; //1602的数据/指令选择控制线
sbit rw=P2^5; //1602的读写控制线
sbit en=P2^7; //1602的使能控制线
/*P0口接1602的D0~D7*/
uchar code table[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //要显示的内容放入数组table
void delay(uint n) //延时函数
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com) //1602写命令函数
{
rs=0; //选择指令寄存器
rw=0; //选择写
P0=com; //把命令字送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(uchar dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
P0=dat; //把要显示的数据送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函数
{
uchar m;
lcd_init(); //液晶初始化
lcd_wcom(0x40);//设定CGRAM地址,把自定义字符存储进去
for(m=0;m<8;m++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x85); //显示地址设为85H,上排中间位
lcd_wdat(0);
while(1); //动态停机
}
总结:区分DDRAM和CGRAM,DDRAM是字符对应在屏幕上的位置,CGRAM是把自己定义的字符存在8个字节里,即lcd_wcom(0x40)。
明天继续研究如何用液晶屏幕显示年月日,待续……
LCD1602液晶显示屏的入门级应用(一)相关推荐
- 和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?
目录 1.简介和驱动原理 2.实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/cate ...
- STC89C52单片机 LCD1602液晶显示屏
LCD1602显示 VVcat #include <reg52.h>typedef unsigned char uchar; typedef unsigned int uint;sbit ...
- 51单片机——LCD1602液晶显示屏
如下图:红框就是LCD1602液晶显示屏,他是可插拔的,插上去后数码管就会乱码无效了,因为他两共用了MCU的8个P0口 LCD1602原理图 从上面两幅图可以看出来 LCD1602的LCD_D0~LC ...
- 外设驱动库开发笔记33:LCD1602液晶显示屏驱动
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形.在这一章我们就来讨论LCD ...
- STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创
STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创 A0,A1,A2全部悬空,那么PCF8574的IIC地址为0x4e.(具体原因,看PCF ...
- 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...
描述 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示, ...
- LCD1602液晶显示屏模块资料
模块实例https://blog.csdn.net/qq_38393591/article/details/108643827 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符. ...
- LCD1602液晶显示屏的工作原理图是什么呢?
本文重点是由深圳市兴宇合电子技术人员为大家介绍LCD1602液晶显示屏的工作原理以及原理图,希望对大家有所帮助. (1)LCD1602液晶显示屏工作原理如下: LCD1602液晶显示屏通过电压来改变填 ...
- LCD1602液晶显示屏用51单片机怎么驱动?(详细笔记附设计源码)
LCD1602液晶显示 (一)LCD1602简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母.数字.符号的点阵型液晶模块.它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符 ...
最新文章
- Vue入坑——vue-router如何传递参数
- Ubuntu18.04 VMtools的安装与卸载
- java项目大小_Java项目仅在调整窗口大小之后出现
- 基于matlab/simulink的双电机速度跟踪伺服系统仿真,基于MatlabSimulink的伺服系统仿真pdf.doc...
- 广州python平均薪资_爬取广州的python和Java薪资,为什么Python 高于Java(有代码)...
- CS224n——lecture3课程导学
- pb string 接收dll按值返回_JavaScript 是如何工作的:JavaScript 的共享传递和按值传递...
- [BZOJ1877][SDOI2009]SuperGCD
- Web App:赌的就是互联网未来并 非无可挑剔
- Luogu4494 [HAOI2018]反色游戏 【割顶】
- 凸优化第二章凸集 2.4 广义不等式
- HBase 源码解析
- 以德服人——合格的产品经理
- java 使用JEP解析字符串计算公式 求值(附带自定义函数编写)
- Windows 95 下载
- Ajax-ajax实例2-根据邮政编码获取地区信息
- dellr420部署os_dell r420 H310/H810阵列配置教程及常见问题
- linkMap深度解析
- Python求最小公倍数和最大公约数(附加辗转相除)
- RocketMq最强总结 带你rocket从入门到入土为安