实验六单片机与液晶实验吴汉富
- 格式:docx
- 大小:193.09 KB
- 文档页数:7
桂林电子科技大学
实验报告
2019-2020学年第1学期
学院电子信息工程学院
课程单片机原理与接口技术
姓名吴汉富
学号 ************ 指导老师郑秋贞
日期 2019年11月16日
实验六单片机与液晶实验
一、实验目的
1、掌握液晶LCD1602和单片机通信的原理。
2、掌握液晶LCD1602和单片机通信程序的设计方法及其过程。
3、掌握液晶和LCD1602和单片机通信的电路应用。
二、实验任务
设计一个两位秒表,显示于LCD1602,计时结束后,LED灯亮。
三、实验原理
本实验需要用到液晶屏的工作原理和定时器的工作原理,定时器的工作原理在实验4中已经有详细的介绍,在这里将不再介绍。
液晶屏LCD1602一共有16个引脚,各个引脚的功能为:
第1脚:V SS,电源地。
第2脚:V DD,+5V电源。
第3脚:V EE,液晶显示对比度调整输入端
第4脚:RS,数据/命令选择端
第5脚:R/W,读/写选择端,
第6脚:E,使能端,读操作上升沿有效,写操作下降沿有效
第7~14脚:D0~D7,为8位双向数据线
第15脚:BLA,背光源正极。
第16脚:BLK,背光源负极。
LCD1602 在读写数据时需要通过一定的时序来完成。
1602时序解析
LCD1602初始化过程:
(1)清屏。
清除屏幕,将显示缓冲区DDRAM的内容全部写入空格(ASCII20H)。
(2) 功能设置。
设置数据位数,设置显示行数。
设置字形大小.
(3) 开/关显示设置。
控制光标显示、字符是否闪烁等。
(4)输入方式设置。
设定光标的移动方向以及后面的内容是否移动。
LCD1602和单片机电路连接图如图6-1所示:
图6-1 液晶屏和LCD1602电路连接图
图6-2 秒表开始倒计时
图6-3 秒表倒计时结束LED灯亮
五、实验结果及分析总结
在最后的一次实验我掌握液晶LCD1602和单片机通信的原理;LCD1602和单片机通信程序的设计方法及其过程;掌握液晶和LCD1602和单片机通信的电路应用。
并再次熟悉了秒表的程序编写。
顺利完成了两位倒计时秒表
LCD1062显示实验。
本次实验让我意识到在错误的道路上日夜兼程,最终也无法成功。
以前我在编程中遇到问题解决不了总是想找同学和老师帮忙,经过这次实验我认识的这样永远也学不会单片机的。
经过这次实验我深刻的认识的学习单片机是为了以后工作打好基础,学好技术,不为了应付考试。
所以想要学会单片机必须先学好C语言,成功没有捷径,如果非要说有那就是拼了命去学,脚踏实地认真学习几个月C语言后相信我一定能学会单片机的。
这次实验虽然是本次课的最后一次实验,但我在今后还是会继续学习C语言和单片机。
因为我的基础太差了对于今后的工作要求,我的技术还远远达不到,为了明年能找到一份好的工作我需要更加努力的学习。
#include<reg51.h>
#define uchar unsigned char
#define DATAPORT P2
sbit RS=P3^5;
sbit RW=P3^6;
sbit E=P3^7;
void init(void); //初始化函数声明
void writeCOM(uchar i); //写命令函数声明
void writeData(uchar j); //写数据函数声明
void fbusy(void); //检查忙函数声明
uchar shi=6,ge=0;
uchar kk=0;
//主函数
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
init(); //初始化函数
while(1)
{
writeCOM(0x80); //写入显示缓冲区起始地址为第1行第1列
writeData(shi+48);
writeData(ge+48);
if(shi==0&&ge==0) //计时结束
{
P1=0X7F;
TR0=0;
}
}
}
//初始化函数
void init()
{
writeCOM(0x01); //清屏
writeCOM(0x38); //读8位数据,显示两行,使用5*7的字型writeCOM(0x0c); //显示器开,光标关,字符不闪烁
writeCOM(0x06); //字符不动,光标自动右移一位
}
//检查忙函数
void fbusy()
{
DATAPORT=0xff; //读之前向端口写1,确保读数正确
RS=0;RW=1;
E=0;E=1; //正脉冲读
while(DATAPORT&0x80) //忙,等待bxxx xxxx &1000 0000 =b00000
{E=0;E=1;}
}
//写命令函数
void writeCOM(uchar i)
{
fbusy();
RS=0;RW=0;
E=1;
DATAPORT=i;
E=0; //负脉冲写
}
//写数据函数
void writeData(uchar j)
{
fbusy();
RS=1;RW=0;
E=1;
DATAPORT=j;
E=0; //负脉冲写
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
kk++;
if(kk==20) //50ms*20=1s
{
kk=0;
if(ge>0)
{
ge--;
}
else
{
ge=9;
shi--;
}
}
}。