【杂谈】LCD1602液晶显示模块

  这几天弄单片机的课设,正好需要用到1602这个模块,简单整理一下,方便以后回忆。
 

前言

  关于1602的读时序和写时序在网上可以轻易找到介绍,这里不做过多讲解,这里只讲解基础显示内容。

LCD地址编排

  1602一行有16列,总共有两行,它的地址编排如下。

第一列 第二列 第三列 第四列 ... 第十六列
0x80 0x81 0x82 0x83 ... 0x8f
0xc0 0xc1 0xc2 0xc3 ... 0xcf

  显示时要先指定地址,将要显示的地址发送至指令寄存器单元,再将要显示的数据发送至数据寄存器单元。

代码实现

基础底层代码

点击查看代码
//检查忙函数
void  fbusy(){
	P1 = 0xff;
	RS = 0;
	RW = 1;
	EN = 1;
	EN = 0;
	while((P1 & 0x80))
	{
		EN = 0;	
		EN = 1;		
	}
}

//写命令函数
void  wc51r(unsigned char j){
    fbusy();
	EN = 0;
	RS = 0;
	RW = 0;
	EN = 1;
	P1 = j;
	EN = 0;
}
//写数据函数
void  wc51ddr(unsigned char j){
 	fbusy();		//读状态;
	EN = 0;
	RS = 1;
	RW = 0;
	EN = 1;
	P1 = j;
	EN = 0;
}

1602初始化

void  LCD_Init(void){
	wc51r(0x01);         //清屏
	wc51r(0x38);         //使用8位数据,显示两行,使用5*7的字型
	wc51r(0x0c);         //显示器开,光标关,字符不闪烁
	wc51r(0x06);         //字符不动,光标自动右移一格
}

显示内容

unsigned char Disdata[6]={"Hello "};//五个字母加一个空格
WriteData(0x80,Disdata,5);//向第一行第一列写入字符串Disdata,写入字符串长度为5

 
  像这种显示数据的模块,比如1602、数码管,不必实时刷新,多少ms定时刷新一次就行,毕竟人眼分辨率并没有那么快,数据可以实时采集。
 
2022 / 11 / 3023:24
GJY in Harbin

posted @ 2022-11-30 23:26  寥若辰星  阅读(769)  评论(0编辑  收藏  举报