51单片机练习:液晶篇-1602例1(C语言)

51单片机练习:液晶篇-1602例1(C语言)

题目

    用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!",在第二行显示“wwW.TXMCU.COM”。(来自郭天祥老师的51单片机练习)

代码

延时函数:

//延时函数
void delay1ms(uint z)
{
	uint x,y;
	for(x=z; x>0; x--)
	{
		for(y=110; y>0; y--){}
	}
}

写命令函数:

//写命令函数
void write_com(uchar com)
{
	lcdRS = 0; //选择写命令
	P0 = com; //传递命令
	delay1ms(5);
	lcdEN = 1; //开启使能
	delay1ms(5);
	lcdEN = 0; //关闭使能
	
}

写数据函数:

//写数据函数
void write_data(uchar mydata)
{
	lcdRS = 1; //选择写数据
	P0 = mydata; //传递数据
	delay1ms(5);
	lcdEN = 1; //开启使能
	delay1ms(5);
	lcdEN = 0; //关闭使能
}

初始化函数:

//初始化函数
void Init()
{
	DLE = 0; //关闭段选
	WLE = 0; //关闭位选
	lcdEN = 0; //关闭液晶的使能段
	//液晶初始化设置
	write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
	write_com(0x0c); //显示开/关及光标设置:开显示,不显示光标
	write_com(0x06); //显示光标设置:写一个字符后,地址指针加1
	write_com(0x01); //显示清屏:显示清0,数据指针清0
}

整个项目代码:

#include <reg52.h>

//【例7.2.1】用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!",在第二行显示“wwW.TXMCU.COM”。
//晶振频率:11.0529MHz

#define uchar unsigned char
#define uint unsigned int
	
uchar code Table1[] = "I LOVE MCU!"; //第一行显示的内容
uchar code Table2[] = "wwW.TXMCU.COM"; //第二行显示的内容
sbit lcdEN = P3^4; //液晶的使能端
sbit lcdRS = P3^5; //液晶的写数据/命令选择端
sbit DLE = P2^6; //U1锁存器的锁存段
sbit WLE = P2^7; //U2锁存器的锁存段
uchar num;
void delay1ms(uint z);
void write_com(uchar com);
void write_data(uchar mydata);
void Init();

void main()
{
	Init(); //进行初始化
	write_com(0x80); //数据指针设置:在第一行写入
	for(num=0; num<11; num++)
	{
		write_data(Table1[num]); //写入字符数据
		delay1ms(5);
	}
	write_com(0x80+0x40); //数据指针设置:在第二行写入
	for(num=0; num<13; num++)
	{
		write_data(Table2[num]); //写入字符数据
		delay1ms(5);
	}
	while(1);
}

//延时函数
void delay1ms(uint z)
{
	uint x,y;
	for(x=z; x>0; x--)
	{
		for(y=110; y>0; y--){}
	}
}

//写命令函数
void write_com(uchar com)
{
	lcdRS = 0; //选择写命令
	P0 = com; //传递命令
	delay1ms(5);
	lcdEN = 1; //开启使能
	delay1ms(5);
	lcdEN = 0; //关闭使能
	
}

//写数据函数
void write_data(uchar mydata)
{
	lcdRS = 1; //选择写数据
	P0 = mydata; //传递数据
	delay1ms(5);
	lcdEN = 1; //开启使能
	delay1ms(5);
	lcdEN = 0; //关闭使能
}

//初始化函数
void Init()
{
	DLE = 0; //关闭段选
	WLE = 0; //关闭位选
	lcdEN = 0; //关闭液晶的使能段
	//液晶初始化设置
	write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
	write_com(0x0c); //显示开/关及光标设置:开显示,不显示光标
	write_com(0x06); //显示光标设置:写一个字符后,地址指针加1
	write_com(0x01); //显示清屏:显示清0,数据指针清0
}

图片内容

实验结果如下:
实验结果图

液晶与单片机的连接情况图:
液晶与单片机的连接情况图

1602液晶写操作时序图:
1602液晶写操作时序图

心得/经验分享

  1. 在使用液晶进行数据显示的时候,要先写入一些命令,对液晶进行初始化,比如在显示、光标、数据地址等方面的初始化。
  2. 本实验中,只考虑到数据的写入,未实现数据的读取,所以液晶的5端口(读/写选择段)一直接低电平,保持写状态。
  3. 1602液晶RS段置0表示写命令,置1表示写数据。
  4. 因为本实验用的51单片机是在P0口将数据送入缓存区,而数码管的数据也是通过P0口传递的,为了避免引起对数码管的干扰,就将数码管的段选和位选的锁存器关闭就好。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值