实验目的:在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插件自动生成