必威体育Betway必威体育官网
当前位置:首页 > IT技术

LCD1602液晶显示屏的入门级应用(一)

时间:2019-08-30 11:40:00来源:IT技术作者:seo实验室小编阅读:55次「手机版」
 

lcd液晶显示屏

嵌入式小白,今天用到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)。

明天继续研究如何用液晶屏幕显示年月日,待续……

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读