C51 液晶显示1602模块
2022-01-25 来源:eefocus
代码:
#include #define uchar unsigned char #define uint unsigned int uchar num; uint i,j; sbit rs=P3^5; 定义液晶数据命令选择端 sbit wr=P3^6; 定义液晶读写选择端 sbit lcden=P3^4; 定义液晶使能选择端 sbit dula=P2^6; sbit wela=P2^7; uchar code table1[]='study every day'; uchar code table2[]='thanks for reading'; void delay(uint x) { for(i=x;i>0;i--) { for(j=120;j>0;j--); } } void write_com(uchar com) //写命令函数 { rs=0; 数据命令选择端,写命令时设为0 wr=0; 读写选择段,写数据设为0 lcden=0; P0=com; 将要写的命令传送到数据总线上 lcden=1; 使能端电平变换,形成一个高脉冲将命令写入到液晶控制器 delay(5); lcden=0; 再把使能端置0 } void write_data(uchar dat) //写数据函数 { rs=1; wr=0; lcden=0; P0=dat; lcden=1; delay(5); lcden=0; } void init() //1602液晶初始化设置函数 { write_com(0x38); 显示模式,设置成16x2显示,5x7点阵,8位数据口 write_com(0x08); 关闭显示 write_com(0x01); 显示清屏:数据指针清零,所有显示清零 write_com(0x06); 显示光标移动设置:写一个字符之后地址指针加一,光标也加一 write_com(0x0f); 显示开及光标设置:开显示,显示光标,把光标设置位闪烁 } void main() { P0=0; 关闭数码管 dula=0; wela=0; init(); for(num=0;num<9 ;num++) { write_data(table1[num]); delay(300); } write_com(0x80+0x40); for(num=0;num<16 ;num++) { write_data(table2[num]); delay(300); } while(1); } 1602模块参数表 引脚功能: 1、VL 脚:改变VL脚的电压可以调节液晶显示的对比度,通过调整可调电阻(10k)的分压值改变VL的电压 2、RS脚:为高电平时,写入的是显示数据;为低电平时,写入的是命令 3、R/W脚:为高电平可以读取液晶数据;低电平时可以往液晶里写数据 4、E脚:让液晶工作的信号,类似与AD和DA芯片的片选信号 5、D0~D7脚:八位并行数据端口 RAM地址映射图: 1、00 ~ 0F地址对应液晶显示区域的第一行16位;40 ~ 4F 对应第二行16位 10 ~ 27 和50 ~67 是不会显示出来的,需要用到移屏命令 例如输入 0x18 命令后整屏左移一位;输入 0x1c 右移一位 状态字: 1、 STA=1时,禁止进行读写操作,因为1602模块操作速度有限,在模块还没忙完的时候 对它进行读写操作会导致数据丢失(51芯片工作速度比1602慢,ARM较快) 因此每次对模块操作都要去读模块是否忙完了 初始化设置: 1、 其中 5x7 是指用35个点阵组成的区域显示一个字符 5x7点阵 2、显示开/关及光标设置 3、 数据指针设置: 要在1602上显示字符,首先要设置数据地址指针RAM进行访问,他的指令码是 80H+地址码 ,而不能直接写地址码表示 例如 80H+01 所在的位置是液晶显示区域的第一行,第二个位置 操作时序
上一篇:C51驱动步进电机
下一篇:C51 数模转换(AD)