微机原理课程设计简易计算器
- 格式:doc
- 大小:587.50 KB
- 文档页数:14
简易计算器的课程设计一、课程目标知识目标:1. 学生能理解简易计算器的内部工作原理,掌握其基本功能操作。
2. 学生能运用计算器进行基本的算术运算,包括加、减、乘、除以及百分比计算。
3. 学生理解并掌握计算器上各个按键的功能及其在数学运算中的应用。
技能目标:1. 学生能够使用计算器辅助解决实际问题,如购物找零、面积计算等。
2. 学生通过计算器的使用,提高数据输入、结果读取和运算过程纠错的能力。
3. 学生能够结合数学知识,利用计算器进行数据的简单统计分析。
情感态度价值观目标:1. 培养学生对待科学技术的积极态度,认识到计算器在日常生活和学习中的便捷性。
2. 增强学生的团队协作意识,通过小组活动,学会分享和交流使用计算器的经验。
3. 培养学生遵守计算器使用的规则,养成良好的计算器使用习惯,珍惜公共资源。
本课程设计针对的学生群体为小学高年级学生,他们已经具备了一定的数学基础和操作简单电子设备的能力。
课程性质为实用技能型,旨在通过简易计算器的教学,将理论知识与实践操作相结合,提高学生解决实际问题的能力。
在教学要求上,注重培养学生的动手操作能力和创新思维,同时强调情感态度的培养,使学生在学习技能的同时,也能形成正确的价值观。
通过具体学习成果的分解,教师可进行有针对性的教学设计和学习效果评估。
二、教学内容本章节教学内容依据课程目标,结合教材内容,科学系统地组织以下部分:1. 简易计算器基础知识:介绍计算器的发展历程、种类及简易计算器的结构组成,对应教材第二章第一节。
2. 计算器按键功能:详细讲解各按键的功能及其在数学运算中的应用,对应教材第二章第二节。
3. 基本运算操作:教授如何使用计算器进行加、减、乘、除以及百分比计算,对应教材第二章第三节。
4. 计算器在实际应用中的使用:结合实际案例,如购物找零、面积计算等,展示计算器的实用性,对应教材第二章第四节。
5. 数据的简单统计分析:利用计算器进行数据输入、处理和简单统计分析,对应教材第二章第五节。
-O一一〜二O—二学年第一学期信息科学与工程学院自动化系课程设计计划书二o—年十二月六日一、课题名称简易计算器设计二、课题目的利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。
熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。
加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。
三、需求分析(1)能够实现99以内的加减乘法运算,并显示在2位LED上。
(2)对于减法运算产生的负数,可在LED上显示号,若负量超过9,则显示“E0S四、方案选择方案一:该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。
方案二:该方案则是将LED显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。
方案三:该方案则只用一片8255驱动LED显示和键盘扫描电路。
方案评估:方案一:LED显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃!方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!)综上所述:采用方案三!五、程序流程图程序总流程图:判断输入流程图: 断电开始I六. 系统原理图键盘映射图:键盘编码图:系统原理图:注:1、复位电路单独画在旁边,其参数设置符合6MHZo2、74HC04反相器由于位置不够,本人自己画了一个小型的74HC04。
3、IOW, IOR信号线由于采用了最大系统组态,故由8288的IORC 和AIOWC 代替。
4.8088的CLK由8284A提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。
6、LED与键盘扫描电路的上拉电阻阻值统一采用,保证数码管有足够亮度。
山东大学控制科学与工程学院课程设计报告书课程设计名称:简易计算器班级:测控一班学号:201000171202姓名:魏凯峰一、电路工作原理该电路主要由以下几部分组成,1、51系列单片机最小系统板,由AT89C51单片机,复位电路,晶振电路(晶振频率是11.0592MHZ),这部分是控制中心,晶振电路可产生程序运行所需要的时钟频率。
2、显示部分,由8位共阴数码管和两个74HC573锁存器、排阻(1K)组成,74HC573锁存器用于动态显示数据,也有驱动显示作用,排阻是限流作用。
3、按键部分,由20位独立键盘组成,按矩阵形式连接,用到9个IO口。
原理:键盘作为数字输入,矩阵键盘的工作原理是当某个键按下时,其两端的IO口电平变化,程序中通过相应位的与或运算,就可以判断出是哪个按键被按下,单片机中的程序不断读取键盘的输入并实时显示在数码管上,数码管用段位选不断切换显示,如当位选为高电平时即为点亮,然后再输入相应的数字段码(该电路中用的是共阴极数码管的字码),这样数码管上便可以显示相应数字。
锁存器中的LE口就是段位选口,高电平有效,数码管中的A、B......G、DP是数码管中的每一段,只要某个字母为高电平,则该段二极管就会被点亮(共阴极)。
在同时显示多个数字时要利用到动态显示,视觉动态显示主要就是利用人眼的视觉感来设计的,一般来说如果显示的频率过慢,则会有断断续续的显示;如果显示的频率加快,则人眼就分辨不出这种视觉残余!二、程序简要说明从主函数开始,先是定义一些变量,然后是调用显示函数displaypro(0),先显示0,然后进入一个大循环while(1),在循环里面先检测键盘keyscan(),并把检测值赋给K,然后是段位选循环8次检测,然后用switch(k)函数来执行键盘操作,k的值从0到9表示输入数字0到9,10到13表示加减乘除,17、15分别表示十六进制和二进制,16表示小数点,14表示正负号,18表示清除,19是等于号。
课程设计(大作业)报告课程名称:微机原理与汇编语言程序设计设计题目:简单计算器程序设计院系:信息技术班级:计算机应用技术1班设计者:王娟学号:201211020142指导教师:周曦设计时间:2014年6月23~27日目录一、昆明学院课程设计(大作业)任务书-----------------------3二、课程设计(大作业)成绩-----------------------------------------4三、题目分析-----------------------------------------------------------5四、基本理论-----------------------------------------------------------5五、总体设计-----------------------------------------------------------5六、实验器材-----------------------------------------------------------6七、方法步骤-----------------------------------------------------------6八、成效分析-----------------------------------------------------------7九、参考文献-----------------------------------------------------------8十、附录-----------------------------------------------------------------8昆明学院课程设计(大作业)任务书一.题目分析1、利用BIOS调用中INT 16H调用中的子程序完成清屏、设置显示方式、设置窗口等操作。
2、利用INT 21H DOS系统功能调用中的键盘输入接收十进制操作数和运算符,由程序完成由字符转换为二进制数,并存储起来。
、学号××××××××《微型计算机原理与接口技术》课程设计(2008级本科)《题目:简易计算器系统设计系(部)院:××××××××××专业:电气工程及其自动化,作者姓名:×××××××指导教师:××职称:××完成日期:××年×月×日@课程设计任务书(目录一、设计目的 (1)二、设计任务与要求 (1)三、总体方案论证 (1)方案1 (1)8255A与键盘接口 (2)8255A与LED数码管接口 (5)方案2 (8)/使用设备 (6)参数定义 (6)使用方法 (6)四、硬件设计 (6)五、软件设计 (6)程序设计思路 (6)程序中的关键技术 (7)六、流程图设计 (7)&七、程序调试运行 (8)程序编写 (9)上机编译与调试 (9)运行结果 (10)八、总结 (11)参考文献 (12)微机原理与接口技术课程设计成绩评定表 (15)一、设计目的1、进一步加深对微机系统的理解和认识,提高微机系统的应用水平。
2、进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言程序的水平和学习程序调试方法。
3、初步加强自己的科学研究方法训练和实践锻练,增强分析问题和解决问题的能力,了解微机原理和接口技术的新发展。
二、设计任务与要求1、可以进行十进制数四则运算。
用按键输入数据;具有清零和复位功能;具有连续运算功能。
2、在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。
学会掌握和使用各种已有的技术资料,不要盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。
学号:课程设计题目简易计算器的设计学院自动化专业电气工程及其自动化班级姓名指导教师2014 年1月9日课程设计任务书学生姓名:专业班级:指导教师:工作单位:自动化学院题目: 简易计算器的设计初始条件:用8086CPU、8255A并行通信接口、七段LED数码管接口、小键盘控制电路接口、外围电路芯片及元器件实现一个简易计算器,完成相应的程序编写。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)可进行2位十进制的加减乘除法运算。
(2)键盘输入数据,同时LED数码管显示,模拟计算器的工作。
(3)键盘上要求有0~9数字键,+、-、×、÷、=功能键,清除键C。
(4)撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月26日----- 12月 28 日查阅资料及方案设计12月29日----- 1 月 2 日编程1 月 3日----- 1 月 7日调试程序1 月 8日----- 1 月 9日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1设计的任务及要求 (2)2方案的设计 (3)2.1方案设计论证 (3)2.2方案概述与原理硬件电路图 (3)3系统模块与功能 (5)3.18086CPU芯片 (5)3.2 8255A 并行通信接口芯片 (5)3.3 译码电路 (6)3.4 小键盘电路 (6)3.5 四位七段 LED 数码管显示电路 (7)4软件设计框图与程序 (8)4.1计算器系统程序总体流程图 (8)4.2 模块程序流程图与程序 (8)4.2.1流程图 (8)4.2.2键盘扫描流程图 (9)4.3输入运算 (10)4.3.1输入运算的流程图 (10)4.3.2输入运算程序 (10)4.4显示部分 (11)4.4.1显示部分流程图 (11)4.4.2显示部分程序 (12)5系统仿真 (14)6小结与体会 (15)参考文献 (16)附录:设计源程序 (17)本科生课程设计成绩评定表摘要这次微机原理的课程设计的题目是简易计算器的设计,设计一个可以实现2位十进制加减乘除运算功能的电路,并用LED显示出来。
目录一摘要 (2)二引言 (2)三课程设计的目的和任务 (2)四设计思路 (3)五硬件选择及单元电路分析 (3)六程序流程图 (10)七仿真、调试 (12)八课程设计体会 (12)九参考文献 (14)摘要:汇编语言是面向机器的程序设计语言,是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
在汇编语言中,用助记符代替操作码,用地址符或标号代替地址码。
本次程序设计是以计算器为任务,运用汇编语言来完成。
任务要求有计算器的界面,并显示出来。
所以程序中一个重要的程序段界面的设计。
另外对于两个数字和运算符的输入存储和显示也是比较重要的一段。
程序中,我们用了较多的子程序,使得程序的阅读理解比较清晰简单。
引言:通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,来设计一个计算器。
计算器要求如下:1、可以显示输入数字与运算结果的数码管,有可供使用的16个按键,16个键对应于0~9数字以及+、-、*、/、=以及重新开始;2、能实现10以内的加、减、乘、除单步运算并显示结果,3、能够显示“错误”提示;4、能够中止还未输入完的计算式。
三、课程设计的目的和任务通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。
让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
计算机硬件技术实践报告题目简易计算器的设计姓名专业自动化(电站方向)班级学号上海电力学院自动化工程学院一、设计题目及目的本次课程设计的实验目的是:通过该实验掌握较复杂程序的设计;能独立完成用程序对8086、8255A控制键盘和LED显示的控制,完成计算器加减法的应用;独立编写程序,明白和掌握程序的原理和实现方式;学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用;进一步加强理论知识与应用相结合的实践和锻炼,为以后的设计提供经验。
这次设计实践,加深了我对专业知识和理论知识学习的认识和理解,使我的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
我们的具体任务是用8086设计一个能实现0~9整数加减乘除法的运算器,并用2位LED数码显示,键盘包括0-9,+ ,-,×,÷,=,NO/C共16个按键。
二、小组成员分工及成果在实验课程要求下,我们选择基于8086CPU的模拟计算器设计。
要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图,根据相应的原理以及实现过程,编写出相应的汇编代码。
再根据原理图连接硬件电路,电路连接完成后进行调试。
设计过程中我们用到了8086CPU、可编程并行输入/输出芯片8255A、74HC138、74HC373、矩阵式键盘、LED数码管。
我们的模拟计算器能实现2位十进制数以内的加减乘除法运算。
首先,本组的三个成员一起讨论研究简易计算器设计的主要方案。
粗略设计程序流程图以确定简易计算器设计的大概框架。
明确目的后各自查询资料了解设计原理、逐步清晰设计思路。
以下为大体分工:主要负责:1、设计主要程序,编写;2、查找资料验证修改;主要负责:1、选择需要用的各个芯片;2、设计硬件原理图;主要负责:1、各个芯片功能的资料查找;2、设计程序流程图三、设计方案思路用8086设计一个能实现0~9整数加减乘除法的运算器,并用2位LED数码显示,键盘包括0-9,+ ,-,×,÷,=,NO/C共16个按键。
1.总体设计思想及主要功能1.1总体设计思想程序主要分为主程序,输入子程序,输出子程序,加法子程序,减法子程序,乘法子程序,除法子程序。
根椐输入的符号选用不同的运算子程序,最后调用输出子程序。
各个程序的具体做法,详见后面的流程图和分析。
本程序的关键是在输入、输出程序,值得特别注意的地方是call 和ret的调用,而且还要清楚跳转的返回地址;由于计算器比数学用表等计算工具要先进得多,应该积极倡导学生加速用计算器取代数学用表的进程。
从键盘输入数据与运算符;可以进行加、减、乘、除四则运算,输入和输出的数均必须为十进制的。
输入的数据最大为双字的,。
如果输入的除数为0;输出错误信息。
输入的表达式有误,输出错误信息。
输入的两个数,不能除尽时,输出除数输入错误信息。
如果输入了空格,同样输出错误信息。
输出的数据最大可输出4字,为的是输出乘除法的结果。
除法最后所得结果可为小数点后四位值。
1.2实现的主要功能(1)输入和输出的数均为十进制的。
(2)输入的数据最大为双字的且必须是数字,当输入字母或其他非数字符号时,输出错误信息。
(3)如果输入的除数为0;输出错误信息。
(4)输入的表达式有误,输出错误信息。
(5)输入的两个数,有一个大于双字,输出错误信息。
(6)如果输入了空格,输出错误信息。
(7)输出的数据最大可输出4字,为的是输出乘法的结果。
(8)除法有不能整除的情况时,输出小数结果保留小数点后四位并显示除数输入错误信息。
2.简单计算器的流程图2.1 主程序的流程图主程序设计思路说明:输入的数据如果超过双字,就会溢出,因为我定义的存储器为双字的。
输入什么样的数都会有一个范围,一定得有这个信息。
根据输入的符号调用相应的函数。
除法和别的不一样,还要输出余数,并且,除数不能是0。
所以我就在里面调用了输出函数,要输出两次,而外面只能输出一次,为了更好输出结果,我就只好这样了。
输入y可以继续进行运算,要注意的是,要把原来的数给清0,不然得不到答案。
简易计算器的课程设计一、课程目标知识目标:1. 学生能理解简易计算器的基本原理,掌握其功能和使用方法。
2. 学生能运用所学的数学知识,如加、减、乘、除等运算,进行计算器操作。
3. 学生了解计算器在日常生活和学习中的应用场景。
技能目标:1. 学生能够熟练操作简易计算器,完成基本的数学运算。
2. 学生通过计算器解决实际问题,提高问题解决能力和逻辑思维能力。
3. 学生通过小组合作,培养团队协作能力和沟通能力。
情感态度价值观目标:1. 学生培养对数学学习的兴趣,认识到数学与生活的紧密联系。
2. 学生在学习过程中,培养细心、耐心和严谨的学习态度。
3. 学生通过计算器的使用,认识到科技进步对生活的影响,增强科技意识。
课程性质:本课程为实践操作课程,结合数学知识,培养学生的实际操作能力和问题解决能力。
学生特点:考虑到学生所在年级的特点,课程内容难度适中,注重激发学生的学习兴趣和动手能力。
教学要求:教师应注重理论与实践相结合,关注学生的个别差异,引导他们主动探索和解决问题。
在教学过程中,将目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 计算器的发展历史及分类- 了解计算器的演变过程,认识不同类型的计算器及其功能特点。
2. 简易计算器的结构组成- 学习简易计算器的按键功能、显示屏幕、电池等组成部分。
3. 基本数学运算操作- 学习运用计算器进行加、减、乘、除等基本数学运算。
4. 计算器在生活中的应用实例- 分析计算器在购物、预算、科学研究等领域的实际应用。
5. 计算器操作技巧与注意事项- 掌握计算器操作的快捷键,了解使用计算器时的注意事项。
6. 解决实际问题的方法- 结合实际问题,运用计算器进行数据计算和问题分析。
教学内容安排与进度:第一课时:计算器的发展历史及分类,简易计算器的结构组成。
第二课时:基本数学运算操作,计算器在生活中的应用实例。
第三课时:计算器操作技巧与注意事项,解决实际问题的方法。
. . . .课程设计报告课程设计名称:简易计算器系别:三系学生XX:X梦瑶班级:11通信1班学号:成绩:指导教师:袁静开课时间:2013-2014学年1学期一.设计题目简易计算器二.主要内容1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块。
2、画出程序流程图。
3、根据流程图,编写源程序。
4、上机调试程序。
三.具体要求1、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
2、利用BIOS中断的10号功能调用来设置显示方式。
3、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
四.进度安排五.成绩评定考核方法:现场验收(占50%),课程设计报告(占50%)。
考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。
成绩评定:优,良,中,及格,不及格。
特别说明:如发现抄袭,按照不及格处理。
目录前言41、设计题目52、设计内容62.1 基本内容62.2 主要功能63、设计原理及方案73.1 总体方案73.2 程序流程图83.2.1 主程序83.2.2 计算子程序103.3 系统模块详细设计113.3.1 界面设置113.3.2 算法选择设置123.3.3 数制转换设置134.汇编源程序代码165、调试运行结果255.1 操作说明255.2 调试运行结果256、心得体会287、参考文献30前言课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。
计算器在我们日常生活中应用是相当普遍的,可以说它已经成为现代社会生活不可或缺的一部分。
本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
一、设计要求1.设计4*4的键盘,其中10个数字键0~9,第十三个键为”+“,第十五个键为”=“2 ,实现1位数的简单加运算二、硬件系统设计1、LED接口电路简易计算器需要2位8段码LED显示电路。
用LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。
然后接至各数码显示器的共阴极端。
2、键盘接口电路简易计算器需要4*4的行列式键盘。
8255A的B口作为输出端,C口作为输出端。
采用的是方式0。
3、计算器逻辑电路图将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图逻辑电路结构如下:Cpu 8255 键盘三、软件设计1、LED显示程序设计LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED 显示器,器排列形状如下图所示:为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阴极字形代码如下表:0~9七段数码管共阴级字形代码2位LED显示的程序框图如下:2、读键输入程序设计为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用行扫描法识别按键。
其程序框图如下:3、主程序设计(1)数值送显示缓冲程序设计简易计算器所显示的数值最大位为一位。
(2)运算主程序设计首先初始化参数,送LED低位显示“0”,高位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、还是功能键(“+”“=”),是数值键则送LED显示并保存数值,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
运算主程序框图如下所示:4、简易计算器源程序con8255 equ 06c6h ;8255的控制端口的物理号c8255 equ 06c4h ;C端口的端口号b8255 equ 06c2h ; B端口的端口号a8255 equ 06c0h ; A端口的端口号data segmentlist DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ;对应数字的显示码keycode DB 0EEH, 0DEH, 0BEH, 7EHDB 0EDH, 0DDH, 0BDH, 7DHDB 0EBH, 0DBH, 0BBH, 7BHDB 0E7H, 0D7H, 0B7H, 77H;对应键的特征值(键盘识别码)num1 dw 0 ;偏移量x DB 0FFH ;存放参与运算的第一个数y DB 0FFH ;存放运算符z DB 0FFH ;存放参与运算的第二个数re DB 0FFH ;存放运算结果data endssstack segment stackssda db 100 dup(?)sstack endscode segmentassume cs:code, ds:datastart: mov ax, datamov ds, axcall init8255 ;初始化8255 ispk:call clear ;B端口清零call ispkey ;判断是否有建按下and al, 0fhcmp al, 0fhje ispkcall findkeyboardcall dispnumcmp num1, 14je js1call cunshujmp disnum1js1: call jisuanmov x, 0ffhmov y, 0ffhmov z, 0ffhmov nUM1, 0mov re,0ffhcall dispnummov cx,1000www: loop wwwjmp ispkdisnum1:is: jmp ispkmov ah, 4chint 21hinit8255 proc near ;初始化8255 mov al, bmov dx, 06c6hout dx, alretinit8255 endpclear proc nearmov dx, b8255out dx, alclear endpispkey proc near ;判断是否有建按下mov al, 00hmov dx, a8255out dx, almov dx, c8255in al, dxretispkey endpfindkeyboard proc near ;找具体键盘按键cl1: mov al, bmov ah, alshl ah, 4mov dx, a8255 ;al传递给a端口out dx, almov dx, c8255 ;c端口读入数据赋值给alin al, dxcmp al, 0fhje cl2jmp exitkcl2: mov al, bmov ah, alshl ah, 4mov dx, a8255out dx, almov dx, c8255in al, dxand al, 0fhcmp al, 0fhje cl3jmp exitkcl3: mov al, bmov ah, alshl ah, 4mov dx, a8255out dx, almov dx, c8255in al, dxand al, 0fhcmp al, 0fhje cl4jmp exitkcl4: mov al, bmov ah, alshl ah, 4mov dx, a8255out dx, almov dx, c8255in al, dxand al, 0fhcmp al, 0fhexitk:add ah, al ;得到键盘识别码retfindkeyboard endpdispnum proc near ;显示数字子程序cmp ah,0b7hjnz ll2mov cl,remov ch,0mov si,offset listadd si,cxmov al,[si]mov dx,06c2hout dx,almov num1,14jmp ll3ll2: mov cx, 16mov si, offset keycodemov di, offset listmov num1, 0numl1: cmp [si], ahje exitinc siadd num1, 1loop numl1exit: add di, num1 ;显示相应数字mov al, [di]mov dx, 06c2hout dx, alll3: retdispnum endpCUNSHU PROC NEAR ;存放数据PUSH AXCMP X, 0FFHJNE Y1MOV AL, BYTE PTR NUM1MOV X, ALJMP EX1Y1: CMP Y, 0FFHJNE Z1MOV AL, BYTE PTR NUM1MOV Y, ALJMP EX1Z1:MOV AL, BYTE PTR NUM1MOV Z, ALEX1: POP AXRETCUNSHU ENDPJISUAN PROC NEAR ;计算子程序PUSH SILEA SI, KEYCODEMOV AX, 0ADD AL, XADD AL, ZADD SI, AXMOV AH, [SI]MOV RE, ALPOP SIRETJISUAN ENDPcode endsend start四、心得体会课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
课程设计设计名称: 微型计算机技术及应用——简易计算器学院:信息工程学院课程:微型计算机技术及应用姓名:学号:班级:2014级计算机科学与技术二班目录摘要 (3)一、前言 (4)1.1背景 (4)1.2项目介绍 (4)二、课程设计的目的与任务 (5)2.1设计目的 (5)2.2设计任务 (5)三、设计过程 (5)3.1基础理论 (5)3.1.1DOSBox简介 (5)3.1.2中断 (8)四、设计 (11)4.1总体方案 (11)4.2原理框图 (12)4.3程序代码 (13)五、系统模块详细设计与调试 (24)5.1系统模块详细设计 (24)5.1.1设置屏幕显示方式 (24)5.1.2显示主菜单 (24)5.1.3从键盘接收一个数字 (24)5.1.4接收键入用于计算的数 (25)5.1.5显示结果 (25)5.1.6子程序A2——将数的ASCII码转为二进制数 (25)5.1.7将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示(A3程序段) (27)5.2程序编译、运行与调试 (27)六、设计总结 (29)七、参考文献 (31)摘要本次课程设计是通过使用DOSBox汇编语言编程软件实现的利用汇编语言编写的较为复杂的程序设计。
该课程设计主要是设计一个较为简单的计算器,界面显示要求用户从键盘上分别输入两个随机数,完成四则运算,然后将运算结果显示到屏幕上。
该设计智能实现简单的正整数之间的四则运算,无法对小数进行精确地识别。
而除法运算可以精确到3位小数,减法可以显示出负数的结果。
采用DOS调用(INT 21H)来完成键盘的输入和屏幕的输出。
通过这次的课程设计能够进一步加深对专业知识和理论知识学习的认识和理解。
关键词:DOSBox;微机原理;计算器;汇编语言一、前言1.1背景计算器是现代人发明的可以进行数字运算的电子机器。
现代的电子计算器能进行数学运算的手持电子机器,拥有集成电路芯片,但结构比电脑简单得多,可以说是第一代的电子计算机(电脑),且功能也较弱。
课程设计课程名称微机课程设计题目名称__ 计算器学生学院____ 自动化__ ______ 专业班级____ 12电力(2) _2015 年 1月 7日一.目的1. 巩固和加深对《微机原理及应用》课程内容的认识和理解,提高应用水平; 2. 掌握汇编语言程序的编程方法; 3. 熟悉键盘控制和七段数码管的使用。
二.设计要求课程设计内容按下图接线上机编程:1、编程 将储存器的数据F 、D 、B 、9、7、5共6个数经XLAT 查表后,在六位七段数码管LED 上显示出来;2、 编程按学号实现下面键盘,在显示器上显示对应键值,要求显示值能左移;上两行下两行1~5号 6~10号 3、编程实现:a).定义键盘按键,12个为数字键0~F ,4个功能键:加号+,除号÷,等号=,CLEAR 清零键;a) 可进行四位16进制除法运算。
b) 可进行五位10进制加法运算;4、电路框图5、课程设计报告课程设计完成后,交课程设计报告一份(内容包括:系统设计说明、系统原理图、程序设计流程图、源程序、注解)。
目录一、源程序 (3)1.程序一 (3)1.1 题目 (3)1.2 源程序 (4)2.程序二 (5)2.1题目 (5)2.2 源程序 (6)3.程序三 (11)3.1题目 (11)3.2 源程序 (13)二、心得与体会 (19)三、参考文献 (19)一、源程序1.程序一1.1题目:编程将储存器的数据F、D、B、9、7、5共6个数经XLAT查表后,在六位七段数码管LED上显示出来。
流程图:1.2源程序:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDA TA SEGMENTT1 DB 0FH, 0DH, 0BH, 09H, 07H, 05HT2 DB 0FCH, 60H, 0DAH, 0F2H, 66H, 0B6H, 0BEH, 0E0H ;设置0~F数码管段码DB 0FEH, 0F6H, 0EEH, 3EH, 9CH, 7AH, 9EH, 8EHDA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART: MOV AX, DATAMOV DS, AXMOV AL, 82H ;8255A初始化MOV DX, 0606HOUT DX, ALA1:MOV AH, 0FEH ;移位代码LEA SI, T1MOV CX, 0006HA2:MOV AL, AHMOV DX, 0600HOUT DX, ALMOV AL, [SI]LEA BX, T2XLATMOV DX, 0604HOUT DX, AL ;查表的段码送C口显示INC SIROL AH, 01HCALL DALL YLOOP A2JMP A1DALL Y: ;延时PUSH AXPUSH CXMOV CX, 0002HA3:MOV AX,0FFFHA4:DEC AXJNZ A4LOOP A3POP CXPOP AXRETCODE ENDSEND START2.程序二2.1 题目:编程按学号实现下面键盘,在显示器上显示对应键值,要求显示值能左移;B A 9 8 7 6 5 40 1 2 3上两行下两行1~5号6~10号流程图:2.2源程序:STACK SEGMENT STACKDW 64 DUP (?)STACK ENDSDA TA SEGMENTTABLE DB 0FCH, 60H, 0DAH, 0F2H, 66H, 0B6H, 0BEH, 0E0H DB 0FEH, 0F6H, 0EEH, 3EH, 9CH, 7AH, 9EH, 8EHV AR1 DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEHV AR2 DB 0FCH,0FCH,0FCH,0FCH,0FCH,0FCHV AR3 DB 00H,00H,00H,00H,00H,00H,00H,00HDA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART:MOV AX, DA TAMOV DS, AXMOV AL, 82H ;8255A初始化MOV DX, 0606HOUT DX, ALMOV BX, 0000HSTT: ;键盘测试MOV AL, 00HMOV DX, 0600HOUT DX, ALMOV DX, 0602HIN AL, DXAND AL, 60HCMP AL, 60HJNZ KEYKEYCALL DISP ;调用显示程序JMP STTKEYKEY:CALL TIME ;延时,去抖动MOV DX, 0602HIN AL, DXAND AL, 60HCMP AL, 60HJNZ KEYJMP STTKEY: ;键盘扫描识别MOV DX, 0600HMOV AL, 0FEHOUT DX, ALMOV DX, 0602HIN AL, DXTEST AL, 40H ;测试PCB6JNZ KEY_7CALL KEY0JMP STTKKEY_7:TEST AL, 20HJNZ KEY_1CALL KEY7JMP STTKKEY_1:MOV DX, 0600HMOV AL, 0FDHOUT DX, ALMOV DX, 0602HIN AL, DXTEST AL, 40HJNZ KEY_6CALL KEY1JMP STTKKEY_6:TEST AL, 20HJNZ KEY_2CALL KEY6JMP STTKKEY_2:MOV DX, 0600HMOV AL, 0FBHOUT DX, ALMOV DX, 0602HIN AL, DXTEST AL, 40HJNZ KEY_5CALL KEY2JMP STTKKEY_5:TEST AL, 20HJNZ KEY_3CALL KEY5JMP STTKKEY_3:MOV DX, 0600HMOV AL, 0F7HOUT DX, ALMOV DX, 0602HIN AL ,DXTEST AL, 40HJNZ KEY_4CALL KEY3JMP STTKKEY_4:TEST AL, 20HJNZ ABCCALL KEY4ABC:JMP STTK;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~KEY0: ;按键0处理子程序CALL LP1 ;低4位字节前移MOV AL, 00HMOV [DI+5],ALLEA BX, TABLE ;查表取出要显示数字的数码管段码XLATMOV [SI+5],ALCALL DISP ;显示RET ; 返回KEY7:CALL LP1MOV AL, 07HMOV [DI+5],ALLEA BX, TABLEXLATMOV [SI+5],ALCALL DISPRETKEY1:CALL LP1MOV AL, 01HMOV [DI+5],ALLEA BX, TABLEXLATMOV [SI+5],ALCALL DISPRETKEY6:CALL LP1MOV AL, 06HMOV [DI+5],ALLEA BX, TABLEXLATMOV [SI+5],ALCALL DISPRETKEY2:CALL LP1MOV AL, 02HMOV [DI+5],ALLEA BX, TABLEXLATMOV [SI+5],ALCALL DISPRETKEY5:CALL LP1MOV AL, 05HMOV [DI+5],ALLEA BX, TABLEXLATMOV [SI+5],ALCALL DISPRETKEY3:CALL LP1MOV AL, 03HMOV [DI+5],ALLEA BX, TABLEXLATCALL DISPRETKEY4:CALL LP1MOV AL, 04HMOV [DI+5],ALLEA BX, TABLEXLATMOV [SI+5],ALCALL DISPRET;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~LP1: ;数据移位保存子程序(前移四位)MOV CX, 0005HMOV SI, OFFSET V AR2MOV DI, OFFSET V AR3LP2:MOV AL, [SI+4]MOV [SI+5],ALMOV AL, [DI+4]MOV [DI+5],ALDEC SIDEC DILOOP LP2RET;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DISP: ;显示子程序MOV SI, OFFSET V AR1MOV DI, OFFSET V AR2MOV CX, 0006HDIR:MOV AL, [SI]MOV DX, 0600HOUT DX, ALMOV AL, [DI]MOV DX, 0604HCALL TIMEINC SIINC DILOOP DIRRETTIME: ;延时程序PUSH AXPUSH CXMOV CX, 0005HTIME1:MOV AX, 00F0HTIME2:DEC AXJNZ TIME2LOOP TIME1POP CXPOP AXRET;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~STTK: ;放键测试CALL DISPMOV AL, 00HMOV DX, 0600HOUT DX, ALMOV DX, 0602HIN AL, DXAND AL, 60HCMP AL, 60HJNZ STTKJMP STTCODE ENDSEND START3.程序三3.1 题目:编程实现:a). 定义键盘按键,12个为数字键0~F,4个功能键:加号+,除号÷,等号=,CLEAR 清零键;b). 可进行四位16进制除法运算。
二○一一~二○一二学年第一学期信息科学与工程学院自动化系课程设计计划书课程名称:微机原理及应用课程设计班级:自动化0901姓名:王立学号:200904134032指导教师:孟志华二○一一年十二月六日一、课题名称简易计算器设计二、课题目的利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。
熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。
加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。
三、需求分析(1)能够实现99以内的加减乘法运算,并显示在2位LED上。
(2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。
四、方案选择方案一:该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。
方案二:该方案则是将LED 显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。
方案三:该方案则只用一片8255驱动LED 显示和键盘扫描电路。
方案评估:方案一:LED 显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃!方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!)综上所述:采用方案三!五、程序流程图程序总流程图:判断输入流程图:六、系统原理图注:1、复位电路单独画在旁边,其参数设置符合6MHZ。
2、74HC04反相器由于位置不够,本人自己画了一个小型的74HC04。
3、IOW,IOR信号线由于采用了最大系统组态,故由8288的IORC和AIOWC代替。
4、8088的CLK由8284A提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。
6、LED与键盘扫描电路的上拉电阻阻值统一采用4.7K,保证数码管有足够亮度。
7、所有芯片的电源和GND均未标出。
8、7段数码管为共阴极连接方式。
9、74LS373和74LS245作为提高总线驱动能力的作用而存在。
10、8259A的INT信号和8088的INTR信号相连,由于纸张大小问题,用网络标号“INT8259A”表明他们是相连的。
11、CAD图纸见附件。
七、元件清单八、程序源代码PAGE 60,132TITLE Calculator A program to calculate with 8088 and 8255;--------------------------------------------------------DISPLAY MACRO ;送至LED显示函数MOV DX,383H ;控制字寄存器的端口地址(8255)MOV AL,80H ;方式选择字10000000BOUT DX,ALMOV DX,381H ;B端口的地址送DXMOV AL,HIGH_NUM ;段码送至B端口显示OUT DX,ALMOV DX,383HMOV AL,80H ;方式选择字10000000BOUT DX,ALMOV DX,382H ;C端口地址送DXMOV AL,LOW_NUM ;段码送至C端口显示OUT DX,ALJMP Allscan_Key ;显示完成,跳至键盘扫描ENDM;--------------------------------------------------------CALC MACRO ;计算结果并存至HIGH_NUM,LOW_NUM中DIV TEN ;除10取余和商分别显示MOV DX,AX ;保存计算结果CBW ;将商AL符号扩展至AXMOV BX,AXMOV CL,LED[BX]MOV HIGH_NUM,CL ;高位段码送至HIGH_NUM(乘结果)MOV AX,DXXCHG AH,AL ;交换AH和AL,将余数放在AL准备符号扩展CBW ;将余数AL符号扩展至AXMOV BX,AXMOV CH,LED[BX]MOV LOW_NUM,CH ;低位段码送至LOW_NUM(乘结果)ENDM;--------------------------------------------------------.MODEL SMALL ;程序大小为SMALL数据段和代码段均小于64KB.STACK 100 ;堆栈大小100个字.DATA ;数据段KEYTAB DB 0E7H,0D7H,0DBH,0DDH,0B7H,0BBH,0DBH;键盘编码0~9 * + - =DB 77H,7BH,7DH,7EH,0BEH,0DEH,0EEHLED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;LED显示字模(共阴极)OPERAND DB 0 ;用于存放运算符号TEN DB 10NUM1 DB 0 ;用于存放第一个计算数NUM2 DB 0 ;用于存放第二个计算数HIGH_NUM DB 0 ;用于存放结果的高位段码LOW_NUM DB 0 ;用于存放结果的低位段码;--------------------------------------------------------.CODE ;代码段MAIN PROC FAR ;主程序开始MOV AX,@data ;将DS指向DA TAMOV DS,AXAllscan_Key:MOV DX,383H ;控制字寄存器地址的端口地址(8255)MOV AL,80H ;方式控制字10000000BOUT DX,ALMOV DX,380H ;端口A的地址送DXXOR AL,ALOUT DX,AL ;送0,全键盘扫描MOV DX,383HMOV AL,90H ;方式控制字10010000B A输入OUT DX,ALMOV DX,380H ;端口AIN AL,DXAND AL,0FH ;屏蔽掉送回来的AL中的高四位CMP AL,0FHJZ Allscan_Key ;相等说明没有键按下,重新全键盘扫描MOV BX,0MOV AH,7FH ;保存扫描设定初量Scan_key:MOV DX,383HMOV AL,80H ;方式控制字,A输出OUT DX,ALMOV DX,380H ;端口AMOV AL,AH ;逐行扫描OUT DX,ALMOV DX,383HMOV AL,90H ;A输入OUT DX,ALMOV DX,380H ;端口AIN AL,DX ;读按键状态AND AL,0FH ;取数据的低四位CMP AL,0FHJNE DecodeROR AH,1 ;向右循环移位,扫描下一行JMP Allscan_KeyDecode:AND AH,0F0HOR AL,AH ;AL,AH或操作组合编码CMP AL,KEYTAB[BX] ;比较编码JE NextINC BXJMP DecodeNext:CMP BX,13 ;13的偏移量表示编码值为EE,即"=" JE Calc ;检测到"=",计算结果CMP BX,10 ;10的偏移量表示编码值为7E,即"*" JNS Stroe ;比10大,表示按下"*"或"+"或"-"MOV AL,OPERANDCMP AL,0 ;OPERAND若为0,表示为按下运算符号JNE Number ;OPERAND非0,说明按下过运算符号MOV AL,NUM1MUL TEN ;NUM1*10+BLADD AL,BLMOV NUM1,AL ;将第一个运算数保存在NUM1中JMP Allscan_KeyStroe:MOV OPERAND,BL ;按下了运算符号并存入OPERAND中JMP Allscan_KeyNumber:MOV AL,NUM2MUL TEN ;NUM2*10+BLADD AL,BLMOV NUM2,AL ;将第二个运算数保存在NUM2中Calc:CMP BL,10JZ _Mul ;乘法CMP BL,11JZ _Add ;加法CMP BL,12JZ _Sub ;减法_Mul:MOV AL,NUM1MUL NUM2CMP AL,100 ;结果超过99,则显示"E0"JAE OverflowCALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY ;送至LED显示Overflow:MOV HIGH_NUM,79H ;79H为"E"的段码MOV LOW_NUM,3FH ;3FH为"0"的段码JMP Allscan_Key_Add:MOV AL,NUM1ADD AL,NUM2 ;NUM1+NUM2JAE Overflow ;溢出CALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY ;送至LED显示_Sub:MOV AL,NUM1SBB AL,NUM2JC Negtive ;有借位,说明结果为负数CALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY ;送至LED显示Negtive:CMP AL,-9 ;负量超过9了吗?JS Overflow ;超过了,则溢出,显示"E0"MOV HIGH_NUM,40H ;40H为"-"的段码NEG AL ;求补CBW ;AL符号扩展至AXMOV BX,AXMOV CL,LED[BX]MOV LOW_NUM,CL ;低位段码送至LOW_NUMJMP Allscan_Key;--------------------------------------------------------MOV AX,4C00HINT 21HMAIN ENDPEND MAIN九、参考文献[1] 朱定华,《微机原理、汇编与接口技术》清华大学出版社,2005Page:163(8088引脚图)、171(最大系统组态连接方式)、176(最大系统组态时的I/O读写时序图)、221(4x4键盘扫描)、264(8255引脚图)、266~272(方式0输入输出程序例程)。
[2] 张毅刚,《新编MCS-51单片机应用设计(第3版)》哈尔滨工业大学出版社,2003Page:26(按键电平复位电路)[3] 8088pdf 8255pdf8088CLK时钟产生电路由8284产生。
十、心得与体会此次的微机原理课程设计从开始的方案设计,方案选择,到原理图的设计,原理图的绘制,再到最后的接口程序编写只用了两天的时间。