一.原理图及引脚说明


可由Rb1电位器控制LCD的对比度

编号 引脚名 引脚说明 编号 引脚名 引脚说明
1 VSS 电源地 9 D2 Data I/O
2 VDD 电源正极 10 D3 Data I/O
3 VL 对比度调节 11 D4 Data I/O
4 RS 数据/指令选择段(H/L) 12 D5 Data I/O
5 R/W 读/写选择段(H/L) 13 D6 Data I/O
6 E 使能信号 14 D7 Data I/O
7 D0 Data I/O 15 BLA 背光源正极
8 D1 Data I/O 16 BLK 背光源负级

二.控制接口说明

1.1602的存储器

DDRAM:作为显示用的RAM,其地址直接和屏幕上的位置相对应,具体可看第4点;
CGROM:字模存储ROM,里面存入了ascall码字符,显示时自动调用,无需修改;
CGRAM:用户自建字模RAM,可自行向其中添加想要的字模,6位地址码,每个字符占8个字节,所以最多存8个字符。

2.基本操作时序
序号 基本操作 时序
1 读状态 RS=L,R/W=H,E=H,D0~7=状态字
2 写指令 RS=L,R/W=L,D0~7=指令码,E=高脉冲
3 读数据 RS=H,R/W=H,E=H,D0~7=数据
4 写数据 RS=H,R/W=L,D0~7=数据,E=高脉冲
3.状态字说明

STA7:读写操作使能,1—禁止,0—允许
STA6~0:当前数据地址指针的数值

对应代码:

//读状态
void read_state(void)
{unsigned char sta;         //状态读取存储变量LCD1602_DB=0xff; LCD1602_RS=0;LCD1602_RW=1;LCD1602_E=1;do{LCD1602_E=1;sta=LCD1602_DB;   //把状态字读取到sta变量中,可通过最高位判断液晶是否处于忙态,1时为忙 LCD1602_E=0;   //释放总线,防止影响其他模块}while(sta&0x80); //判断最高位,直到允许读写时跳出循环
}//写指令
void write_cmd(unsigned char cmd)
{read_state();LCD1602_RS=0;    //RS=0->指令LCD1602_RW=0;    //R/W=0->写LCD1602_DB=cmd;  //写入指令LCD1602_E=1; LCD1602_E=0;
}//写数据
void write_data(unsigned char date)
{read_state();LCD1602_RS=1;   //RS=1->数据LCD1602_RW=0; //R/W=0->写LCD1602_DB=date; //写入数据LCD1602_E=1;LCD1602_E=0;
}
4.DDRAM地址映射图

5.指令说明
序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1 清显示 0 0 0 0 0 0 0 0 0 1
2 光标返回 0 0 0 0 0 0 0 0 1 *
3 光标和显示模式设置 0 0 0 0 0 0 0 1 I/D S
4 显示开/关控制 0 0 0 0 0 0 1 D C B
5 光标或字符移位 0 0 0 0 0 1 S/C R/L * *
6 功能设置 0 0 0 0 1 DL N F * *
7 设置字符发生存储器地址 0 0 0 1 A5 A4 A3 A2 A1 A0
8 设置数据存储器地址 0 0 1 A6 A5 A4 A3 A2 A1 A0
9 读忙标志或AC地址 0 1 BF A6 A5 A4 A3 A2 A1 A0
10 写数据到CGRAM/DDRAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0
11 从CGRAM/DDRAM读数据 1 1 D7 D6 D5 D4 D3 D2 D1 D0

指令1:清显示
1.清除显示器,将DDRAM全部写入空白的ASCll码20H;
2.地址计数器AC的值设为0;
3.光标复位到地址00H的位置;

指令2:光标复位指令
1.光标复位到地址00H的位置;
2.地址计数器AC的值设为0;
3.DDRAM内容不变

指令3:光标和显示模式设置
1.I/D:光标移动方向。0—左移,1—右移;
2.S:屏幕上所有文字是否移动。0—关闭,1—右移

指令4:显示开关控制
1.D:控制整体显示的开关。0—关,1—开;
2.C:控制光标显示的开关。0—关,1—开;
3.B:控制光标闪烁的开关。0—关,1—开;

指令5:光标或显示移位

S/C R/L 功能
0 0 光标左移1格且地址计数器AC减1
0 1 光标右移1格且地址计数器AC加1
1 0 屏幕上所有字符左移1格但光标不变
1 1 屏幕上所有字符右移1格但光标不变

指令6:功能设置
设定数据总线位数、显示的行数及字型
1.DL:数据总线位数。0—4位,1—8位;
2.N:显示行数。0—1行,1—2行;
3. F:显示点阵类型。0—5X10点阵,1— 5X7点阵

指令7:设定CGRAM地址
设定下一个要存入数据的CGRAM的地址,该指令在向CGRAM时数据前使用。

指令8:设定DDRAM地址
设定下一个要存入数据的DDRAM的地址,该指令在向DDRAM写数据(即显示)时使用。

指令9:读取忙信号或AC地址
1.BF:液晶显示器是否忙。0—不忙,可接收,1—忙,暂时无法接收;
2.读取计数器AC的地址;

指令10:写数据到CGRAM或DDRAM
1.将字符码写入DDRAM,以使液晶显示屏显示出相对于的字符;
2.使用者自己设计的图形存入CGRAM;

指令11:从CGRAM或DDRAM读出数据
读取CGRAM或DDRAM中的内容。

初始化代码:

//LCD初始化设置
void lcd_init()
{       LCD1602_E=0;        //使能关(操作前关使能使用时打开)write_cmd(0x3c);     //设置16*2显示,5*7点阵,8位数据口write_cmd(0x0c);     //设置开显示,不显示光标write_cmd(0x06);     //设置写一个字符后地址指针自动加1write_cmd(0x01);     //显示清0,数据指针清0
}//x为列,范围0~39
//y为行,0——第1行,1——第2行
//将坐标转换为对应的RAM地址,实际指针地址为0x80+RAM映射地址,0x80为指令固定位
void LCD1602_SetRAM(unsigned char x,unsigned char y)
{unsigned char addr;if(y == 0)addr = 0x80 + x;elseaddr = 0xc0 + x;write_cmd(addr);
}//对应位置显示字符串
void LCD1602_Show(unsigned char x,unsigned y,unsigned char *str)
{LCD1602_SetRAM(x,y);while(*str != '\0'){write_data(*str++);}
}
#define LCD1602_DB P0sbit LCD1602_RS=P2^0;  //RS,数据/命令选择端(H/L)
sbit LCD1602_RW=P2^1;  //R/W,读/写选择端(H/L)
sbit LCD1602_E=P1^2;  // E,使能信号void read_state(void);//读状态,直到lcd不忙才继续执行其他操作
void write_cmd(unsigned char com);//写指令
void write_data(unsigned char date);//写数据
void lcd_init();//LCD初始化
void LCD1602_SetRAM(unsigned char x,unsigned char y);//设置显示RAM起始地址(x,y对应屏上字符坐标)
void LCD1602_Show(unsigned char x,unsigned y,unsigned char *str);//显示字符串void main()
{lcd_init();LCD1602_Show(0,0,"Hello everyone!");  //第一行显示Hello everyone!//向CGRAM中存入字符:write_cmd(0X40+num);num为8的倍数(0~56)//然后用write_data(data);循环写入8个字节,即一个字符对应的8行//如果要将CGRAM中自己存入的字符显示到屏幕上//可先write_cmd(addr);addr为DDRAM的地址//然后write_data(num);num=1~8,即CGRAM中的8个字符//注意首先要保证CGRAM中已经存入字符while(1){
//      write_cmd(0x18);    //显示器字符左移//添加适当的延时函数        }
}

注意:用此开发板时,如果插上LCD1602,可能会对其他模块产生影响,例如数码管无法正常显示等。

【蓝桥杯——单片机学习笔记】十二.LCD1602(STC15F2K60S2)相关推荐

  1. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  2. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  3. 【蓝桥杯-单片机学习笔记(十七)】24C02原理及其读写操作

    一.24C02 24C02是一个2K Bit的串行EEPROM存储器,内部含有256个字节.在24C02里面有一个8字节的页写缓冲器.24C02支持I2C总线协议.I2C是一种双向.两线串行通信接口, ...

  4. 【蓝桥杯-单片机学习笔记(十二)】工厂灯光控制系统

    一.要求 在CT107D单片机综合训练平台上,设计程序,实现实时显示开机系统运行时间和按键控制灯光. 1.设计系统初始化函数,关闭蜂鸣器和继电器等无关设备. 2.设计设备检测函数,首先检测LED灯,从 ...

  5. 【蓝桥杯-单片机学习笔记(十五)】NE555频率测量

    一.要求 在CT107D平台上测量NE555产生方波的频率值并显示在数码管上.频率数据显示用5位数码管,单位是Hz,数码管最左边显示"F".改变滑动变阻器Rb3可以改变频率大小. ...

  6. 【蓝桥杯-单片机学习笔记(十四)】DS1302

    一.DS1302介绍 1.功能介绍 DS1302包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信仅通过一条串行输入输出口,实时时钟/日历提供包括秒.分.时.日期.月份和年份信息.闰年可 ...

  7. 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

    一.要求 在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复. 二.数码管 1.七段数码管 七段数码管,其实内部由8个发光二极管构 ...

  8. 【蓝桥杯——单片机学习笔记】五.数码管显示(STC15F2K60S2)

    一.原理图 二.原理图分析 如上图,U7锁存器控制数码管的段选(即每个数字的7个短横和1个点),U6锁存器控制数码管的位选(即8个数字).具体锁存器的输出端对应数码管的哪个输入端可看上图.控制锁存器的 ...

  9. [蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示

    一.理论部分 共阳数码管引脚可以分为两个部分,一是段码,一个是位码.段码指的是一个数码管的7个段加dp小数点,一共8个,通过P0控制其亮灭使得数码管显示出不同效果.譬如亮afedcg表示的是6形状.位 ...

最新文章

  1. numba 让python速度提升百倍
  2. 数学图形(1.5)克莱线
  3. Linux系统CUDA10.2+CUDNN安装教程
  4. Java 7:满足Fork / Join框架
  5. python邮件模块_Python收发邮件模块,用,来,发送,接收
  6. 全面掌控你的苹果Mac:iStat Menus
  7. mysql 查询若干小时之内的数据
  8. NumPy学习笔记之zeros_like()函数(包含zeros函数)
  9. hdu acm2549
  10. U盘 / 移动硬盘在 Mac 苹果电脑上无法使用问题
  11. CashFiesta 攻略
  12. 2019大裁员!年关将至,最高裁员比例竟达90%?
  13. Python教程:输入一系列整数输出最大值
  14. 深度学习环境配置2——windows下的torch=1.2.0环境配置
  15. 一点资讯战略升级:否定百度收购同时与微博牵手
  16. MySQL插入数据的多种方式
  17. tkMapper 简记
  18. 微型计算机中的奔三是指,奔三原则的意思
  19. 说说淘宝和中小卖家的未来
  20. User Experience Design and Information Architecture

热门文章

  1. 基于Faster-RCNN的水书古籍手写文字的检测与识别-论文阅读
  2. matplotlib学习-2
  3. 2019年11月14日
  4. android视频播放器流程图,Android OpenGL ES 10.1 视频播放器
  5. 记录一下自己2018年秋招的情况
  6. 应届毕业生即将到来....程序员饭碗恐成难题
  7. akoj-1245-字符转换
  8. 安防无战事:一场10213亿元的误会 1
  9. python 修改pom文件_引用pom文件
  10. qcqa是什么职位_QC、QA的定义及岗位职责