重庆网站建设优化,网站开发费用会计分录,用什么开发手机网站,国内品牌备案建站1. 初识LCD1602#xff08;233.79#xff09;
非标协议外设
LCD1602显示
LCD1602#xff08;Liquid Crystal Display#xff09;是一种工业字符型液晶#xff0c;能够同时显示 1602 即 32 字符(16列两行) 引脚说明 第 1 脚#xff1a; VSS 为电源地第 2 脚#xff1…1. 初识LCD1602233.79
非标协议外设
LCD1602显示
LCD1602Liquid Crystal Display是一种工业字符型液晶能够同时显示 16×02 即 32 字符(16列两行) 引脚说明 第 1 脚 VSS 为电源地第 2 脚 VDD 接 5V 正电源第 3 脚 VL 为液晶显示器对比度调整端,接正电源时对比度最弱接地时对比度最高对比度过高时会产生“鬼影”使用时可以通过一个 10K 的电位器调整对比度。第 4 脚 RS 为寄存器选择高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚 R/W 为读写信号线高电平时进行读操作低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址当 RS 为低电平 R/W 为高电平时可以读忙信号当 RS 为高电平 R/W 为低电平时可以写入数据。第 6 脚 E 端为使能端当 E 端由高电平跳变成低电平时液晶模块执行命令。第 7-14 脚 D0D7 为 8 位双向数据线。第 15 脚 背光源正极。第 16 脚 背光源负极。
//和上官一号的接线
//工作电源
VSS -- GND
VDD -- 5V
//对比度
VO -- GND
//控制线
RS -- P1.0
R/W -- P1.1
E -- P1.4
//背光灯电源
A -- 5V
K -- GDN
//数据类似串口的SBUF
D0到D7 -- P0.到P0.72. LCD在一个位置显示一个字母的逻辑234.80
开发逻辑 在哪里显示 例如第二行第一个字符的地址是 40H那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢这样不行因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H) 10000000B(80H)11000000B(C0H) 显示什么ASCII码so代码时直接输入字符即可
3. LCD1602读写操作时序分析235.81
读操作时序 写操作时序 数序参数 4. 编程实现LCD1602显示字符C101236.82
代码16./LCD1602显示一个字符C
#include reg52.h
#include intrins.h
/*
RS -- P1.0
RW -- P1.1
E -- P1.4*/
#define dataBuffer P0 //定义8位数据线P0端口组
sbit RS P1^0;
sbit RW P1^1;
sbit EN P1^4;void check_busy(){char tmp 0x80;dataBuffer 0x80;while(tmp 0x80){//1000 0000RS 0; RW 1; //RS为低电平、R/W为高电平时可读忙信号EN 0;_nop_();EN 1;_nop_();_nop_();tmp dataBuffer;//数据建立时间读操作tD时读数据EN 0;_nop_(); }}void wirte_cmd(char cmd){check_busy();RS 0; //低电平时为指令寄存器RW 0; //全程低电平EN 0;_nop_();//延迟低电平tR的时间so25ns(tR)即可1us就足够dataBuffer cmd;//把指令传给P0 //数据建立时间写操作tSP2时写数据_nop_();//最好在拉高之前延迟一会因为还有一段tR的时间EN 1;_nop_();//延迟一个机器周期11.0592MHz1.085us即1085ns_nop_();//延迟tPWTF的时间EN 0;_nop_();//给低电平一点延迟
}
void wirte_data(char dataShow){check_busy();RS 1; //高电平时为数据寄存器RW 0; EN 0;_nop_();dataBuffer dataShow;//把数据传给P0_nop_();EN 1;_nop_();_nop_();EN 0;_nop_();
}void Delay15ms() //11.0592MHz
{unsigned char i, j;i 27;j 226;do{while (--j);} while (--i);
}
void Delay5ms() //11.0592MHz
{unsigned char i, j;i 9;j 244;do{while (--j);} while (--i);
}
void LCD1602_INIT(){
//1延时 15msDelay15ms();
//2写指令 38H(不检测忙信号)wirte_cmd(0x38);
//3延时 5msDelay5ms();
//4以后每次写指令读/写数据操作均需要检测忙信号
//5写指令 38H显示模式设置wirte_cmd(0x38);
//6写指令 08H显示关闭wirte_cmd(0x08);
//7写指令 01H显示清屏wirte_cmd(0x01);
//8写指令 06H显示光标移动设置wirte_cmd(0x06);
//9写指令 0CH显示开及光标设置wirte_cmd(0x0C);
}void main(){char position 0x800x05;char dataShow C;LCD1602_INIT();wirte_cmd(position);wirte_data(dataShow);
}5. 编程实现LCD1602显示一行238.84
代码17./LCD1602显示一行
void showLine(char line,char list,char* string){switch(line){case 1:wirte_cmd(0x80list);while(*string){wirte_data(*string);string;}break;case 2:wirte_cmd(0x800x40list);while(*string){wirte_data(*string);string;}break;}
}void main(){char position 0x800x05;//char dataShow C;LCD1602_INIT();showLine(1,5,NO.1);showLine(2,0,Jes is handsome);
}