L液晶显示实验实验报告及程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 LCD1602液晶显示实验
姓名专业学号成绩
一、实验目的
1.掌握Keil C51软件与proteus软件联合仿真调试的方法;
2.掌握LCD1602液晶模块显示西文的原理及使用方法;
3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法;
4.掌握用LCM1602液晶模块显示数字的C语言编程方法。
二、实验仪器与设备
1.微机一台 C51集成开发环境仿真软件
三、实验内容
1.用Proteus设计一LCD1602液晶显示接口电路。要求利用P0口接LCD1602液
晶的数据端,~做LCD1602液晶的控制信号输入端。~口扩展3个功能键K1~K3。
参考电路见后面。
2.编写程序,实现字符的静态和动态显示。显示字符为
第一行:“1.姓名全拼”,第二行:“2.专业全拼+学号”。
3.编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。显示字符
为:
“1.姓名全拼 2.专业全拼+学号 EXP8 DISPLAY ”
主程序静态显示“My information!”
四、实验原理
液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。
当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
1.LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接
3.芯片时序表:
4.1602LCD的一般初始化(复位)过程
(1) 延时15ms。
(2) 写指令38H(不检测忙信号)。
(3) 延时5ms。
(4) 写指令38H(不检测忙信号)。
(5) 延时5ms。
(6) 写指令38H(不检测忙信号)。
(7) 以后每次写指令、读/写数据操作均需要检测忙信号。
(8) 写指令38H:显示模式设置。
(9) 写指令08H:显示关闭。
(10) 写指令01H:显示清屏。
(11) 写指令06H:显示光标移动设置。
(12) 写指令0CH:显示开及光标设置。
五、实验步骤
1.用Proteus设计1602液晶显示接口电路;
2.在Keil C51中编写液晶显示控制程序,编译通过后,与Proteus联合调试;
3.按动功能键,观察字符及效果是否正确显示。
六、电路设计调试及程序
1)实验电路
2)程序设计与调试
静态显示
#include<>
#define uchar unsigned char
#define uint unsigned int uchar code table[]=" Xin "; uchar code table1[]=" 412381"; sbit lcden=P2^2;
sbit lcdrw=P2^1;
sbit lcdrs=P2^0;
uchar num;
void delay(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;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) {
lcdrs=1; P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
}
void main()
{
init();
delay(100);
while(1)
{
for(num=0;num<12;num++) {
write_data(table[num]); delay(200);
}
write_com(0x02);
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(200);
}
while(1);
}
}
动态显示
#include<>
#define uchar unsigned char
#define uint unsigned int uchar code table[]=" Xin "; uchar code table1[]=" 412381"; sbit lcden=P2^2;
sbit lcdrw=P2^1;
sbit lcdrs=P2^0;
uchar num;
void delay(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;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) {
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
} void init()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
}
void main()
{
init();
delay(100);
while(1)
{
for(num=0;num<12;num++)
{
write_data(table[num]);
delay(200);
}
write_com(0x02);
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(200);
}
write_com(0x01);
}
}
按键实现不同效果
#include<>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="My information!";
uchar code table1[]=" Xin"; uchar code table2[]=" 412381"; uchar code table3[]=" EXP8"; uchar code table4[]=" DISPLAY"; uchar num,i,j;
uchar flag1,flag2,flag3,flag4; sbit k1=P3^0;