首页 > 编程知识 正文

1602液晶显示屏引脚图(LCD1602液晶显示屏的入门级应用(一))

时间:2023-05-03 09:14:32 阅读:122814 作者:502

嵌入式小白,今天用到了1602。 CGRAM DDRAM CGROM搞得一团糟。 记录下来作为参考。

首先,1602液晶显示器除电源、接地外,还有3个控制引脚RS R/W E和8个数据引脚DB0-7。 建议将8个数据管脚连接到同一组。 程序很容易写。 硬件连接参考图。

连接硬件电路后,就要写程序了。 从名称中可以看到,1602表示两行,每行有16个字符。 一个字符中的点可以自己设定(后述)。

首先,显示内容分为两种。 一种是常用字符,存储在CGROM中,用户可以直接调用。 另一个是自定义字符,类似于自己设计的奇怪图形,存储在CGRAM中。 这两个名词和DDRAM弄得很混乱,所以在这里详细说明。

dRAM用于显示。 从ram可以看出,意思是读。 地址和显示位置如下。 每行40个地址,1602最多只有前16个两行。 对应关系如下。

如果希望写入到指定位置,则写入第一行的第一个位,地址位为00H,其上为DB7的1即80h(001000000 ),第二行的第一个位为40H,其上为DB7的1即c0h ) 001100000

液晶屏上的现有字体存储在CGROM中,自定义存储在CGRAM中,自定义只保留8个地址,字体地址为01000000-01000111的8个地址,最多8个符号或图形。

根据这个指令,写摄氏的自定义符号。 对应图如下

与字符对应的数组为table【】={0x 10,0x 06,0x 09,0x 08,0x 08,0x 09,0x 06,0x 00 },在将写入指定位置之前,将对应的数组写入CGRAM存储器,然后再写入DDD 如果原样使用现有字符,则可以将数组直接写入DDRAM进行显示。

明确区分自定义字符和现有字符会使程序变得简单。 主要步骤有延迟函数、写入命令、写入数据、初始化、主函数。

举以下两个例子,写入普通字符串12345,写入字符串。

程序1

#includereg52.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代码表[ ]=' 1234 '; //要显示的内容放入数组table中

语音延迟(uintn )//延迟函数

{

uint x,y;

for(x=n; x0; x----)

for(y=110; y0; y----;

}

voidLCD_wcom(ucharcom )//1602写命令函数

{

rs=0; //选择指令寄存器

rw=0; //选择写作

P0=com; //将命令语发送到P2

dlay(5; //稍微延迟一点,让1602准备接收数据

en=1; //使能线的电平发生改变,从而指示发送到1602的8位数据端口

en=0;

}

voidLCD_wdat(uchardat )//1602写入数据函数

{

rs=1; //选择数据寄存器

rw=0; //选择写作

P0=dat; //将显示的数据发送到P2

dlay(5; //稍微延迟一点,让1602准备接收数据

en=1; //使能线的电平发生变化,数据被发送到1602的8位数据端口

en=0;

}

voidLCD_init(/1602初始化函数

{

LCD_WCOM(0x38; //8位数据、双列、5*7字形

LCD_WCOM(0x0c; //打开显示器,xlmdxf、光标不闪烁

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);      //开启显示屏,xlmdxf,光标不闪烁 
    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)。

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。