




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号:08808039接口技术课程设计报告题 目: 键盘显示器接口设计学院(系): 机械与电子工程学院专业年级: 电信082学生姓名: yyy指导教师: 333完成日期: 2011年7月8日成 绩:XVIII目 录一、 设计目的与要求:- 1 -二、 硬件电路设计- 1 -2.1单片机P0口扩展- 1 -2.1.1 P0口连接74ls373- 1 -2.1.2 8255的连接- 2 -2.2键盘、显示部分- 3 -2.2.1矩阵扫描按键- 3 -2.2.2LED显示- 4 -三、 软件流程及程序设计- 5 -3.1主程序- 6 -3.2键盘扫描部分程序- 7 -3.3数码管显示程序- 8 -3.4头文件- 9 -3.4.1头文件head.h- 9 -3.4.1头文件def.h- 10 -四、系统调试及仿真- 10 -4.1 8255的调试- 10 -4.2 数码管的调试- 11 -五、总结- 11 -附录 扩展设计仿真电路- 11 -附录 扩展设计部分代码- 12 -键盘显示器接口设计一、 设计目的与要求:设计目的:在单片机的实际应用中常存在I/O口不足的现象,在简单的I/O口扩展中,扩展输入口时需要缓冲器,扩展输出口时需要锁存器,而且一个缓冲或锁存器智能扩展8位,当扩展位数比较多时,就需要用多个芯片。这种扩展方法存在芯片功能单一和多芯片的使用的缺点;在实际应用中对复杂的I/O口常采用可编程并行接口芯片8255进行设计。设计要求:利用8255进行键盘显示器的扩展,扩展4*4的16键键盘;扩展4位LED显示器,利用动态扫描显示输出。读入键盘值在显示器上显示输出。二、 硬件电路设计硬件设计分为两部分:单片机P0口接8255扩展;8255接按键和显示。所用主要器件由:AT80C52单片机、74LS373、8255A、4位8段数码管、4*4矩阵按键。工作流程简介:通过单片机对8255进行控制先对矩阵按键进行扫描,再根据键值进行判断,通过单片机对8255控制进行显示。2.1单片机P0口扩展2.1.1 P0口连接74ls373P0口引脚接上拉电阻以提高驱动能力,后接74ls373八D锁存器,用以实现地址和数据口的复用。74ls373的D0D7与P0口相连,OE端接地,LE端接单片机的ALE。输出口Q0与Q1分别接8255的A0和A1。其电路连接如图1所示。图1 P0口接74ls373连接图74ls373为三态输出的八 D 透明锁存器,共有 54/74S373 和 54/74LS373 两种线路结构型式。373 的输出端 Q0Q7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,Q0Q7 为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0Q7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,Q 随数据 D 而变。当 LE 为低电平时,Q 被锁存在 已建立的数据电平。 当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。引出端符号: D0D7 数据输入端;OE 三态允许控制端(低电平有效); LE 锁存允许端 ;Q0Q7 输出端;本次课程设计采用373可很好地实现地址和数据端口的复用。2.1.2 8255的连接连接8255由于扩展I/O口,8255的D0D7连接单片机的P0口,WR和RD分别与单片机的P3.6和P3.7口相连,A0、A1连接74ls373,复位管脚与单片机的复位管脚相连,CS连接P2.7口,PA 口控制数码管显示的位选,PB口控制数码管的段选,PC口用于接按键,其电路设计如图2所示。图2 8255的连接8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。其具有24个可编程设置的I/O口,即3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4PC7),B组包括B口及C口(低4位,PC0PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定。8255引脚功能如下:RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式;CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输;RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据;WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入825;D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送;PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器;PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器;PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口; A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器;当A1=0,A0=0时,PA口被选择;当A1=0,A0=1时,PB口被选择;当A1=1,A0=0时,PC口被选择;当A1=1.A0=1时,控制寄存器被选择。2.2键盘、显示部分键盘和显示部分由8255的进行控制,由C口读出键盘的键值,A口和B口进行数码管显示控制。2.2.1矩阵扫描按键按键为4*4矩阵扫描按键,接8255的C口,C口可实现高四位和低四位分别输入输出控制,便于使用软件实现对按键进行判断。其仿真电路图如图3所示。图3 矩阵扫描按键图中A、B、C、D接8255PC端口的低四位,1、2、3、4接8255PC端口的高四位键定义为0F。在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如PC口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式键盘的按键识别方法有两种:行扫描法和高低电平翻转法,本次课程设计采用的是高低电平翻转法,通过对8255的PC的高四位和低四位的控制进行判断用以确定按键位置。2.2.2LED显示LED显示部分是由4位8段数码管构成,与8255相连,位选连接8255的PA口,用于控制每一位数码管的显示与否;段选连接8255的PB口,用于控制数码管显示的数据。其电路如图4所示。图4 数码管显示 硬件部分各个模块构成的全部电路如图5所示。图5 总仿真电路 三、 软件流程及程序设计软件设计采用模块化设计思想,主程序分为键盘扫描子程序和显示子程序,其设计流程如图6所示。图6 软件流程图 程序开始后先初始化8255,给8255写控制字80H;随后进入主循环不断地对按键进行判断,当有按键按下时进行显示,当第下一个键按下时实现左移显示。3.1主程序主程序如下,#include reg52.h#include head.h #include def.huchar def4; /全局变量/*主函数*/void main()caddr = 0x80; /写控制字:a输入,b输出,c输出while(1) key_scan(); /扫描按键disp();/键值显示其中head.h和 def.h为程序编辑时规范设置的,方便函数和变量的调用。def4为全局变量用来实现循环数码管的左移显示。3.2键盘扫描部分程序#include reg52.h#include def.h#include head.huchar key,temp,keycode;uint i;/*键值判断*/void change()switch(keycode)case 0X11: key=0;break; case 0X12: key=1;break; case 0X14: key=2;break; case 0X18: key=3;break; case 0X21: key=4;break; case 0X22: key=5;break; case 0X24: key=6;break; case 0X28: key=7;break; case 0X41: key=8;break; case 0X42: key=9;break; case 0X44: key=10;break; case 0X48: key=11;break; case 0X81: key=12;break; case 0X82: key=13;break; case 0X84: key=14;break; case 0X88: key=15;break; /*矩阵扫描*/void key_scan()caddr = 0X88;/低四位输出,高四位输入portc = 0Xf0;/低四位为高电平,高四位为低电平temp = portc;if(temp&0xf0)!=0xf0)/检测到有键按下/keycode = 0;delayms(50);/延时消抖keycode=temp&0xf0;caddr = 0X81;/高四位输出,低四位输入portc = 0X0f;/高四位为高电平,低四位为低电平temp=portc&0x0f;keycode|=temp;keycode=keycode;change();for(i=3;i0;i-) /将键值左移一位,实现刚按下的键在最低位显示defi = defi-1;def0 = key;porta = 0x00; /先给A赋初值(去掉不行)delayms(150); /键释放等待key_scan();函数实现对矩阵按键的判断,然后通过change()函数实现对键地址的转换,然后将转换后的键值 key存入数组defi以方便在数码管移位时调用。键值判断采用高低电平翻转法:首先让PC口高四位为1,低四位为0,。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。然后让PC口高四位为0,低四位为1,。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。最后将上述两者进行或运算即可确定被按下的键的位置。3.3数码管显示程序采用4位八段数码管利用动态扫描显示输出,程序如下:#include reg52.h#include def.h/#include intrinsuchar code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF;/*毫秒延时子程序*/void delayms(uint i) uchar j;while(i-)for(j=0;j115;j+) ;/*显示子程序*/void disp() porta = 0x08; /数码管显示位选portb = tabledef0;/数码管显示段选delayms(1);/延时显示portb = 0xff;/清除B口(去掉不行)porta = 0x04;portb = tabledef1;delayms(1);portb = 0xff;porta = 0x02;portb = tabledef2;delayms(1);portb = 0xff;porta = 0x01;portb = tabledef3;delayms(1);portb = 0xff;这部分包括延时程序,用以实现数码管显示延时,完成多位动态扫描显示输出。显示disp() 执行过程为先进行位选,在进行段选延时显示,再清除PB口,这个过程共须执行四次用于实现多位显示。3.4头文件本程序共包括三个reg52.h、head.h和 def.h,其中reg52.h为系统自带,建工程时添加即可,而head.h和 def.h为程序编辑时规范而自己添加的。3.4.1头文件head.h头文件head.h主要实现的功能是对外部函数的定义,方便程序的调用。#ifndef _HEAD_H#define _HEAD_H#include reg52.h/*外部函数定义*/extern void disp();extern void key_scan();extern void delayms(uint);#endif3.4.1头文件def.h头文件def.h主要实现对接口的定义、宏定义、8255端口的地址定义和全局变量的声明。#ifndef _DEF_H#define _DEF_H#include reg52.h#include absacc.h/*接口定义*/sbit cs = P27; /*宏定义*/#define uchar unsigned char#define uint unsigned int/*定义8255各端口地址*/#define porta XBYTE0x7F00 #define portb XBYTE0x7F01#define portc XBYTE0x7F02#define caddr XBYTE0x7F03/*定义全局变量* */extern uchar def4; #endif四、系统调试及仿真软硬件在调试过程中遇到的问题不是太多,只是在综合调试时遇到些麻烦,典型的有8255的调试和数码管的逐位左移显示。4.1 8255的调试8255的的连接电路为经典的单片机I/O口扩展电路,在其使用过程中应先写地址,再写控制字,最后再传数据,但硬件连接和软件写作完成后,8255并不像预想的一样正常工作,出现的问题有:1、 矩阵按键的控制无法用PA或PB口单独实现;2、 第一次按下按键后正常显示,第二次若按下同一个按键则数码管全亮,若按下不同按键则正常显示。调试解决方法:1、矩阵按键用PC口控制,因为PC口可以实现高四位和低四位分别控制,连接后软件不变实现了矩阵按键的控制。2、第二各问题产生的原因查找了好久,但是就是不行,最后试着从8255的地址到数据传输逐步调试,在数据传送完后对数据口进行清除数据得以解决。4.2 数码管的调试显示部分采用4位8段共阳极数码管,共用数据传送口。这部分遇到的问题主要是在课程设计实现之后,再做扩展设计时遇到的。扩展设计要求实现逐位显示,当第二个按键按下时第一次显示的数据左移移位。在编程实现这块时总是出问题,不显示或乱显示。调试解决方法:第一一个一维数组将每次按下的键值存入数组,当按键每按下一次时,将数组的值左移一维,最后将数组的值对应的字形码调用显示。五、总结通过本次课程设计我学会了用工程的手段来解决实际的问题,虽然只是个很简单的I/O口扩展矩阵显示电路,但却给了我很多启示,在课本上所学并不等于所得,理论并不等价于实际,工程中的问题有很多是课本上没有提到的,如8255传完数据后需要清口,软硬件时序的调整等问题。课程设计课程设计让我们得以开阔眼界,更近一步地了解单片机进入单片机世界。这次课程设计带给我的不仅仅是硬件的仿真和软件的编辑调试,更多的是事件经验。接口技术课程设计给了我一次强化自己,提高自己动手实践机会,在此我要感谢接口技术课程设计老师侯俊才、郭文川、卢文华在这两个星期内对我的悉心指导。课程设计的选题、具体工作和报告的撰写过程都凝聚着老师师的辛勤劳动。感谢实验室的同学们,感谢他们在我课程设计完成过程中给予的热心帮助和遇到困难时的鼓励。附录 扩展设计仿真电路附录 扩展设计部分代码#include reg52.h#include head.h #include def.huchar key;uchar frist= calculater ;/*主函数*/void main()Initialize_LCD();while(1) ShowString(1,frist); key_scan();disp();#include reg52.h#include intrins.h#include head.h#include def.h/*液晶忙检测*/uchar Busy_Check() uchar LCD_Status;RS = 0;RW = 1;EN = 1; /输出Delayms(1); LCD_Status = P0;EN = 0; /输出禁止return LCD_Status;/*写命令*/void Write_LCD_Command(uchar cmd) while(Busy_Check()&0x80)=0x80);RS = 0;RW = 0;EN = 0;P0 = cmd;EN = 1;Delayms(1);EN = 0;/*写数据*/void Write_LCD_Data(uchar dat) while(Busy_Check()&0x80)=0x80);RS = 1;RW = 0;EN = 0;P0 = dat;EN = 1;Delayms(1);EN = 0;/*液晶初始化*/void Initialize_LCD() Write_LCD_Command(0x3c);/显示模式设置(两行显示)Delayms(1);Write_LCD_Command(0x0e);/显示清屏Delayms(1);Write_LCD_Command(0x06);/显示光标移动设置Delayms(1);/*写字符串*/void ShowS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光学玻璃的残余应力分析考核试卷
- 营养知识在慢性病管理中的应用考核试卷
- 货运火车站物流设备维护保养与故障排除考核试卷
- 木材加工在建筑维护中的应用考核试卷
- 矿物加工与无机盐生产考核试卷
- 连续搬运设备数字化设计与仿真考核试卷
- 图书馆绿色建筑设计考核试卷
- 肥料制造工艺改进与新农村建设研究考核试卷
- 医院药剂辅助人员药品研发与知识产权运营合同
- 电商店铺代运营及供应链管理服务协议
- 甘肃麻辣烫介绍
- 暴雨天气注意安全课件
- 天然气安全技术说明书
- 供电公司隐患排查总结报告
- 《揭开货币神秘面纱》课件
- 商业银行业务与经营练习题
- 系统云迁移方案
- 山东省医院护理服务质量评价细则
- HSK六级真题与答案下载(第一套)
- 工程量确认单
- 无机化学之锡铅重要化合物介绍课件
评论
0/150
提交评论