【LCD模块】液晶显示模块PDF笔记

LCD显示的步骤(默认已经完成片选): 

一、LCD每画一个点,实际上就是写寄存器:

   每个寄存器有相应的地址,写寄存器之前,要用A0A1A2这三个bit的地址选择你要改写的寄存(如:状态字寄

存器PSW:地址A2A1A0=111)。寄存器的地址如下,分别控制着:行(Y坐标)、列(X坐标)、前景色、背景色、数据、状态控制寄存器

所以,步骤就是:

1、写前景色、背景色寄存器

2、写状态控制寄存器(亮度控制、坐标自动+1、单点/多点写入方式)

3、写X,Y坐标寄存器。(用前两步设置的属性,在(x,y)处画点。

 上面每一步又可分为两步:1、通过地址A0A1A2选择寄存器,2、写入值。

“WLAT80控制板中有8个寄存器,它们是行(Y坐标)、列(X坐标)、前景色、背景色、数据、状态控制寄存器,通过对相关寄存器操作,可实现单点读屏,单点、多点、8点写屏。”

 

【LCD模块】液晶显示模块PDF笔记

【LCD模块】液晶显示模块PDF笔记

【LCD模块】液晶显示模块PDF笔记

寄存器:
X坐标寄存器:存即将显示的点的X坐标值,地址:A2A1A0=000,001,低字节在前,高字节在后

【LCD模块】液晶显示模块PDF笔记

Y坐标寄存器:地址:A2A1A0=010,011,低字节在前,高字节在后

【LCD模块】液晶显示模块PDF笔记

 状态控制寄存器:

【LCD模块】液晶显示模块PDF笔记

Bri1,bri0为亮度控制:=11,最亮;=10,较亮;=01,较暗;=00,黑屏。
D3和D2位根据用户需要可设置成以下两种功能:
Xinc为列(X坐标)号自动增加控制位,=1时允许X自动增加,写满一行后自动换行,=0时则禁止增加。单点写屏时,X自动加1,多点(或8点)写屏时自动加8;
YINC为行(Y坐标)自动加1控制位,=1时允许自动加1,=0时则禁止加1;
WRCON1,WRCON0为写入方式:
WRCON1,WRCON0=00时为单点写入方式,直接将颜色值写入数据寄存器,而与前景色、背景色寄存器内容无关;
WRCON1,WRCON0=01时为多点写入方式,将点位信息写入数据寄存器,如写入数据寄存器为‘01010101b’则显示‘原色、前景色、原色、前景色、原色、前景色、原色、前景色’。
WRCON1,WRCON0=10时为8点写入方式,将点位信息写入数据寄存器,如写入数据寄存器为‘01010101b’则显示‘背景色、前景色、背景色、前景色、背景色、前景色、背景色、前景色’。
**原色:显示屏原有颜色,前景色、背景色是事先存入前景、背景寄存器中的颜色值。

‘01010101b’

 set_lcd_status(0xC0);      11000000   直接将颜色值写入数据寄存器

 set_lcd_status(0xC1);      11000001   原色、前景色

 set_lcd_status(0xC2);      11000010   背景色、前景色

   如下图,显示屏原有颜色是一幅照片,“多点”两个字是用多点写入方式写入的,只写前景色蓝色,不写背景色;而“8点” 两字是用8点写入方式写入的,前景色为绿色,背景色为白色,前景和背景同时写入。

更多寄存器的功能和用法看PDF。

【LCD模块】液晶显示模块PDF笔记

二、实例:

 写寄存器:

void write_reg(uchar Addr,uchar Data)

  P5OUT|=BIT4;            //RD=1  
  P5OUT&=~BIT1;           //片选有效     
  P10DIR|=BIT0+BIT1+BIT2; //P10口的0、1、2脚设为输入,为向LCD模块写寄存器地址:A0A1A2 做准备
  Addr=Addr&0x07+(P10OUT&BIT3);//保持P10.3原来的电平状态(我们的P10.3口有其他用途,不能改变它)
  P10OUT=Addr;             //写寄存器地址:A0A1A2 选择要操作的寄存器   
  P4OUT=Data;             //数据挂在P4口上准备好 

  P5OUT&=~BIT5;           //写有效,将数据数据写入寄存器。

  P5OUT|=BIT5;            //写撤销     
  P5OUT|=BIT1;            //片选无效
}

void set_status(uchar status)
{
  write_reg(0x0F,status);
}

void set_front_color(uchar status)
{
  write_reg(0x0C,status);
}

void set_background_color(uchar status)
{
  write_reg(0x0D,status);
}

写汉字的函数:


void draw_hz(uint16 x,uint16 y,uint8 hz_height,uint8 hz_width, const uint8 *data)
{
  uint16 p = 0;
  set_lcd_status(0xC6);                                  // X自增8点写入
  for(uint8 i=0;i<hz_height;i++)
  {
    set_xcoord(x);                                       // 写X坐标数据
    set_ycoord(y+i);                                     // 写Y坐标数据

    for(uint8 j = 0; j < hz_width; j ++)
    {
      write_lcdreg(0x06,data[p]);                        //0x06写显示数据寄存器 
      p++;
    }
  }
}

汉字的高度和宽度,由取模取出来的字体的宽度高度决定:如:


const uint8 num[11][144]@0x010000={     
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x06,0x00,0x00,0x70,
0x07,0xFF,0xFF,0xF0,0x06,0x0C,0x30,0x70,0x06,0x0C,0x30,0x70,0x06,0x0C,0x30,0x70,
0x07,0xFF,0xFF,0xF0,0x06,0x01,0x00,0x70,0x04,0x01,0xC0,0x50,0x00,0x03,0x80,0x38,
0x3F,0xFF,0xFF,0xFC,0x10,0x03,0x00,0x00,0x00,0x83,0x06,0x00,0x00,0xFF,0xFF,0x00,
0x00,0xC0,0x07,0x00,0x00,0xC0,0x06,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,
0x00,0xC0,0x06,0x00,0x00,0xC0,0x06,0x00,0x00,0xFF,0xFE,0x00,0x00,0xC0,0x06,0x00,
0x00,0xC0,0x06,0x00,0x00,0xFF,0xFE,0x00,0x00,0xC0,0x06,0x00,0x00,0xC0,0x06,0x18,
0x00,0xC0,0x06,0x3C,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00}

 ……

}

高度为:33   宽度为:32/8= 4; 所填入的参数应为: 33 4  hz_height=33  hz_width=4

取字模,字模数组加括号和不加花括号的区别:

加花括号的时候,num[11][144] 数组的单元个数可以不精确,调用的时候num[x],以花括号为结束,

不加花括号的时候,数组的单元个数必须精确,调用时候会按定义的个数调用,如果里面的字模点阵数不一致,就会出现错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值