创作编号:
GB8878185555334563BT9125XW 创作者: 凤呜大王*
实验三 LCD1602液晶显示实验
姓名 专业 学号 成绩
一、
实验目的
1. 掌握Keil C51软件与proteus软件联合仿真调试的方法; 2. 掌握LCD1602液晶模块显示西文的原理及使用方法; 3. 掌握用8位数据模式驱动LCM1602液晶的C语言编程方法; 4. 掌握用LCM1602液晶模块显示数字的C语言编程方法。 二、
实验仪器与设备
1.微机一台 2.keil C51集成开发环境 3.Proteus仿真软件 三、
实验内容
1. 用Proteus设计一LCD1602液晶显示接口电路。要求利用P0口接LCD1602液晶的数据端,P2.0~P2.2做LCD1602液晶的控制信号输入端。P3.0~P3.3口扩展3个功能键K1~K3。参考电路见后面。 2. 编写程序,实现字符的静态和动态显示。显示字符为 第一行:“1.姓名全拼”,第二行:“2.专业全拼+学号”。 3. 编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。显示字符为: “1.姓名全拼 2.专业全拼+学号 3.MCS-51 EXP8 4.LCD DISPLAY ”
1
主程序静态显示“My information!”
四、
实验原理
液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
1. LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明如表:
编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极 2. 1602液晶模块内部的控制器共有11条控制指令,如表所示:
2
3. 芯片时序表:
4.1602LCD的一般初始化(复位)过程 (1) 延时15ms。
(2) 写指令38H(不检测忙信号)。 (3) 延时5ms。
(4) 写指令38H(不检测忙信号)。 (5) 延时5ms。
(6) 写指令38H(不检测忙信号)。
(7) 以后每次写指令、读/写数据操作均需要检测忙信号。 (8) 写指令38H:显示模式设置。 (9) 写指令08H:显示关闭。
3
(10) 写指令01H:显示清屏。
(11) 写指令06H:显示光标移动设置。 (12) 写指令0CH:显示开及光标设置。
五、实验步骤
1. 用Proteus设计1602液晶显示接口电路;
2. 在Keil C51中编写液晶显示控制程序,编译通过后,与Proteus
联合调试; 3. 按动功能键,观察字符及效果是否正确显示。 六、电路设计调试及程序
1) 实验电路
LCD1LM016LVSSVDDVEERSRWE456RSRWE123RV110kC1122p7891011121314D0D1D2D3D4D5D6D7RP1X112MU119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617RSRWEC222p18R210kXTAL223456789RESPACK-8C310u9RST293031PSENALEEA垂直滚动水平滚动暂停/继续返回12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52 4
2) 程序设计与调试 静态显示
#include
#define uchar unsigned char #define uint unsigned int uchar code table[]=\\
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;
5
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;