8255LCD 动态显示4X4键盘文档格式.docx
- 文档编号:19222396
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:24
- 大小:49.23KB
8255LCD 动态显示4X4键盘文档格式.docx
《8255LCD 动态显示4X4键盘文档格式.docx》由会员分享,可在线阅读,更多相关《8255LCD 动态显示4X4键盘文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
四、实验仪器及实验环境
(1)586微型计算机系统
(2)proteus仿真软件
(3)MEDWIN软件
(4)单片机开发系统
五、设计思路
根据实验给出的要求,我们选择了LM016LLCD进行动态显示。
并通过按键切换不同的功能,来达到分别显示各种要求的动态效果。
实验要求进行检控式LCD动态显示。
定时器T0作为每0.01秒加一的定时器;
题目中的要求是用十种动态效果,由于本人对单片机研究肤浅加之有直接可以输入的p1端口。
故将监控调为八种功能,对应的分别为:
六、实验过程
本次课程设计是在理论课程的基础上,目的在于培养我们的动手能力,通过电路设计、理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,并可能结合实际的实验板进行下载测试。
在此次课题设计的过程中,我们人员分配为两人一组,并由指导老师分发课题。
我们的课题为“基于8255的LCD动态显示器设计”。
在考虑本次设计过程中,依据设计基本要求,并且基于8255通用可编程器件等条件,我们把8255器件用来扩展I/O口,以备外接一4X4键盘,以满足通过10个按键来控制10种动态显示,以及通过该I/O口外接一LCD显示器(当然,实验中我们发现不用8255扩展I/O口,单片机AT89C51的四个I/O端口已能满足该实验需要)。
为了能让各器件间联系起来我们又添加了一些逻辑器件,如:
与非门等以及74HC573地址锁存器等。
最终设计的电路图如图
(1):
图
(1)
图中主要器件如表(a):
器件名称
器件型号
单片机
AT89C51
可编程I/O接口芯片
8255
地址锁存器
74HC573
LCD显示器
LM016L
表(a)
其中主要部分器件使用说明如下:
I.4X4矩阵式键盘识别技术
a)键盘键号图
用AT89C51的并行口P1接4×
4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;
对应的按键的序号排列如图
(2)。
图
(2)
b)4×
4矩阵键盘识别处理
每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
每个按键的状态同样需变成数字量“0”和“1”,开关的一端(行线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么;
还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键。
c)键盘扫描程序框图
WAIT
P1=0FFH,P1.6=0
P1=0FFH,P1.4=0
有键按下吗?
没有没有
有有
延时10ms
真的有键按下吗?
根据当前状态识别按键
P1=0FFH,P1.5=0
P1=0FFH,P1.7=0
注:
在上图中调用相应按键识别子程序转入显示子程序
II.8255通用可编程器件
8255是一种通用的可编程并行I/O接口电路,在单片机应用系统中被广泛用作可编程外部I/O并行接口。
8255的结构及其引脚:
8255有3个8位的并行口PA、PB、PC。
8255的引脚如左图所示。
图中有关引脚含义如下:
①D0-D7:
双向三态数据总线;
②CS:
选片信号输入线,低电平有效;
③RESET:
复位信号输入线,高电平时有效,复位后,PA口、PB口、PC口均为输入方式;
④PA、PB、PC:
3个8位I/O口;
⑤RD:
读选通信号输入线,低电平时有效;
⑥WR:
写选通信号输入线,低电平时有效;
⑦A1,A0:
端口地址输入线,用于选择内部端口寄存器;
⑧VCC:
电源+5V;
GND:
地线。
下表列出了CPU对8255端口的寻址和操作状态:
A1
A0
RD
WR
CS
输入操作(读)
1
A口数据总线
B口数据总线
C口数据总线
输出操作(写)
数据总线A口
数据总线B口
数据总线C口
数据总线控制口
禁止操作
X
数据总线为高阻
非法操作
由总图可以看出,A、B、C口的端口地址取决于A15(P2.7),和低位A1、A0,本次设计采用数据总线到A口,因此则A的端口地址为(01************00)B,本次在设计中采取7FFCH。
七、部分实验效果图
1)静止
2)两边向中间压缩
3)整体向前、向后滚动
八、实验程序
C语言:
/*--------------------库文件--------------------------*/
#include<
reg52.h>
absacc.h>
/*---------------------宏定义-------------------------*/
#defineuintunsignedint
#defineucharunsignedchar
/*----------------芯片端口地址定义---------------------*/
#defineCOM8255XBYTE[0X7FFF]//8255的命令口
#definePA8255XBYTE[0X1FFF]//8255的PA
#definePB8255XBYTE[0X3FFF]//8255的PB
#definePC8255XBYTE[0X5FFF]//8255的PC
#defineDAC0832XBYTE[0XEFFF]//DAC0832口
#defineADC0804XBYTE[0XF7FF]//ADC0804口
/*----------------系统控制引脚定义--------------------*/
sbitRS=P3^0;
//1602的数据/命令控制口口
sbitRW=P3^1;
//1602的读写控制端
sbitEN=P3^2;
//1602的使能控制端
sbitCON=P3^3;
//74HC573的锁存端
/*--------------键盘引脚定义--------------------------*/
//键盘引脚定义
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
sbitkey7=P1^6;
/*--------------定义系统变量--------------------------------*/
bitflag=0;
//定义状态标志位
ucharvalue;
ucharstr[8];
ucharcodeInitialCode[]={0xfe,0xfd,0xfb,0xf7};
/*------------------------------------------*/
/*形式参数:
void*/
/*返回值:
void*/
/*函数描述:
延时函数*/
voiddelayms(ucharx)//ms延时函数
{
uchary;
for(;
x>
0;
x--)
for(y=150;
y>
y--);
}
/*---------------------------LCD1602驱动函数-------------------*/
LCD1602写命令函数*/
voidWriteCom(ucharCOM)
RS=0;
EN=0;
PA8255=COM;
delayms(5);
EN=1;
LCD1602写坐标函数*/
voidWritePos(ucharx,uchary)
if(x==1)
WriteCom(0x80+y-1);
if(x==2)
WriteCom(0x80+0x40+y-1);
LCD1602写数据函数*/
voidWriteData(ucharDATA)
RS=1;
PA8255=DATA;
扫描键盘函数*/
voidkeyscan()
uchari=0,j=0;
PB8255=0xf0;
if(PB8255!
=0xf0)
{
delayms
(1);
if(PB8255!
{
switch(PB8255)
{
case0xe0:
j=1;
break;
case0xd0:
j=2;
case0xb0:
j=3;
case0x70:
j=4;
}
PB8255=0x0f;
//反转
case0x0e:
i=0;
break;
case0x0d:
i=1;
case0x0b:
i=2;
case0x07:
i=3;
}
value=i*4+j-1,flag=1;
while(PB8255!
=0x0f);
//按键弹起
}
}
系统初始化函数*/
voidInitial()
CON=1;
//锁存器地址锁存
COM8255=0x80;
//输入输出方式设置定义8255的A口为输出BC为标准IO
RW=0;
//1602液晶读写端清零
WriteCom(0x38);
WriteCom(0x0c);
WriteCom(0x06);
WriteCom(0x01);
//清屏
数据格式转换函数*/
voidTrans_Data()
str[0]=0x31;
str[1]=0x32;
str[2]=0x33;
str[3]=0x34;
str[4]=0x35;
str[5]=0x36;
str[6]=0x37;
str[7]=0x38;
LCD1602状态1函数*/
voidState1()
uchari=0;
while(value==0)
keyscan();
Trans_Data();
WritePos(1,5);
for(i=0;
i<
8;
i++)
WriteData(str[i]);
}
LCD1602状态2函数*/
voidState2()
while(value==1)
WriteCom(0x0c);
delayms(1000);
WriteCom(0x08);
LCD1602状态3函数*/
voidState3()
bitflag=0;
WritePos(1,5);
for(i=0;
WriteData(str[i]);
while(value==2)
flag=~flag;
if(flag==0)
str[0]='
'
;
LCD1602状态4函数*/
voidState4()
while(value==3)
WriteCom(0x07);
WritePos(1,25);
delayms(100);
LCD1602状态5函数*/
voidState5()
uchari=0,j=1;
while(value==4)
WritePos(1,j++);
if(j==20)
j=1;
delayms(5);
WriteCom(0x01);
LCD1602状态6函数*/
voidState6()
while(value==5)
if(j==10)
j=1;
delayms(1000);
LCD1602状态7函数*/
voidState7()
uchari=0,j=14,k=0;
while(value==6)
WritePos(1,k++);
if(k==6)
k=0;
4;
WritePos(1,j--);
if(j==9)
j=14;
for(i=4;
LCD1602状态8函数*/
voidState8()
uchari=0,j=5,k=10;
WriteData(str[i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8255LCD 动态显示4X4键盘 8255 LCD 动态 显示 X4 键盘