完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一.原理图及引脚说明 可由Rb1电位器控制LCD的对比度 [tr]编号引脚名引脚说明编号引脚名引脚说明[/tr]
1.1602的存储器 DDRAM:作为显示用的RAM,其地址直接和屏幕上的位置相对应,具体可看第4点; CGROM:字模存储ROM,里面存入了ascall码字符,显示时自动调用,无需修改; CGRAM:用户自建字模RAM,可自行向其中添加想要的字模,6位地址码,每个字符占8个字节,所以最多存8个字符。 2.基本操作时序 [tr]序号基本操作时序[/tr]
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.指令说明 [tr]序号指令RSR/WD7D6D5D4D3D2D1D0[/tr]
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:光标或显示移位 [tr]S/CR/L功能[/tr]
设定数据总线位数、显示的行数及字型 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); //设置写一个字符后地址指针自动加1 write_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; else addr = 0xc0 + x; write_cmd(addr); } //对应位置显示字符串 void LCD1602_Show(unsigned char x,unsigned y,unsigned char *str) { LCD1602_SetRAM(x,y); while(*str != ' |