ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:49.23KB ,
资源ID:6217180      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6217180.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(8255LCD 动态显示4X4键盘.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8255LCD 动态显示4X4键盘.docx

1、8255LCD 动态显示4X4键盘 南京邮电大学通达学院课程设计实验报告 实验名称 基于8255的显示的动态显示器设计班 级 080061 学 号 08006129 姓 名 _ 卓晓寒 _ _ _ 指导老师 _ 林建中 _ _ 开课时间 2011/2012学年, 第 一 学期 _ 基于的动态显示器设计 一、 设计要求 能够学会利用Proteus软件的MCS51单片机仿真学习,根据提供的参考工程,在Proteus平台自己重新设计实验电路所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习Proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并

2、能查出其错误等。二、 实验内容 设计一基于的动态显示器三、 实验要求1 用数码管或LCD正常显示数字“12345678”。2 通过按键可改变显示方式。3 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。 另注,实验发挥部分:1 设计所有动作的联合效果。2 设计二个变速按键,可多级改变滚动速度。3 设计一台魔术电子种,采用自动变换,随机组合,数据每10秒变换一次。 动态显示格式:1 静止2 整体闪烁3 单字闪烁4 整体向前、向后滚动5 单字移动6 两边向中间压缩7 中间向两边扩张8 上下压缩9 文字上下滚动10 组合动作(每一字符执行上述一个动作,并同时运动)四、 实验仪器及实验环境(

3、1)586微型计算机系统(2)proteus仿真软件(3)MEDWIN软件(4)单片机开发系统 五、 设计思路 根据实验给出的要求,我们选择了LM016LLCD进行动态显示。并通过按键切换不同的功能,来达到分别显示各种要求的动态效果。 实验要求进行检控式LCD动态显示。定时器T0作为每0.01秒加一的定时器;题目中的要求是用十种动态效果,由于本人对单片机研究肤浅加之有直接可以输入的p1端口。故将监控调为八种功能,对应的分别为:1 静止2 整体闪烁3 单字闪烁4 整体向前、向后滚动5 单字移动6 两边向中间压缩7 中间向两边扩张8 上下压缩9 文字上下滚动10 组合动作(每一字符执行上述一个动作

4、,并同时运动)六、 实验过程 本次课程设计是在理论课程的基础上,目的在于培养我们的动手能力,通过电路设计、理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,并可能结合实际的实验板进行下载测试。在此次课题设计的过程中,我们人员分配为两人一组,并由指导老师分发课题。我们的课题为“基于8255的LCD动态显示器设计”。在考虑本次设计过程中,依据设计基本要求,并且基于8255通用可编程器件等条件,我们把8255器件用来扩展I/O口,以备外接一4X4键盘,以满足通过10个按键来控制10种动态显示,以及通过该I/O口外接一LCD显示器(当然,实验中我们发现不用

5、8255扩展I/O口,单片机AT89C51的四个I/O端口已能满足该实验需要)。为了能让各器件间联系起来我们又添加了一些逻辑器件,如:与非门等以及74HC573地址锁存器等。 最终设计的电路图如图(1):图(1) 图中主要器件如表(a):器件名称器件型号单片机AT89C51可编程I/O接口芯片8255地址锁存器74HC573LCD显示器LM016L表(a) 其中主要部分器件使用说明如下:I .4X4矩阵式键盘识别技术a) 键盘键号图 用AT89C51的并行口P1接44矩阵键盘,以P1.0P1.3作输入线,以P1.4P1.7作输出线;对应的按键的序号排列如图(2)。图(2)b) 44矩阵键盘识别

6、处理每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(行线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键。c) 键盘扫描程序框图 WAITP1=0FFH,P1.6=0P1=0FFH,P1.4=0有键按下吗?有键按下吗? 没有 没有 有 有延

7、时10ms延时10ms真的有键按下吗?真的有键按下吗? 没有 没有 有 有根据当前状态识别按键根据当前状态识别按键P1=0FFH,P1.5=0P1=0FFH,P1.7=0有键按下吗?有键按下吗? 没有 没有 有 有延时10ms延时10ms真的有键按下吗?真的有键按下吗? 没有 没有 有 有根据当前状态识别按键根据当前状态识别按键 WAIT根据当前状态识别按键 注:在上图中 调用相应按键识别子程序 转入显示子程序II . 8255通用可编程器件 8255是一种通用的可编程并行I/O接口电路,在单片机应用系统中被广泛用作可编程外部I/O并行接口。 8255的结构及其引脚:8255有3个8位的并行口

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端口的寻址和操作状态:A1A0RDWRCS输入操作(读)00010A口 数据总线01010 B口 数据总线10010 C口 数据总线输出操作(

9、写)00100 数据总线 A口01100 数据总线 B口10100 数据总线 C口11100数据总线 控制口禁止操作XXXX1数据总线为高阻11010非法操作XX110数据总线为高阻由总图可以看出,A、B、C口的端口地址取决于A15(P2.7),和低位A1、A0,本次设计采用数据总线到A口,因此则A的端口地址为(01* * * *00)B,本次在设计中采取7FFCH。七、 部分实验效果图1) 静止 2) 两边向中间压缩3) 整体向前、向后滚动 八、 实验程序 C语言:/*-库文件-*/#include#include/*-宏定义-*/#define uint unsigned int#defi

10、ne uchar unsigned char/*-芯片端口地址定义-*/#define COM8255 XBYTE0X7FFF /8255的命令口#define PA8255 XBYTE0X1FFF /8255的PA#define PB8255 XBYTE0X3FFF /8255的PB#define PC8255 XBYTE0X5FFF /8255的PC#define DAC0832 XBYTE0XEFFF /DAC0832口#define ADC0804 XBYTE0XF7FF /ADC0804口 /*-系统控制引脚定义-*/sbit RS=P30; /1602的数据/命令控制口口sbit

11、RW=P31; /1602的读写控制端sbit EN=P32; /1602的使能控制端sbit CON=P33; /74HC573的锁存端/*-键盘引脚定义-*/键盘引脚定义sbit key1=P10;sbit key2=P11;sbit key3=P12;sbit key4=P13;sbit key5=P14;sbit key6=P15;sbit key7=P16;/*-定义系统变量-*/bit flag=0; /定义状态标志位uchar value;uchar str8;uchar code InitialCode=0xfe,0xfd,0xfb,0xf7;/*-*/*形式参数:void *

12、/*返回值:void */*函数描述:延时函数 */*-*/void delayms(uchar x) /ms延时函数 uchar y; for(;x0;x-) for(y=150;y0;y-) ; /*-LCD1602驱动函数-*/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602写命令函数 */*-*/void WriteCom(uchar COM) RS=0; EN=0; PA8255=COM; delayms(5); EN=1; delayms(5); EN=0; /*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602写

13、坐标函数 */*-*/void WritePos(uchar x,uchar y) if(x=1) WriteCom(0x80+y-1); if(x=2) WriteCom(0x80+0x40+y-1); /*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602写数据函数 */*-*/void WriteData(uchar DATA) RS=1; EN=0; PA8255=DATA; delayms(5); EN=1; delayms(5); EN=0; /*-*/*形式参数:void */*返回值:void */*函数描述:扫描键盘函数 */*-*/void

14、keyscan() uchar i=0,j=0; PB8255=0xf0; if(PB8255!=0xf0) delayms(1); if(PB8255!=0xf0) switch(PB8255) case 0xe0:j=1; break; case 0xd0:j=2; break; case 0xb0:j=3; break; case 0x70:j=4; break; PB8255=0x0f; /反转 switch(PB8255) case 0x0e:i=0;break; case 0x0d:i=1;break; case 0x0b:i=2;break; case 0x07:i=3;brea

15、k; value=i*4+j-1,flag=1; while(PB8255!=0x0f); /按键弹起 /*-*/*形式参数:void */*返回值:void */*函数描述:系统初始化函数 */*-*/void Initial() CON=1; /锁存器地址锁存 COM8255=0x80; /输入输出方式设置 定义8255的A口为输出 BC 为标准IO RW=0; /1602液晶读写端清零 WriteCom(0x38); WriteCom(0x0c); WriteCom(0x06); WriteCom(0x01); /清屏/*-*/*形式参数:void */*返回值:void */*函数描述

16、:数据格式转换函数 */*-*/void Trans_Data() str0=0x31; str1=0x32; str2=0x33; str3=0x34; str4=0x35; str5=0x36; str6=0x37; str7=0x38;/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602状态1函数 */*-*/void State1() uchar i=0; WriteCom(0x06); while(value=0) keyscan(); Trans_Data(); WritePos(1,5); for(i=0;i8;i+) WriteData(str

17、i); WriteCom(0x01);/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602状态2函数 */*-*/void State2() uchar i=0; WriteCom(0x01); while(value=1) keyscan(); Trans_Data(); WritePos(1,5); WriteCom(0x0c); for(i=0;i8;i+) WriteData(stri); delayms(1000); WriteCom(0x08); delayms(1000); WriteCom(0x0c); WriteCom(0x01);/*-*/

18、*形式参数:void */*返回值:void */*函数描述:LCD1602状态3函数 */*-*/void State3() uchar i=0; bit flag=0; WritePos(1,5); for(i=0;i8;i+) WriteData(stri); while(value=2) keyscan(); Trans_Data(); flag=flag; if(flag=0) str0= ; WritePos(1,5); for(i=0;i8;i+) WriteData(stri); delayms(1000); WriteCom(0x01);/*-*/*形式参数:void */*

19、返回值:void */*函数描述:LCD1602状态4函数 */*-*/void State4() uchar i=0; WritePos(1,5); for(i=0;i8;i+) WriteData(stri); while(value=3) WriteCom(0x07); keyscan(); Trans_Data(); WritePos(1,25); for(i=0;i8;i+) WriteData(stri); delayms(100); WriteCom(0x01);/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602状态5函数 */*-*/void

20、 State5() uchar i=0,j=1; WritePos(1,5); while(value=4) keyscan(); Trans_Data(); WritePos(1,j+); if(j=20) j=1; for(i=0;i8;i+) WriteData(stri); delayms(5); WriteCom(0x01); WriteCom(0x01);/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602状态6函数 */*-*/void State6() uchar i=0,j=1; WriteCom(0x06); WritePos(1,5);

21、while(value=5) keyscan(); Trans_Data(); WritePos(1,j+); if(j=10) j=1; for(i=0;i8;i+) WriteData(stri); delayms(1000); WriteCom(0x01); WriteCom(0x01);/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602状态7函数 */*-*/void State7() uchar i=0,j=14,k=0; WritePos(1,5); for(i=0;i8;i+) WriteData(stri); while(value=6) k

22、eyscan(); Trans_Data(); WritePos(1,k+); if(k=6) k=0; for(i=0;i4;i+) WriteData(stri); WritePos(1,j-); if(j=9) j=14; for(i=4;i8;i+) WriteData(stri); delayms(1000); WriteCom(0x01); WriteCom(0x01);/*-*/*形式参数:void */*返回值:void */*函数描述:LCD1602状态8函数 */*-*/void State8() uchar i=0,j=5,k=10; WritePos(1,5); for(i=0;i8;i+) WriteData(stri

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1