实验九LCM1602液晶显示实验
一、实验目的
1、掌握keil C51软件与Protues软件联合仿真调试的方法;
2、掌握LCM1602液晶模块显示西文的原理及使用方法;
3、掌握8位数据模式驱动LCM1602液晶的C语言编程方法。
4、掌握用LCM1602液晶模块显示数字的C语言编程方法。
二、实验内容
1、用Protues设计一LCM1602液晶显示接口电路。要求利用P0口接LCM1602液晶的数据段,P2.0~P2.2做LCM1602液晶的控制信号输入端。P3.0~P3.3口扩展三个功能键K1~K3。
2、编写程序,实现字符的静态和动态显示。字符为“姓名全拼+学号”。液晶的初始化、字符显示程序可参考STC官网上的程序文件。
3、编写程序,利用功能键实现字符的纵向滚动和横向滚动等效果显示。
三、实验原理及步骤
1、用Protues设计1602液晶显示接口电路;
2、在Keil C51中编写液晶显示控制程序,编译通过后,与Protues联合调试;
3、按动功能按键,观察字符及效果是否正确显示。
四、实验仪器与设备
1.微机1台? 2. keilC51集成开发环境?? 3.Proteus仿真软件
五、电路设计及调试
(1)实验电路
(2)程序设计与调试
#include<reg52.h>
#include<string.h>
#include"lcd.h"
#define uint unsigned int
#define uchar unsigned char
uchar num,TEMP;
bit flag=1;
uchar keynum;
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
void delay(uint x)
{
?? ????? uchar i;
????? while(x--) for(i=0;i<120;i++);
}
uchar keypress()
{
?if(P3!=0XFF)????
? {
?? delay(5);
?? num=0;
?? if(P3!=0XFF)
??? {
????? ?TEMP=P3;
????? ?switch(TEMP)
????? ? {
????? ?? case 0xfe:num=1;break;
????? ?? case 0xfd:num=2;break;
????? ? }
????? ?while(TEMP==0XFF);
????? }
?? return num;
? }
}
void main()
{
??? uchar i;
??? P0=P3=0XFF;
????? IT0=1;
????? EX0=1;EA=1;
单片机LCM1602液晶显示实验_lcd1602显示原理
?? ????? Initialize_LCD();
????? display_string(0,0,"?? gaoqinag????");
????? display_string(0,1,"201012301043????? ");
????? while(flag)??????????????????????????? ?
????? {
????? ?keypress();
????? ?if(num==1)
????? ? {
?????????? for(i=0;i<16;i++)
?????????? ?{
?????????? ?? Write_LCD_Command(0x1c);
????? ????? ??display_string(16-i,0," gaoqiang");
?????????? ?? display_string(16-i,1,"201012301043");
?????????? ?? display_string(16+i,0,"? gaoqinag");
?????????? ?? display_string(16+i,1,"201012301043");
?????????? ?? display_string(0x0f,0,"? gaoqinag");
?????????? ?? display_string(0x0f,1,"201012301043");
?????????? ?? delay(20);
?????????? ?}
?????????? display_string(0x0f,0,"? gaoqinag");
????? ??? display_string(0x0f,1,"201012301043");
?????????? delay(20);
?????????? if(num==2){Write_LCD_Command(0x01);break;}
????? ? }
???? if(num==2)
????? ? {
?????????? ? display_string(0,0,"gaoqinag");
?????????? ? delay(100);
?????????? ? display_string(0,1,"201012301043");
?????????? ? delay(100);
?????????? ? display_string(0,1,"gaoqinag");
?????????? ? delay(100);
?????????? ? display_string(0,0,"201012301043");
?????????? ? delay(100);
?????????? ? if(num==1) {Write_LCD_Command(0x01);break;}
????? ? }
????? }
}
void exter0()interrupt 0
{
?flag=~flag;
}
(3)实验中遇到的问题:
1.编写的实验程序不能正确显示学号,输入学号时不能加入空格,不然液晶显示屏幕显示不开!
六、实验总结
1.掌握了proteus基本的操作方法.
2.做实验时要仔细,要按步骤来,,避免人为错误。
3.做实验要独立完成,学会了液晶显示屏幕的控制程序.
七、对实验课的建议
做实验应多给学生时间自主练习,让同学们对于实验有更深刻的理解,从实践中找出问题,解决问题.