《能力拓展训练》课程设计-基于键盘输入单元的单片机仿真.doc_第1页
《能力拓展训练》课程设计-基于键盘输入单元的单片机仿真.doc_第2页
《能力拓展训练》课程设计-基于键盘输入单元的单片机仿真.doc_第3页
《能力拓展训练》课程设计-基于键盘输入单元的单片机仿真.doc_第4页
《能力拓展训练》课程设计-基于键盘输入单元的单片机仿真.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学能力拓展训练课程设计说明书摘 要在日常生活中,我们经常要通过按键来实现对电子装置的控制,小到手表手机,中到电视电脑,大到各种复杂仪器,都需要通过按键来实现各种操作。本次课程设计作为实践教学的一个重要环节,将以按键控制显示为主题,以AT89C51单片机及其接口芯片为核心构造一个键盘控制显示系统,并使用Proteus软件对所设计的电路进行仿真。关键词:Proteus 键盘显示 AT89C51 仿真 211 软件与硬件简介1.1 Proteus软件简介Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年新增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。本次设计将使用Proteus7.5SP3版本进行仿真。1.2 AT89C51硬件简介AT89C51芯片是一种带有4K字节闪存的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高而且价格低廉的方案。本次设计将使用此芯片作为核心硬件进行设计。2 总体分析设计2.1 电路结构分析本次设计的目标为单片机控制的键盘识别显示系统,主要采用AT89C51单片机作为核心,由矩阵键盘电路、译码电路、显示电路等模块构成,分别对按键信息和显示电路以及软、硬件各个部分进行控制;本设计采用汇编语言编程来实现对单片机的控制。实际运作时,单片机会将检测到的按键信号转换成数字,显示于七段数码管上。系统主要结构可以拆分如下: 矩阵键盘:按键传送输入信息;本次设计使用16个独立按键形成4*4矩阵键盘; AT89C51:采用软件编程来实现按键信息的提取和转换; 七段数码管:用于显示最终被单片机转换过的按键信息。 由以上构思可以设计此按键显示电路。2.2 总体方案设计图2.2为按键控制显示电路系统的总体原理框图:矩阵键盘输入单片机提取转换数码管显示数字图2.2整体电路原理方框图即实验者通过按下矩阵键盘的按键来进行信息输入,当有按键被按下时,按键信息被输入到经过编程的单片机AT89C51中进行提取与转换,变为对数码管进行操作的输出信息,使数码管显示对应的数字。2.3 总体电路图总体电路图如图2.3所示:图2.3 整体电路图列线P1.0-P1.3为输出线,行线P1.4-P1.7为输入线。一开始单片机将列线(P1.0-P1.3)全部输出低电平,此时读入行线数据,若行线全为高电平则没有键按下,当行线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入行线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,列线轮流输出低电平,根据读入行线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11-P13输出高电平,此时读取行线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取行线数据,发现行线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。3 硬件电路模块3.1键盘输入模块矩阵键盘驱动的主要作用就是实时监测外部按键中断,一旦发现外部有键按下就向内核发送键盘消息实现键盘输入功能。键盘驱动创建了中断服务线程和4个键盘中断事件,每行按键对应一个键盘中断事件。有键被按下时,中断服务例程得到对应的中断标识符并报告给系统任务调度进程,同时产生键盘中断事件,键盘中断服务线程响应键盘中断事件,开始扫描矩阵键盘。根据产生的中断事件类型不同,可以首先确定被按下键的行位置。由于键盘被按下后,该键对应的行和列被连通,因此根据判断各列对应的I/O口的电平,可以得到被按下键的列位置。用单片机的并行口P1连接44矩阵键盘,并以单片机的P1.0P1.3各管脚作输入线,以单片机的P1.4P1.7各管脚作输出线,在数码管上显示每个按键 “0F”的序号。矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是44个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。四个并行口,其电路图如图3.1;图3.1 44矩阵键盘输入模块3.2 单片机AT89C51单片机模块是整个电路的核心,时钟信号与复位信号的产生以及程序的处理等任务都是由单片机来完成的。时钟信号用来提供单片机片内各种微操作的时间基准,复位信号用来初始化单片机内部的某些特殊功能寄存器,使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。由于Protues软件自带缺省引脚的信息自动补充功能,本实验中将省略内部时钟电路与外部复位电路。3.3 数码管模块译码电路中常用的显示器有LED(数码管)和LCD(液晶显示器)。这两种显示器都具有线路简单、耗电少、成本低、寿命长等优点。本系统输出结果选用1个七段数码管显示。数码管有共阴共阳之分,本系统采用共阳型。LED的外形结构如图3.3.1,外部有10个引脚,其中GND脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字(0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。图3.3.1 LED数码管结构 如下表1即两种数码管中数字显示对应的段码: 表1 LED显示段码字型共阳极段共阴极段字型共阳极段共阴极段0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H本次设计中数码管模块接至单片机的P0.00.6六个并行口和P2.7口,其电路如图3.3.2;图3.3.2数码管模块4 软件设计与仿真4.1 软件流程图开始无按键显示0检测是否有按键按下根据当前状态识别显示键值结束图4.1 软件流程图4.2 系统程序代码#includevoid keyscan();void delay();void display(unsigned char i);void main()while(1)keyscan();void keyscan()unsigned char n;P1=0xfe;n=P1;n&=0xf0;if(n!=0xf0)delay();P1=0xfe;n=P1;n&=0xf0;if(n!=0xf0)switch(n)case(0xe0):display(0);break;case(0xd0):display(1);break;case(0xb0):display(2);break;case(0x70):display(3);break;P1=0xfd;n=P1;n&=0xf0;if(n!=0xf0)delay();P1=0xfd;n=P1;n&=0xf0;if(n!=0xf0)switch(n)case(0xe0):display(4);break;case(0xd0):display(5);break;case(0xb0):display(6);break;case(0x70):display(7);break;P1=0xfb;n=P1;n&=0xf0;if(n!=0xf0)delay();P1=0xfb;n=P1;n&=0xf0;if(n!=0xf0)switch(n)case(0xe0):display(8);break;case(0xd0):display(9);break;case(0xb0):display(10);break;case(0x70):display(11);break;P1=0xf7;n=P1;n&=0xf0;if(n!=0xf0)delay();P1=0xf7;n=P1;n&=0xf0;if(n!=0xf0)switch(n)case(0xe0):display(12);break;case(0xd0):display(13);break;case(0xb0):display(14);break;case(0x70):display(15);break;void display(unsigned char i)unsigned char table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E;P2=0xfe;P0=tablei;void delay()unsigned char i,j;for(i=0;i20;i+)for(j=0;j250;j+)4.3 仿真结果 实际仿真结果如图4.3所示:当5号按键按下时,数码管模块正常显示数字5,实验成功。 图4.3 仿真结果5 功能拓展在矩阵键盘控制显示电路的基础上进行功能的拓展,利用按键设计成计算器加法:能够计算四位以内的数的加法、减法、除法和两位数以内的乘法。有清零功能,还能随时对运算结果和数字输入进行清零。以下是计算器的程序#include reg51.hsbit P3_0=P30;sbit P3_1=P31;sbit P3_2=P32;sbit P3_3=P33;sbit P3_4=P34;sbit P3_5=P35;sbit P3_6=P36;sbit P3_7=P37;unsigned char sz11,xs14,xs24,sj;int i,cs,bb,t1,t2,fh,s1,s2;void chushihua()bb=1;xs10=10;xs11=10;xs12=10;xs13=10;xs20=10;xs21=10;xs22=10;xs23=10;t1=0;t2=0;s1=s2=0;fh=0;cs=1;void xianshi(unsigned char xs4)int i,j;unsigned char zy;zy=0x08;for (i=0;i1);for (j=0;j100;j+);/for (i=0;i100;i+);return;unsigned char saomiao()int i,j;unsigned char pp;for (i=0;i1000;i+);P0=0xfe;P3=0x0f;pp=P3;if (P3_0=0) P3=0x0f;pp=P3;while (P3_0=0);for (i=0;i1000;i+);return 7;if (P3_1=0) P3=0x0f;pp=P3;while (P3_1=0);for (i=0;i1000;i+);return 8;if (P3_2=0) P3=0x0f;pp=P3;while (P3_2=0);for (i=0;i1000;i+);return 9;if (P3_3=0) P3=0x0f;pp=P3;while (P3_3=0);for (i=0;i1000;i+);return 11;/=1P0=0xfd;P3=0x0f;pp=P3;if (P3_0=0) P3=0x0f;pp=P3;while (P3_0=0);for (i=0;i1000;i+);return 4;if (P3_1=0) P3=0x0f;pp=P3;while (P3_1=0);for (i=0;i1000;i+);return 5;if (P3_2=0) P3=0x0f;pp=P3;while (P3_2=0);for (i=0;i1000;i+);return 6;if (P3_3=0) P3=0x0f;pp=P3;while (P3_3=0);for (i=0;i1000;i+);return 12;/=2P0=0xfb;P3=0x0f;pp=P3;if (P3_0=0) P3=0x0f;pp=P3;while (P3_0=0);for (i=0;i1000;i+);return 1;if (P3_1=0) P3=0x0f;pp=P3;while (P3_1=0);for (i=0;i1000;i+);return 2;if (P3_2=0) P3=0x0f;pp=P3;while (P3_2=0);for (i=0;i1000;i+);return 3;if (P3_3=0) P3=0x0f;pp=P3;while (P3_3=0);for (i=0;i1000;i+);return 13;/=3P0=0xf7;P3=0x0f;pp=P3;if (P3_0=0) P3=0x0f;pp=P3;while (P3_0=0);for (i=0;i1000;i+);return 16;if (P3_1=0) P3=0x0f;pp=P3;while (P3_1=0);for (i=0;i1000;i+);return 0;if (P3_2=0) P3=0x0f;pp=P3;while (P3_2=0);for (i=0;i1000;i+);return 15;if (P3_3=0) P3=0x0f;pp=P3;while (P3_3=0);for (i=0;i=0 & x0;i-)xs1i=xs1i-1;xs10=x;s1+;t1=t1*10+x;if (bb=2)if (s2=4) cs=0;return ;elsefor (i=3;i0;i-)xs2i=xs2i-1;xs20=x;s2+;t2=t2*10+x;if (x10)if (bb=1) fh=x;bb=2;return;if (bb=2)if (fh=11) t1=t1/t2;if (fh=12) t1=t1*t2;if (fh=13) t1=t1-t2;if (fh=14) t1=t1+t2;if (t1=10000) cs=0;return;elseif (t1=0 & t1=10 & t1=100 & t1=1000 & t110000) xs10=t1%10;xs11=t1%100/10;xs12=(t1-(t1/1000)*1000)/100;xs13=t1/1000;bb=2;s2=0;t2=0;xs20=10;xs21=10;xs22=10;xs23=10;fh=x;void main() sz0=0xfc;sz1=0x60;sz2=0xda;sz3=0xf2;sz4=0x66;sz5=0xb6;sz6=0xbe;sz7=0xe0;sz8=0xfe;sz9=0xf6;sz10=0x00; cs=0;for (;)if (cs=0) chushihua();if (cs=1) sj=saomiao();if (cs=1 & sj!=10) chuli(sj);if (cs=1 &(bb=1 | bb=2 & s2=0) xianshi(xs1);if (cs=1 &(bb=2 & s2!=0) xianshi(xs2);其仿真图如下:图5.1功能拓展仿真图(被加数)图5.2功能拓展仿真图(加数)图5.3功能拓展仿真图(和)6 心得体会 万事开头难。在刚开始课程设计的时候,大家都有点茫然而且无从下手的感觉。首先是题目的选择,在没有决定题目之前,查找资料毫无目的,基本是查查这个资料,待会又搜索另一个。这大大的浪费来我我的时间。最后,但经过老师的指导及自己查阅相关的资料,逐渐有了自己的设计想法,制定

温馨提示

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

评论

0/150

提交评论