C51 液晶显示1602模块

代码:

#include<reg52.h>
#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 所在的位置是液晶显示区域的第一行,第二个位置

  • 操作时序
    在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏洞百出

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值