任务4-4 字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)

2024-07-11
| 24页
| 33人阅读
| 1人下载
普通

内容正文:

任务4-4 字符型LCD液晶显示广告牌控制 1 一、任务导入 任务要求 用单片机控制LCD1602液晶模块,在第1行正中间显示“SHEN ZHEN”字符串。 硬件电路 二、1602LCD字符显示模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 LCD模块 VSS VDD VO DB0 DB1 DB3 DB2 DB5 DB4 DB7 DB6 A K RS R/W E 数据线 电源接线 背光控制线 读写控制线 6 RS R/W 操作 0 0 写命令操作(初始化、光标定位等) 0 1 读状态操作(读忙标志) 1 0 写数据操作(要显示的内容) 1 1 读数据操作(可以把显示存储区中的数据反读出来) 字符型LCD1602的基本操作 编号 指令名称 控制信号 命令字 D7 D6 D5 D4 D3 D2 D1 D0 1 清屏 0 0 0 0 0 0 0 0 0 1 2 归位home 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 CGRAM地址设置 0 0 0 1 A5 A4 A3 A2 A1 A0 8 DDRAM地址设置 0 0 1 A6 A5 A4 A3 A2 A1 A0 9 读BF和AC 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 1602LCD的命令字 LCD初始化 //lcd初始化 void lcd_init() { lcd_w_cmd(0x3c); // 设置工作方式 lcd_w_cmd(0x0e); // 设置光标 lcd_w_cmd(0x01); // 清屏 lcd_w_cmd(0x06); // 设置输入方式 } RS=0;R/W=1;E:正脉冲 //读状态函数 unsigned char lcd_r_start() //8位数据线连接方式 { unsigned char s; RW=1; //RW=1,RS=0,读LCD状态 delayus(); RS=0; delayus(); E=1; //E端时序 delayus(); s=LCD_DB; //从LCD的数据口读状态 delayus(); E=0; delayus(); RW=0; delayus(); return(s); //返回读取的LCD状态字 } D7 D6 D5 D4 D3 D2 D1 D0 BF BF=1:表示LCD正在忙 BF=0:表示LCD不忙 i=lcd_r_start(); // 调用读状态函数,读取LCD状态字 //写命令操作函数 void lcd_w_cmd(unsigned char com) //8位数据线连接方式 { unsigned char i; do{ // 查LCD忙操作 i=lcd_r_start(); // 调用读状态字函数 i=i&0x80; // 与操作屏蔽掉低7位 delayms(1); }while(i!=0); //LCD忙,继续查询,否则退出循环 RW=0; delayus(); RS=0;    //RW=0,RS=0,写LCD命令字 delayus(); E=1;    //E端时序 delayus(); LCD_DB =com; //将com中的命令字写入LCD数据口 delayus(); E=0; delayus(); RW=1; delayms(50); } RS=0;R/W=0;E:正脉冲 RS=1;R/W=0;E:正脉冲 //写数据函数 void lcd_w_dat(unsigned char dat) //8位数据线连接方式 { unsigned char i; do{ // 查LCD忙操作 i=lcd_r_start(); // 调用读状态字函数 i=i&0x80; // 与操作屏蔽掉低7位 delayms(1); }while(i!=0); CD忙,继续查询,否则退出循环 RW=0; delayus(); RS=1; //RW=0,RS=1,写LCD数据 delayus(); E=1; //E端时序 delayus(); LCD_DB =dat; //将com中的命令字写入LCD数据口 delayus(); E=0; delayus(); RW=1; delayms(50); } 列 行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF 光标位置与相应命令字 (1)表中命令字以十六进制形式给出,该命令字就是与LCD显示位置相对应的DDRAM地址。 (2)第一行和第二行的命令字是不连续的。 lcd_w_cmd(0x84); //光标定位在第1行第5列 13 三、程序设计 #include <reg51.h> //包含头文件reg51.h,定义了51单片机的专用寄存器 #include <intrins.h> //包含头文件intrins.h,代码中引用了_nop_()函数 //定义控制信号端口 sbit RS=0xb0; //P3.0 sbit RW=0xb1; //P3.1 sbit E=0xb2; //P3.2 程序预处理 //主函数 void main() { unsigned char lcd[]="SHEN ZHEN"; unsigned char i; P1=0xff; //送全1到P0口 lcd_int(); //初始化LCD delay(255); lcd_w_cmd(0x83); //设置显示位置 delay(255); for(i=0;lcd[i]!='\0';i++) //显示字符串,字符串结束符为’\0’ { lcd_w_dat(lcd[i]); delay(200); } while(1); //原地踏步,待机命令 } 四、举一反三 在1602LCD的第1行第2列显示“工人” 举一反三 LCD标准字库 1602LCD模块的标准字库表中没有中文字符! 18 利用1602LCD模块字符发生存储器CGRAM可以自编8个5×8字符。 自编字符的命令字: A7 A6 A5 A4 A3 A2 A1 A0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 (1)A7A6=01:CGRAM地址设置的命令字。 (2)A5A4A3:与自编字符的DDRAM数据相对应的字符代码。若A5A4A3=“000”,则该字符写入DDRAM的代码为00,若A5A4A3=“001”,则该字符写入DDRAM的代码为01,依次类推。 (3)A2A1A0:与CGRAM字模的8行相对应。当A2A1A0=“000”时,写入第1行的字模码,当A2A1A0=“001”时,写入第2行的字模码,依次类推。 按照CGRAM地址和数据自编5x7字模 自编字库 软件设计思路 lcd_w_cmd(0x40); //写入第1行CGRAM地址 lcd_w_dat(0x1f); //写入第1行CGRAM数据 自编5x7的字“工”字模和“人”字模 //在CGRAM中建立“工”字字模 void GONG_ZI() { lcd_w_cmd(0x40); //写入第1行CGRAM地址 lcd_w_dat(0x1f); //写入第1行CGRAM数据 lcd_w_cmd(0x41); //写入第2行CGRAM地址 lcd_w_dat(0x1f); //写入第2行CGRAM数据 lcd_w_cmd(0x42); //写入第3行CGRAM地址 lcd_w_dat(0x04); //写入第3行CGRAM数据 lcd_w_cmd(0x43); //写入第4行CGRAM地址 lcd_w_dat(0x04); //写入第4行CGRAM数据 lcd_w_cmd(0x44); //写入第5行CGRAM地址 lcd_w_dat(0x04); //写入第5行CGRAM数据 lcd_w_cmd(0x45); //写入第6行CGRAM地址 lcd_w_dat(0x1f); //写入第6行CGRAM数据 lcd_w_cmd(0x46); //写入第7行CGRAM地址 lcd_w_dat(0x1f); //写入第7行CGRAM数据 lcd_w_cmd(0x47); //写入第8行CGRAM地址 lcd_w_dat(0x00); //写入第8行CGRAM数据 } //在CGRAM中建立“人”字字模 void REN_ZI() { lcd_w_cmd(0x48); //写入第1行CGRAM地址 lcd_w_dat(0x00); //写入第1行CGRAM数据 lcd_w_cmd(0x49); //写入第2行CGRAM地址 lcd_w_dat(0x04); //写入第2行CGRAM数据 lcd_w_cmd(0x4A); //写入第3行CGRAM地址 lcd_w_dat(0x04); //写入第3行CGRAM数据 lcd_w_cmd(0x4B); //写入第4行CGRAM地址 lcd_w_dat(0x0A); //写入第4行CGRAM数据 lcd_w_cmd(0x4C); //写入第5行CGRAM地址 lcd_w_dat(0x0A); //写入第5行CGRAM数据 lcd_w_cmd(0x4D); //写入第6行CGRAM地址 lcd_w_dat(0x11); //写入第6行CGRAM数据 lcd_w_cmd(0x4E); //写入第7行CGRAM地址 lcd_w_dat(0x11); //写入第7行CGRAM数据 lcd_w_cmd(0x4F); //写入第8行CGRAM地址 lcd_w_dat(0x00); //写入第8行CGRAM数据 } 判断按键并累加次数 根据次数进行跳转 判断按键是否弹起 void main() //主函数 { P1=0xff; //送全1到P0口 lcd_int(); //初始化LCD delay(255); GONG_ZI(); //调用“工”字建模函数 REN_ZI(); //调用“人”字建模函数 lcd_w_cmd(0x81); //设置显示位置 lcd_w_dat(0x00); //显示“工” lcd_w_dat(0x01); //显示“人” while(1); //待机 } $$

资源预览图

任务4-4  字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)
1
任务4-4  字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)
2
任务4-4  字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)
3
任务4-4  字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)
4
任务4-4  字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)
5
任务4-4  字符型LCD液晶显示广告牌控制 (课件)-《单片机技术与应用》同步教学(电子工业版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。