基于与Proteus仿真的键盘计算器的设计
基于Protues的任意N进制计数器的设计与仿真

山西电子技术2009年第6期应用实践 收稿日期:2009-08-11作者简介:杨庆(19592),男,硕士,副教授,研究方向:电子系统设计与仿真。
文章编号:167424578(2009)0620016203基于Prot ues 的任意N 进制计数器的设计与仿真杨 庆,来国红,孙玲姣(湖北民族学院科技学院,湖北恩施445000)摘 要:用集成计数器芯片设计任意N 进制计数器是数字电路教学中的一个难点,其原因一是集成计数器芯片种类繁多;二是集成计数器芯片的清零、置数端采用同步或异步方式清零或置数,其清零或置数的方式不同采用的清零或置数的函数也不同。
采用仿真方式构成任意进制计数器,可以非常直观的将电路和输出状态、输出波形展现在屏幕上,使学生有一个直观的映像。
可以加深学生的理解,提高教学效率,取得事半功倍的效果。
关键词:Protues ;N 进制;计数器;设计;仿真中图分类号:TN0,TN7 文献标识码:A0 引言集成计数器是厂家的定型产品,其函数关系已被固化在芯片中,其状态分配即编码是不可能更改的,而且多为纯自然态序编码,但这些芯片一般都设置有清零输入端和置数输入端。
利用清零端或置数端,让电路跳过某些状态就可以获得任意N 进制计数器[1]。
集成计数器的清零或置数端都有同步和异步之分。
有的集成计数器采用同步方式———当CP 触发沿到来时才能完成清零或置数任务。
有的则采用异步方式———通过时钟触发器异步输入端实现清零或置数,与CP 信号无关。
1 清零、置数都采用同步方式的集成计数器74L S 16374L S163是四位二进制(十六进制)同步加法计数器。
其引脚图如图1所示。
图1 74163引脚图图1中,1脚是清零端,9脚是置数端。
利用清零端和置数端都可以构成任意N 进制计数器。
例如要构成十二进制计数器,其方法如下:(1)写出状态S N -1的二进制代码。
S N -1=1011.(2)求归零逻辑CL R =LOAD =P N -1=P 11.P N -1=P 11=70-3Q 1=Q n 3Q n1Q n0.(3)在Protues 中画出电路图并仿真。
51单片机的简单计算器设计与仿真设计

基于单片机的简易计算器设计与仿真设计题目:基于单片机的简易计算器设计与仿真一、设计实验条件:地点:自动化系实验室实验设备:PC机(装有Keil;Protues;Word ;Visio )二、设计任务:本系统选用AT89C51单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下:(1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD 显示数据和结果。
(2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。
(3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
(4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示围时,计算器会在LCD上提示overflow;当除数为0时,计算器会在LCD上提示error。
设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理与提示模块进行设计,并用Visio画系统方框图,keil与protues仿真分析其设计结果。
三、设计时间与设计时间安排:1、设计时间:6月27日~7月8日2、设计时间安排:熟悉课题、收集资料:3天(6月27日~6月29日)具体设计(含上机实验):6天(6月30日~7月5日)编写课程设计说明书:2天(7月6日~7月7日)答辩:1天(7月8日)四、设计说明书的容:1、前言:(自己写,组员之间不能一样,写完后将红字删除,排版时注意对齐)本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。
基于与Proteus仿真的键盘计算器的设计

基于8086与Proteus仿真的4*4键盘计算器的设计一、设计目的本次课程设计的实验目的是通过该实验掌握较复杂程序的设计。
能够独立完成用程序对8086、8255控制键盘和LED显示的控制,完成计算器加减法的应用。
独立编写程序,明白和掌握程序的原理和实现方式。
为以后的设计提供经验。
学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计内容设计计算器,要求至少能完成多位数的加减乘除运算。
独立完成用程序对8086、8255控制键盘和LED显示的控制,完成计算器加减乘除的应用。
三、设计原理与硬件电路设计的思路是:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序完成数据的储存或者是加减的运算。
运算完成后将运算的结果储存并显示到LED显示器上。
各部分硬件功能:可编程并行通信接口芯片8255A 8255A内部结构:1. 并行输入/输出端口A,B,C8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。
端口都是8位,都可以作为输入或输出。
通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。
2.A组和B组控制部件端口A和端口C的高4位(PC7~PC4)构成A组;由A组控制部件实现控制功能。
端口B和端口C的低4位(PC3~PC0)构成B组;由B组控制部件实现控制功能。
A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0~D7)送来的控制字,并根据他们来定义各个端口的操作方式。
06 12864LCD显示计算器键盘按键实验

目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。
设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。
重点就是各部分硬件的连接设计以及程序的编写。
本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。
将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。
1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。
3、分析一下此程序的各部分的功能,各零件的工作原理。
4、对程序进行调试,分析调试结果,观察并得出结论。
1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。
proteus设计计数器课程设计

proteus设计计数器课程设计一、教学目标本课程旨在通过Proteus设计计数器,让学生掌握计数器的基本原理和设计方法,培养学生的动手能力和创新能力。
具体目标如下:1.了解计数器的基本原理和结构;2.掌握Proteus软件的基本操作;3.掌握计数器的设计方法和步骤。
4.能够运用Proteus软件进行计数器的设计和仿真;5.能够分析并解决计数器设计过程中遇到的问题;6.能够独立完成计数器的设计和制作。
情感态度价值观目标:1.培养学生对电子技术的兴趣和热情;2.培养学生团队合作精神和动手实践能力;3.培养学生创新思维和解决问题的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.计数器的基本原理和结构;2.Proteus软件的基本操作;3.计数器的设计方法和步骤;4.计数器设计的仿真和测试;5.计数器的制作和调试。
第1周:计数器的基本原理和结构第2周:Proteus软件的基本操作第3周:计数器的设计方法和步骤(1)第4周:计数器的设计方法和步骤(2)第5周:计数器设计的仿真和测试第6周:计数器的制作和调试三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解计数器的基本原理和结构,Proteus软件的基本操作;2.案例分析法:分析典型的计数器设计案例,引导学生掌握设计方法和步骤;3.实验法:让学生亲自动手进行计数器的设计和制作,提高实践能力;4.讨论法:鼓励学生积极参与课堂讨论,培养团队合作精神和创新思维。
四、教学资源本课程所需的教学资源包括:1.教材:《Proteus设计计数器教程》2.参考书:《电子技术基础》、《数字电路设计》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、Proteus软件、电路实验板、电子元器件等以上教学资源将贯穿整个课程,为学生提供丰富的学习体验。
五、教学评估本课程的教学评估采用多元化评价方式,全面客观地评价学生的学习成果。
评估方式包括:1.平时表现:考察学生的出勤、课堂参与度、提问回答等情况,占总评的20%。
基于proteus的AT89C51单片机实现计算器的加减乘数开方等功能

目录一、任务说明 (2)二、原理图绘制说明 (3)三、流程图绘制以及说明 (5)1显示程序设计 (5)2键盘识别程序设计 (6)3运算程序设计 (8)4风鸣器程序设计 (9)四、PROTEUS仿真说明 (10)五、课程设计体会 (15)附I:计算器电路原理图 (16)附II:源程序代码 (17)参考文献 (34)一、任务说明本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个四乘四的键盘,一个排阻做P0口的上拉电阻,它可以实现结果低于65535的加、减、乘、除运算。
采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—P0.7相连,P0口做为字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7相连,P2口做为数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为数码管是同时点亮的,就可以达到动态显示的效果。
采用4*4键盘。
采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P3.4—P3.7管脚相连,键盘的第0列到第3列依次与单片机的P1.0—P1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。
这样循环执行。
基本功能如下:1.计算器可显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示;2.第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音,并且输入的第九个数不接收,仍然显示原来的八位数;3.可以对计算结果小于65535的两个无符号数进行+、-、*、/运算,并显示计算结果,如果输入的预计算的数超过65535,则运算时报错,显示“ERROR”,如果结果超过65535仍然报错,显示“ERROR”,以提示使用者输入错误,应清零后在从新输入。
新基于51单片机的简易计算器

基于51单片机的简易计算器1、前言:本设计是基于51系列单片机来进展的数字计算器系统设计,可以完成计算器的键盘输入,进展加、减、乘、除根本四则运算,并在LCD上显示相应的结果;设计电路采用STC90C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。
2、设计任务:计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;〔2〕LCD 显示模块;〔3〕算术运算模块;〔4〕错误处理及提示模块。
3、主体设计局部:〔1〕、系统模块图:2〕、系统总流程图:4、硬件局部单片机局部+矩阵键盘+1602显示如下列图为简易计算器的电路原理图。
P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。
简易计算器电路原理图矩阵键盘有16个按键,满足对简易计算器的计算实现,显示局部采用LCD1602,第一行显示计算的数值符号,第二行显示计算结果。
LCD显示模块:本设计采用LCD液晶显示器来显示输出数据。
通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。
5、软件局部*include<reg52.h>*include<intrins.h>*define uchar unsigned charsbit lcden=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P2^5;sbit lcdbf=P0^7;uchar temp,key,i,j,flag,fh,k;long a,b,c;uchar code table[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};uchar code table2[]="123+456-789*000/"; void delay(uchar ms){uchar *,y;for(*=ms;*>0;*--)for(y=110;y>0;y--);}/*-------------对LCD1602的操作-----------*/ bit busy(void)//判断忙碌{bit res;lcdrs=0;lcdrw=1;lcden=1;_nop_();_nop_();res=lcdbf;lcden=0;return res;}void write_inst (uchar cmd)//写命令{while(busy()==1); //忙碌就等待lcdrs=0;.lcdrw=0;lcden=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void write_(uchar )//写地址{write_inst(|0*80);}void write_date(uchar dat) //写数据{while(busy()==1);lcdrs=1;lcdrw=0;lcden=0;P0=dat;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void init() //初始化{lcden=1;write_inst(0*38);//显示8位2行delay(5);write_inst(0*0c);//显示开,光标关,不闪烁delay(5);write_inst(0*06);//增量方式不位移delay(5);write_inst(0*80);//检测忙碌信号delay(5);write_inst(0*01);//delay(5);}/*------------键盘扫描-----------*/void keyscan()//键盘扫描{P3=0*fe;if(P3!=0*fe){delay(100);if(P3!=0*fe){temp=P3&0*f0;switch(temp){case 0*e0:key=0;break;case 0*d0:key=1;break;case 0*b0:key=2;break;case 0*70:key=3;break;}}while(P3!=0*fe);if(key==0||key==1||key==2){if(j!=0){write_inst(0*01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=1;write_date(table2[key]);}}}P3=0*fd;if(P3!=0*fd){delay(100);if(P3!=0*fd){temp=P3&0*f0;switch(temp){case 0*e0:key=4;break;case 0*d0:key=5;break;case 0*b0:key=6;break;case 0*70:key=7;break;}}while(P3!=0*fd);if(key==4||key==5||key==6){if(j!=0){write_inst(0*01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=2;write_date(table2[key]);}}}P3=0*fb;if(P3!=0*fb){delay(100);if(P3!=0*fb){temp=P3&0*f0;switch(temp){case 0*e0:key=8;break;case 0*d0:key=9;break;case 0*b0:key=10;break;case 0*70:key=11;break;}}while(P3!=0*fb);if(key==8||key==9||key==10) {if(j!=0){write_inst(0*01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=3;write_date(table2[key]);}}}P3=0*f7;if(P3!=0*f7){delay(100);if(P3!=0*f7){temp=P3&0*f0;switch(temp){case 0*e0:key=12;break;case 0*d0:key=13;break;case 0*b0:key=14;break;case 0*70:key=15;break;}}while(P3!=0*f7);.switch(key){case 12:{write_inst(0*01);a=0;b=0;flag=0;fh=0;j=0;k=0;} break;case 13:{if(flag==0){a=a*10;write_date(0*30);P1=0;}else if(flag==1){b=b*10;write_date(0*30);}.} break;case 14:{j=1;if(fh==1){write_(0*4f);write_inst(0*04);c=a+b;while(c!=0){write_date(0*30+c%10);c=c/10;}write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==2){write_(0*4f);write_inst(0*04);if((a-b)>0)c=a-b;elsec=b-a;if(c==0)write_date(0*30+0);while(c!=0){write_date(0*30+c%10);c=c/10;}if((a-b)*(-1)>0)write_date(0*2d);write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==3){write_(0*4f);write_inst(0*04);c=a*b;if(c==0)write_date(0*30+0);while(c!=0){write_date(0*30+c%10);c=c/10;}write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==4){write_(0*4f);write_inst(0*04);i=0;c=(long)(((float)a/b)*1000); //计算c的数据if(c==0)write_date(0*30+0);while(c!=0){write_date(0*30+c%10);c=c/10;i++;if(i==3)write_date(0*2e); //写数据}if((a/b)<=0)write_date(0*30);write_date(0*3d);a=0;b=0;flag=0;fh=0;k=0;}} break;case 15:{if(k==0).{write_date(table2[key]);flag=1;k=1;fh=4;}} break;}}}void main(){init();i=0;j=0;.a=0;b=0;c=0;k=0;flag=0;fh=0;while(1){keyscan();}}6、总结通过该计算器的设计我深入学习数码管扫描和键盘控制,提高对了51系列单片机的实际应用能力。
基于PROTEUS软件的计算器设计

基于PROTEUS软件的计算器设计摘要近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,在很多先进的系统中,单片机往往是作为一个核心部件来使用。
在日常生活中,计算器的应用更是极为普遍,已经成为我们日常生活中必不可少的计算工具,而它的主要部分就是单片机。
本设计介绍了单片机在计算器领域的应用技术,以常用的MCS-51系列(本次选用8051)单片机为基础,简单介绍了单片机与键盘之间以及与显示器之间的应用技术。
本次设计中的键盘的识别是一个非常重要的部分,我们此次所用的是非编码键盘,只需要预先写入识别程序,这种方法使得我们的硬件设计变的简洁许多。
在设计过程中由于实际情况的要求,我们利用部分器件对单片机进行了数据扩展,以满足计算器系统的工作要求。
设计中利用键盘进行数据的输入,然后通过单片机对其进行处理,最后就可以通过LCD显示器显示出来。
关键词:单片机;键盘;显示器;LCD如需程序/Word版本,请访问: 嵌入式软件院。
The calculator design based on PROTEUSAbstractWith the infiltration in the social field of the computer in recent years, the application of the one-chip computer is moving towards deepening constantly, in very many advanced systems, the one-chip computer often was took a core part used. In the daily life, the calculator application is extremely universal, already became in our daily life the essential computation tool, and further its main part was the one-chip computer.This design introduced the one-chip computer in the calculator domain application technology, take the commonly used MCS-51 series the one-chip computer as a foundation(this time selects 8051), introduced between the one-chip computer and the keyboard as well as with the monitor between application technology simply.In this design keyboard recognition is an extremely important part, this time we use the right and wrong code keyboard, only needs to read in the recognizer in advance, this method causes our hardware design to change succinct many. In the design process as a result of the actual situation request, we used the partial components to carry on the data expansion to the one-chip computer, satisfied the calculator system the work requirement.In the design carries on the data input using the keyboard, then carries on processing through the one-chip computer to it, finally may demonstrate through the LCD monitor. Keywords: the one-chip computer; Keyboard; Display; LCD2目录引言 (6)第1章概述 (7)第2章硬件设计 (8)2.1 MCS-51单片机的硬件结构 (8)2.1.1 MCS-51单片机的逻辑结构 (8)2.1.2 MCS-51的外部引脚 (9)2.1.3 数据存储器的扩展 (11)2.2 门电路 (13)2.2.1 74LS373芯片 (14)2.2.2 74LS00芯片 (15)2.2.3 7407芯片 (16)2.3 键盘 (17)2.3.1 键盘简介 (17)2.3.2 非编码键盘 (18)2.3.3 非编码键盘的控制方式 (19)2.3.4 非编码键盘接口技术 (20)2.3.5 键盘实例分析 (22)2.4 LCD显示器 (23)2.4.1 液晶显示器概述 (23)2.4.2 LCD的分类及特点 (24)2.4.3 LCD显示模块 (25)2.4.4 所选器件讲解 (26)第3章软件部分 (28)3.1 总程序流程图 (28)3.2 键盘扫描程序流程图 (28)3.3 显示程序流程图 (30)第4章PROTEUS介绍 (31)4.1 Proteus 介绍 (31)4.2 Keil 与proteus 连接调试 (32)4.2.1 Proteus 与Keil 联机 (32)4.2.2 界面简介 (33)结论与展望 (36)致谢 (37)参考文献 (38)附录A 电气原理总图 (39)附录B 外文文献及其译文 (40)附录C 参考文献及其摘要 (44)附录D 源程序 (46)插图清单图1-1 硬件结构框图 (7)图2-1 MCS-51单片机的内部结构框图 (8)图2-2 8051引脚图 (10)图2-3 MCS-51内、外部时钟连接方式 (11)图2-4 数据存储器6264引脚图 (12)图2-5 MCS-51扩展RAM的示意图 (12)图2-6 扩展8KB数据存储器电路 (13)图2-7 74LS373芯片引脚图 (14)图2-8 74LS373原理结构 (15)图2-9 74LS00逻辑图 (16)图2-10 7407逻辑图 (17)图2-11 独立连接式非编码键盘 (19)图2-12 4行4列矩阵式键盘连接线 (19)图2-13 编码键盘例图 (22)图2-14 点阵式LCD显示字母“A”的情况 (25)图2-15 LCD显示模块的内部结构 (25)图2-16 LCD显示引脚图 (26)图2-17 LCD连接线路图 (27)图3-1 总程序流程图 (28)图3-2 键盘扫描流程图 (29)图3-3 显示程序流程图 (30)图4-1 Keil 目录下的TOOLS.ini 文件 (33)图4-2 使用ISIS打开的原理图 (33)图4-3 选择Keil工程 (34)图4-4 调试程序 (34)图4-5 运行前的界面 (35)图4-6 运行结果显示 (35)4表格清单表2-1 P3口的第二功能 (10)表2-2 6264芯片控制操作 (13)表2-3 74LS373主要电器特性 (14)表2-4 74LS373真值表 (14)表2-5 74LS00主要电特性 (15)表2-6 74LS00功能表(Y=AB) (16)表2-7 7407主要电特性 (16)表2-8 7407功能表(Y=A) (17)表2-9 1602显示器引脚说明 (26)引言可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于与P r o t e u s仿真的键盘计算器的设计集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)基于8086与Proteus仿真的4*4键盘计算器的设计一、设计目的本次课程设计的实验目的是通过该实验掌握较复杂程序的设计。
能够独立完成用程序对8086、8255控制键盘和LED显示的控制,完成计算器加减法的应用。
独立编写程序,明白和掌握程序的原理和实现方式。
为以后的设计提供经验。
学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计内容设计计算器,要求至少能完成多位数的加减乘除运算。
独立完成用程序对8086、8255控制键盘和LED显示的控制,完成计算器加减乘除的应用。
三、设计原理与硬件电路设计的思路是:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序完成数据的储存或者是加减的运算。
运算完成后将运算的结果储存并显示到LED显示器上。
各部分硬件功能:可编程并行通信接口芯片8255A 8255A内部结构:1. 并行输入/输出端口A,B,C8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。
端口都是8位,都可以作为输入或输出。
通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。
2.A组和B组控制部件端口A和端口C的高4位(PC7~PC4)构成A组;由A组控制部件实现控制功能。
端口B和端口C的低4位(PC3~PC0)构成B 组;由B组控制部件实现控制功能。
A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0~D7)送来的控制字,并根据他们来定义各个端口的操作方式。
3. 数据总线缓冲存储器三态双向8位缓冲器,是8255A与8086CPU之间的数据接口。
与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。
4. 读/写控制部件8255A完成读/写控制功能的部件。
能接收CPU的控制命令,并根据控制命令向各个功能部件发出操作指令。
CS 片选信号:由CPU输入,有效时表示该8255A被选中。
RD, WR 读、写控制信号:由CPU输入。
RD有效表示CPU读8255A,WR有效表示CPU写8255A。
RESET 复位信号:由CPU输入。
RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。
定义工作方式控制字:工作方式0:8255A中各端口的基本输入/输出方式。
5.键盘输入模块键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测,而键盘往往这需要键盘按钮数一半的I/O口数对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观,这也是键盘能够长期得到人们青睐的原因,可是硬件上的节省必然导致软件上编程的复杂,那就来看看键盘到底使软件编程有多复杂下图是一个4*4键盘的结构图,它是四条I/O线作为行线,四条I/O线作为列线组成的键盘。
在键盘的行线和列线的每一个交点上,设置一个按键,这样键盘中按键的个数是4*4个。
这种行列式键盘结构能够有效地提高单盘及系统中I/O口的利用率。
于是将键盘接8255A的PC口,至于为什么选择PC是有原因的,进行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4*4键盘则要求4个I/O口输入,另外4个输出,这一点PC口刚好符合,而PA、PB口要么全部输入或输出,所以只能是PC口接键盘。
4*4键盘结构图五、设计流程图六、实验程序DATA SEGMENTX DB ,,, ;存放数据的每一位X1 DW ;存放第一个数据值X2 DW ;存放第二个数据值Y DW ;存放运算结果S DB ;存放运算符号值E DB ;按下等号键标记CC DB ;存放运算数据位数H DB 0 ;存放按键行号L DB 0 ;存放按键列号DISCODE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H ,71H ;段码表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,90H ;设置为A口输入,B口输出,C口输出OUT 46H,ALMOV DI,OFFSET X+3 ;DI指向X的高位KKK: CALL KEY ;扫描按键JMP KKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROC CHECK: CALL DISP ;等待按键按下的同时进行显示MOV AL,0F0H ;所有行输出低电平OUT 44H,ALIN AL,40HCMP AL,0FFH ;读列值JZ CHECK ;若都为高电平则无键按下,等待MOV CX,50LOOP $ ;延时消抖IN AL,DX ;重读列值CMP AL,0FFHJZ CHECK ;无键按下一直等待MOV H,0 ;有键按下,先把行列号变量清0MOV L,0MOV BL,01HMOV BH,0FEH ;扫描法读键值:从第一行开始测试,即PC0输出低电平NEXT: MOV AL,BHOUT 44H,ALNEXTH: IN AL,40H ;读列值,判断是第几列有键按下TEST AL,BL ;从第一列开始判断JZ WAIT0ROL BL,1CMP BL,10H ;当前行状态下没有任何列有键按下,则转为对下一行的测试JZ NEXTLINC H ;每判断一列,列号加1JMP NEXTH ;再对下一列进行判断 NEXTL: MOV H,0MOV BL,01HROL BH,1 ;对下一行测试,让下一个PC口输出低电平CMP BH,0EFHJZ EXITINC LJMP NEXTWAIT0: IN AL,40H ;若有键按下,则等该按键松开后再计算键值CMP AL,0FFHJNZ WAIT0MOV CX,50LOOP $ ;延时消抖IN AL,40HCMP AL,0FFHJNZ WAIT0CALL KEYVALUE ;调计算键值子程序EXIT: RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值(键值=列号*4+行号) ;键值存放在DL寄存器中KEYVALUE PROCMOV DL,LMOV DH,HSHL DL,1SHL DL,1 ;列号乘4ADD DL,DHCMP DL,9 ;按下的是数字键JNG NUM_CALLCMP DL,14JL CONT_CALL ;按下的是运算键CMP DL,14JZ OUTP_CALL ;按下的是等于键CMP DL,15JZ CLR_CALL ;按下的是清除键NUM_CALL: CALL NUMBER ;调数字键处理子程序JMP EXIT1CONT_CALL: MOV S,DL ;存放运算键的键值MOV E,0CALL COUNT ;调运算键处理子程序,计算第一个加数JMP EXIT1OUTP_CALL: CALL OUTP ;调等号键处理子程序JMP EXIT1CLR_CALL: CALL CLEAR ;调清除键处理子程序EXIT1: RETKEYVALUE ENDP;以下为清除键处理子程序,按下清除键后,X变量全部清0CLEAR PROCMOV X[3],0MOV X[2],0MOV X[1],0MOV X[0],0CALL BITPRETCLEAR ENDP;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量;并根据运算符号,调用相应的运算子程序OUTP PROCPUSH AXPUSH DXPUSH BXINC ECALL COUNT ;调运算键处理子程序,计算第二个运算数据CMP S,10JZ ADD_CALL ;运算符为加号,则调用加法子程序CMP S,11JZ SUB_CALL ;运算符为减号,则调用减法子程序CMP S,12JZ MUL_CALL ;运算符为乘号,则调用乘法子程序CMP S,13CALL DIVP ;运算符为除号,则调用除法子程序JMP STORE1ADD_CALL: CALL ADDPJMP STORE1SUB_CALL: CALL SUBPJMP STORE1MUL_CALL: CALL MULPSTORE1: MOV AX,Y ;以下程序将各运算子程序返回的运算结果,按位分解,送入X变量MOV DX,0MOV BX,1000DIV BXMOV X[0], ALMOV AX,DXMOV BL,100DIV BLMOV X[1],ALMOV AL,AHMOV AH,0MOV BL,10DIV BLMOV X[2],ALMOV X[3],AHPOP BXPOP DXPOP AXRETOUTP ENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量;或者将第二个运算数据的数值计算出来并存入X2变量;将运算符的值存入S变量COUNT PROCPUSH AXPUSH BXPUSH DXMOV DX,0CALL BITP ;测试X中的数据是多少位CMP CC,4 ;输入的数据是4位数?JZ C4CMP CC,3 ;输入的数据是3位数?JZ C3CMP CC,2 ;输入的数据是2位数?JZ C2JMP C1 ;输入的数据是1位数?C4: MOV AX,0MOV AL,X[0]MOV BX,1000MUL BXMOV DX,AXC3: MOV AL,X[1]MOV BL,100MUL BLC2: MOV AL,X[2]MOV BL,10MUL BLADD DX,AXC1: MOV AL,X[3]MOV AH,0ADD DX,AXCMP E,1JNZ X1_SMOV X2,DX ;按下的是等号,则将第二个运算数据的值存入X2变量JMP EXIT3X1_S: MOV X1,DX ;按下的是运算符号,则将第一个运算数据的值存X1变量MOV X[3],0 ;清空X变量MOV X[2],0MOV X[1],0MOV X[0],0EXIT3: POP DXPOP BXPOP AXRETCOUNT ENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数 NUMBER PROCCMP E,1JNZ CONTINUEMOV E,0CALL CLEARCONTINUE: CMP CC,0 ;目前数据为0位,即没有数据,则转到SSSJZ SSS;若已有数据,以下程序将X左移8位。