题目
用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液晶写操作时序图:
心得/经验分享
- 在使用液晶进行数据显示的时候,要先写入一些命令,对液晶进行初始化,比如在显示、光标、数据地址等方面的初始化。
- 本实验中,只考虑到数据的写入,未实现数据的读取,所以液晶的5端口(读/写选择段)一直接低电平,保持写状态。
- 1602液晶RS段置0表示写命令,置1表示写数据。
- 因为本实验用的51单片机是在P0口将数据送入缓存区,而数码管的数据也是通过P0口传递的,为了避免引起对数码管的干扰,就将数码管的段选和位选的锁存器关闭就好。