2018科协硬件方向培训--显示屏部分

2018科协硬件方向培训–显示屏部分

显示屏LCD的介绍

液晶显示器(LCD)的主要原理是以电流刺激液晶分子产生点,线,面并配合背部灯管构成画面。
各种型号的液晶通常按照显示字符的行数或液晶点阵的行,列数来命名。比如:1602的意思是每行显示16个字符,一共可以显示两行:类似的命名还有0801,1601等,这类液晶通常都是字符型液晶,而像12864液晶的意思液晶由128列,64行组成,即共有128*64个点来显示各种图形,这类液晶是图形型液晶
液晶的体积小,功耗低,显示操作简单,但是其使用的温度范围很窄,通用型液晶正常工作温度0~+55℃。

LCD1602的介绍

本次培训以1602为例简单介绍LCD的使用,本次培训用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符内置含128个字符的ASCII字符集字库,只有并行接口,无串行接口。

1.接口信号说明

这里写图片描述

2.主要技术参数

显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm

3.基本操作时序

1.读状态:输入:RS=L,RW=H,E=H
输出:D0~D7=状态字
2.写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲
输出:无
3.读数据:输入:RS=H,RW=H,E=H
输出:D0~D7=数据
4.写数据:输入:RS=W,RW=L,D0~D7=数据,E=高脉冲
输出:无

4.RAM地址映射图

控制器内部RAM缓冲区,对应关系如图所示:
这里写图片描述
当我们在00~0F,40~4F地址中的任一处写入显示数据时,液晶可以显示出来,当在其他地址写入数据时,必须通过移屏等指令操作将他们移入可显示区域,方能正常显示。

5.状态字说明

比较细心可以发现在1602的基本操作时介绍,输出D0~D7=状态字。
一般D0~D6都指当前地址指针的数值
而D7则是读写操作使能,1指禁止,0指允许。
注意:原则上每次对控制器进行读写操作之前,都必须进行读写检测,俗称判忙,确保D7为0。但实际上,由于51单片机的操作速度慢于液晶控制器的反应速度,因此可以进行简单短暂延时即可。
一般读写操作检测函数(判忙函数):

bit LCD1602_Check_Busy(void){
Data= 0xFF; 
RS=0; 
RW=1; 
EN=0; 
_nop_(); 
EN=1; 
return (bit)(Data & 0x80); 
}

6.命令指令码

1602的操作时序中写指令,主要就是选用这些指令码。
这里写图片描述
除此之外还有数据指针设置:80H+地址码(0~27H,40~67H)
还有很多丰富的指令码。

LCD1602的编程

1.写操作时序

这里写图片描述

2.1602显示字符必要条件:

(1)液晶显示模式的设置
(2)字符显示位置的指定
(3)待显示字符的字模代码
因为1602内部CGRAM自带128个字符,我们显示需要的字符只用直接写入即可。然而要让LCD1602显示自定义字符,就得用到CGRAM指令,设置字库CGRAM地址命令码是0100 0000. 1602能存储8个自定义字符的首地址分别是:0X40,0X48,0X50,0X60,0X68,0X70,0X78
以0X40为例,它的存储空间如图:这里写图片描述
我们一般用5*7点阵,但1602也可以调成5*8点阵显示模式,意思是用五列八行其余置0。然后显示如“上”字:
这里写图片描述

3.简单显示程序如下:

#include "reg52.h"
void LCD_init();
void LCD_write_com(unsigned char com);
void LCD_write_data(unsigned char dat);
void LCD_delayus(unsigned int c);
#define LCD1602 P0
sbit E=P2^7;
sbit RW=P2^5;
sbit RS=P2^6;
unsigned char DIS[]= "S";
void main(){
    int i;
    LCD_init();
    LCD_write_com(0x80+0x40);
    for(i=0;i<2;i++)
    {
        LCD_write_data(DIS[0]); 
    }
    LCD_delayus(1000);
    for(i=0;i<4;i++)
    {
        LCD_write_com(0x1c);
    }
    while(1);
}
void LCD_delayus(unsigned int c)
{
    int i,j;
    for(;c>0;c--)
        for(i=119;i>0;i--)
            for(j=1;j>0;j--);
}
void LCD_write_com(unsigned char com)
{
    RS=0;
    RW=0;
    E=0;
    LCD_delayus(1);

    LCD1602=com;
    E=1;
    LCD_delayus(5);
    E=0;
}

void LCD_write_data(unsigned char dat)
{
    RS=1;
    RW=0;
    E=0;

    LCD_delayus(1);
    LCD1602 = dat;
    E=1;
    LCD_delayus(5);
    E=0;
}

void LCD_init()
{
    LCD_write_com(0x38);
    LCD_write_com(0x0c);
    LCD_write_com(0x06);
    LCD_write_com(0x01);
    LCD_write_com(0x80);    
}

1602的使用介绍到此,当然1602只是LCD显示屏中很简单一个例子,它最对只能显示简单汉字,所以我们经常会有其他用处更广的LCD屏代替例如12864。希望大家多多学习,本次培训总结完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值