微型计算机课程设计报告_第1页
微型计算机课程设计报告_第2页
微型计算机课程设计报告_第3页
微型计算机课程设计报告_第4页
微型计算机课程设计报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微型计算机技术课程设计报告专业:通信工程班级:通信072班姓名:xxxx学号:200727067指导教师:xxxx时间:2010-通信与电子工程学院键盘接口和显示设计课程设计报告一、1.课设目的为了进一步稳固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。通过设计使学生在稳固所学知识的根底之上具有初步的单片机系统设计与应用能力。1、通过本设计,使学生综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的根底。2、学会使用KEILC和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。2.课设内容设计并实现一个4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。二、1.问题分析、方案的提出键盘可以分为独立联接式和行列式两类,每一类有可根据对键盘的译码方法分为编码键盘和非编码键盘两种类型。编码键盘主要是通过硬件电路产生被按按键的键码和一个选通脉冲,这种键盘使用方便,但硬件电路复杂,常常不被微型计算机采用。在非编码键盘中,每个按键的作用只是使相应节点接通和断开,每个按键的键码并非由硬件电路产生,而是由相应扫描处理程序对它扫描形成的。因此,非编码键盘硬件电路极为简单。在独立联接式非编码键盘中,每个啊年都是彼此独立的,均需占用CPU的一条I/O输入数据线。4×4键盘的每个按键菌核单片机的P1口的两条相连。假设没有按键按下时,单片机从P1口读得的引脚电平为“1〞;假设某一按键被按下,那么该键所对应的端口线变为地电平。单片机定时对P1口进行程序查询,即可发现键盘上是否有按键按下以及哪个按键被按下。实现4×4键盘的接口需要用到单片机并编写相应的程序来识别键盘的十六个按键中哪个按键被按下。因为此题目还要求将被按下的按键显示出来,因此可以用两个数码管来分别显示被按下的按键的行与列。我们可以将4×4键盘的八个接口与单片机的P1端口相连,两个数码管分别与单片机的P0口和P2口相连。从而编写相应的程序使P1口能够识别出4×4键盘中的哪个按键被按下并且将被按下的按键的这一信息通过P0口和P2口的两个数码管显示出来。〔我们选择P1口作为输入口〔将按键信息从此端口输入〕和选择P0口和P2口作为输出口〔从该端口将哪个按键被按下的信息传出来送到数码管上〕是根据PROTEUS软件所提供的芯片的引脚排列及布线方便美观来考虑的。其实P1端口、P2端口和P3端口都是输入输出端口,都可以输入输出数据!〕对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。2.设计思路及原因对于4×4键盘,共有十六个按键。如果每个按键与单片机的一个引脚相连,就会占用16个引脚,这样会使的单片机的接口不够用〔即使够用,也是对单片机端口的极大浪费〕。因此我们应该行列式的接法。行列式非编码键盘是一种吧所有按键排列成行列矩阵的键盘。在这种键盘中,每根行线和列线的交叉处都接有一个按键,每当某个按键被按下时,与这个按键相连的行线和列线就会接通,否那么是断开状态。。因此4×4行列式非编码键盘只需4条行线和4条列线,总共占用8条I/O端口线。大大减少了I/O端口线的利用。假设没有按键按下时,单片机从P1口读得的引脚电平为“1〞;假设某一按键被按下,那么该键所对应的端口线变为地电平。因此0xEX(X表示任意一个十六进制数)表示4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)那么分别表示键盘的第一列、第二列、第三列和第四列。例如0xD7是键盘的第二行第四列的按键三、1.电路设计及功能说明4×4键盘的十六个按键分成四行四列分别于P1端口的八条I/O数据线相连;两个七段数码管分别与单片机的P0口和P2口的低七位I/O数据线相连。数码管采用共阳极的接法,所以需要下拉电阻来分流。〔在单片机的P3端口上安装了一个喇叭,通过编程实现当有按键按下的时候喇叭出现响声予以提示。〕结合软件程序,即可实现4×4键盘的接口及显示的设计。当按下键盘其中的一个按键时,数码管上会显示出该按键在4×4键盘上的行值和列值。所以实现了数码管显示按键位置的功能。2.硬件原理框图及电路图(包括接口芯片简介);电路原理框图电路图接口芯片简介at89c51芯片管脚图引脚图AT89C51内部功能图AT89C51简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。1.主要特性:•与MCS-51兼容•4K字节可编程闪烁存储器•全静态工作:0Hz-24MHz•三级程序存储器锁定•128×8位内部RAM•32可编程I/O线•两个16位定时器/计数器•5个中断源•可编程串行通道•低功耗的闲置和掉电模式•片内振荡器和时钟电路2.主要管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1〞时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1〞时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能存放器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1〞后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流〔ILL〕这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD〔串行输入口〕

P3.1TXD〔串行输出口〕

P3.2/INT0〔外部中断0〕

P3.3/INT1〔外部中断1〕

P3.4T0〔记时器0外部输入〕

P3.5T1〔记时器1外部输入〕

P3.6/WR〔外部数据存储器写选通〕

P3.7/RD〔外部数据存储器读选通〕

P3口同时为闪烁编程和编程校验接收一些控制信号。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。3.芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1〞且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。数码管简介数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元〔多一个小数点显示〕;按能显示多少个“8〞可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。数码管的驱动方式数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。①静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示那么需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:〕,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。②动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制翻开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。四、软件局部的程序流程图,算法和使用的编程技巧1.程序流程图开始开始扫描P1端口有按键按下NYYN确定键盘的行列值行列值正确数码管显示按键行列值结束2.编程技巧1.在按键扫描程序中,通过for循环语句实现被按下的按键的行值确实定,用switch语句实现列值确实定。0xEX(X表示任意一个十六进制数)表示4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)那么分别表示键盘的第一列、第二列、第三列和第四列;2.ucRow+ucLine+1即为被按下的按键的行列值;3.用十六个switch语句实现对单片机P0端口和P2口的I/O数据线的控制,来控制数码管显示被按下按键的行值和列值;4.硬件设备中还在AT89C51芯片的P3口安装一喇叭,并且在源程序中编写了相应程序段使当按键被按下时喇叭会发出声音来提示按键被按下。五、源程序代码〔C语言编写〕#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineSCANPORTP1sbitspk=P3^0;ucharcodetable[]={0xF9,0xA4,0xB0,0x99}; //1,2,3,4的共阳字形码ucharuca_LineScan[]={0xEF,0xDF,0xBF,0x7F}; //ucharucKeyScan(){ ucharTemp=0; ucharucRow=0,ucLine=0; // 给行列值赋初值0 for(ucLine=0;ucLine<4;ucLine++) //对P1端口扫描来确定键盘行值 { SCANPORT=uca_LineScan[ucLine]; Temp=SCANPORT&0x0F; if(Temp!=0x0F) { switch(Temp) { case0x0E:ucRow=10;break; //假设为0x0E,那么选中键盘第一列 case0x0D:ucRow=20;break; //假设为0x0D 那么选中键盘第二列 case0x0B:ucRow=30;break; case0x07:ucRow=40;break; default:ucRow=50;break; //未选中键盘列值 } break; } } SCANPORT=0x0F; returnucRow+ucLine+1; //返回被按下键盘的行列值,即确定被按下的按键的位置}voidvKeyProcess(unsignedcharucKeyCode){ switch(ucKeyCode) { case11:P0=table[0];P2=table[0];spk=1;break; //按键K1-1被按下 case12:P0=table[1];P2=table[0];spk=1;break; case13:P0=table[2];P2=table[0];spk=1;break; case14:P0=table[3];P2=table[0];spk=1;break; case21:P0=table[0];P2=table[1];spk=1;break; //按键K2-1被按下 case22:P0=table[1];P2=table[1];spk=1;break; case23:P0=table[2];P2=table[1];spk=1;break; case24:P0=table[3];P2=table[1];spk=1;break; //按键K2-4被按下 case31:P0=table[0];P2=table[2];spk=1;break; case32:P0=table[1];P2=table[2];spk=1;break; //按键K3-2被按下 case33:P0=table[2];P2=table[2];spk=1;break; case34:P0=table[3];P2=table[2];spk=1;break; case41:P0=table[0];P2=table[3];spk=1;break; case42:P0=table[1];P2=table[3];spk=1;break; //按键K4-2被按下 case43:P0=table[2];P2=table[3];spk=1;break; //按键K4-3被按下 case44:P0=table[3];P2=table[3];spk=1;break; default:break; }}voidmain() //主程序{ spk=0; while(1) // 开始循环 { vKeyProcess(ucKeyScan()); //调用扫描键盘并确定按键行列值的子程序 spk=0; }}六、仿真过程综述1.按照设计思路在PROTEUS软件中找到相应元器件,按照正确的连线方法将各个元器件连起来。再用PROTEUS软件仿真时,为防止连线的复杂性,可以使用在要连线的引脚上标注相同的符号的方法。这样可以使PROTEUS软件窗口中的连线少一些,使电路图更加清晰;2.按照硬件电路在KEILC软件中编写程序,对编写的程序进行编译,在确定没有错误后生成十六进制文件并加载到PROTEUS软件中原理图的AT89C51芯片中;3.在PROTEUS软件中点击运行按钮,实现仿真:按下键盘上的按键,观察数码管显示的是否正确。七、调试过程中的主要难点(自己遇到的)及解决思路和方法因为上网查到的资料与题目要求的有一定的差异,自己需要修改其硬件电路局部和程序,这样就会产生一定的问题:1.在硬件电路连线时用到了总线,造成了单线与总线虚连和错连的现象。使得自己感觉硬件与软件都没问题但就是仿真不出来。2.程序写好,编译好后忘记加载到单片机芯片上就开始仿真,走了不少的弯路,3.单线与总线连接时应该确保单线准确的连在总线上,而且应该防止两条单线连在总线的同一点处。否那么产生的错误是非常致命的,而且还不容易找出;因此在单线与总线连接时一定要注意连接是否正确得当,并且将该标注的标号正确标注;4.为防止电路图中连线过多,可以采用将需要连线的引脚标注上相同的符号的方法。这样可以尽可能少的减少连线错误,并是电路图清晰,美观;5.因为该数码管是用的共阳极的接法,其下拉电阻起到分流的作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论