实验目的:在1602液晶显示"I love you,china"两行字,从右边一步步向左滑进去.
Lcd1602液晶的控制学起来还是蛮简单的,主要是参考时序图去学习,在了解了LCD显示的原理之后,紧接着看着时序图就可以对液晶进行操作了.
首先我们对1602液晶做个大概的了解:1602意思是每行显示16个字符,一共可以显示两行,每个字符是由5*7的点阵,8位数据接口.类似的还有0801,0802,1601等一系列液晶,这些液晶是字符类液晶,只能显示ASC码.还有12232液晶,它属于图形类液晶,可以显示图形,汉字.
1602液晶接口有如下:
1602的几种时序如下:
本次实验,我们要向液晶里面写入 "I Love You! China."所以,我们看下写时序,一个会了,其他的也就跟着学会了,写时序大概就以下的步骤:
- 通过RS确定是写数据还是写命令;
- 读/写控制端设置为低电平;
- 将数据或命令送达数据线上;
- 给en一个高脉冲,将数据送入液晶显示器,完成写操作.
时序图如下:
具体代码如下所示:
/*引入头文件,宏定义*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs = P3 ^ 5;//控制发数据还是发命令的控制位
sbit lcden = P3 ^ 4;//使能信号
sbit lcdwr = P3 ^ 6;//读写信号
sbit dula = P2 ^ 6;//段选
sbit wela = P2 ^ 7;//位选
uchar num = 0;
uchar code title[] = "I Love You!";//第一行显示数据
uchar code content[] = "China.";//第二行数据
/*
函数声明
*/
void init();
void delay(uint time);
void write_cmd(uchar cmd);
void write_data(uchar content);
void main()
{
init();
//第一行数据写入,采用sizeof函数
for (num = 0; num < sizeof(title) / sizeof(uchar) - 1; num++) {
write_data(title[num]);
delay(20);
}
write_cmd(0x80+0x53);//切换到第二行
//第二行数据写入
for (num = 0; num < sizeof(content) / sizeof(uchar) - 1; num++) {
write_data(content[num]);
delay(20);
}
//整屏移动数据,左移
for (num = 0; num < 16; num++) {
write_cmd(0x18);
delay(200);
}
while (1);
}
void init()
{
dula = 0;//关闭数码管段选锁存器
wela = 0;//关闭数码管位选锁存器
lcdwr = 0;//读写始终保持低电平
write_cmd(0x38);//设置显示模式:16*2显示,5*7点阵,3位数据接口
write_cmd(0x0c);//开显示,不显示光标,也不闪烁
write_cmd(0x06);//当写一个字符的时候,指针会移动到下一个
write_cmd(0x01);//数据指针清零,所有的数据清零
write_cmd(0x80+0x10);//设置第一行起始指针地址
}
//延时函数
void delay(uint time)
{
uint x, y;
for (x = time; x > 0; x--)
for (y = 110; y > 0; y--);
}
//写命令函数
void write_cmd(uchar cmd)
{
lcdrs = 0;
P0 = cmd;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
//写数据函数
void write_data(uchar content)
{
lcdrs = 1;
P0 = content;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
以上代码在TX-1C板子上正常运行,有误请拍砖.
文章的脚注信息由WordPress的wp-posturl插件自动生成



微信扫一扫,打赏作者吧~![[整理]三极管驱动继电器](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2014/02/11.jpg&w=280&h=210&zc=1)


