简易计算器设计
简易计算器的课程设计

简易计算器的课程设计一、课程目标知识目标:1. 学生能理解简易计算器的内部工作原理,掌握其基本功能操作。
2. 学生能运用计算器进行基本的算术运算,包括加、减、乘、除以及百分比计算。
3. 学生理解并掌握计算器上各个按键的功能及其在数学运算中的应用。
技能目标:1. 学生能够使用计算器辅助解决实际问题,如购物找零、面积计算等。
2. 学生通过计算器的使用,提高数据输入、结果读取和运算过程纠错的能力。
3. 学生能够结合数学知识,利用计算器进行数据的简单统计分析。
情感态度价值观目标:1. 培养学生对待科学技术的积极态度,认识到计算器在日常生活和学习中的便捷性。
2. 增强学生的团队协作意识,通过小组活动,学会分享和交流使用计算器的经验。
3. 培养学生遵守计算器使用的规则,养成良好的计算器使用习惯,珍惜公共资源。
本课程设计针对的学生群体为小学高年级学生,他们已经具备了一定的数学基础和操作简单电子设备的能力。
课程性质为实用技能型,旨在通过简易计算器的教学,将理论知识与实践操作相结合,提高学生解决实际问题的能力。
在教学要求上,注重培养学生的动手操作能力和创新思维,同时强调情感态度的培养,使学生在学习技能的同时,也能形成正确的价值观。
通过具体学习成果的分解,教师可进行有针对性的教学设计和学习效果评估。
二、教学内容本章节教学内容依据课程目标,结合教材内容,科学系统地组织以下部分:1. 简易计算器基础知识:介绍计算器的发展历程、种类及简易计算器的结构组成,对应教材第二章第一节。
2. 计算器按键功能:详细讲解各按键的功能及其在数学运算中的应用,对应教材第二章第二节。
3. 基本运算操作:教授如何使用计算器进行加、减、乘、除以及百分比计算,对应教材第二章第三节。
4. 计算器在实际应用中的使用:结合实际案例,如购物找零、面积计算等,展示计算器的实用性,对应教材第二章第四节。
5. 数据的简单统计分析:利用计算器进行数据输入、处理和简单统计分析,对应教材第二章第五节。
简易计算器设计的课程设计

简易计算器设计的课程设计一、课程目标知识目标:1. 学生能够理解简易计算器的基本原理,掌握其设计流程。
2. 学生能够运用所学编程知识,实现简易计算器的功能。
3. 学生能够了解并掌握计算器界面设计的基本原则。
技能目标:1. 学生能够运用所学的编程技能,独立完成简易计算器的设计与开发。
2. 学生能够通过编写代码,实现计算器的加、减、乘、除等基本运算功能。
3. 学生能够运用调试工具,对计算器程序进行测试和优化。
情感态度价值观目标:1. 学生在课程学习中,培养对编程的兴趣和热情,增强信息素养。
2. 学生通过团队协作,培养沟通能力和团队精神,学会共同解决问题。
3. 学生在设计与开发简易计算器的过程中,体验创新实践的过程,培养创新思维和动手能力。
课程性质:本课程为信息技术课程,旨在帮助学生将所学的编程知识运用到实际项目中,提高学生的编程实践能力和创新能力。
学生特点:六年级学生具备一定的编程基础,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,强调动手实践,培养创新思维。
在教学过程中,关注学生的个体差异,鼓励学生相互交流、合作,共同完成学习任务。
通过本课程的学习,使学生能够将所学知识运用到实际项目中,提高解决问题的能力。
二、教学内容1. 计算器原理:介绍计算器的基本工作原理,包括算术运算逻辑、数据存储与处理等。
教材章节:第三章 计算机硬件基础2. 编程语言基础:回顾所学的编程语言(如Python),重点掌握变量定义、数据类型、运算符、条件语句和循环语句等。
教材章节:第二章 编程语言基础3. 界面设计:讲解计算器界面设计的原则和技巧,如布局、颜色、字体等。
教材章节:第四章 用户界面设计4. 编程实现计算器功能:引导学生运用所学知识,编写程序实现计算器的加、减、乘、除等基本运算功能。
教材章节:第五章 算法与程序设计5. 程序调试与优化:教授学生如何使用调试工具,对计算器程序进行测试、调试和优化。
单片机的简易计算器毕业设计

单片机的简易计算器毕业设计简易计算器是一种基本、常见的电子设备,它能够对数字进行简单的加减乘除运算。
单片机作为一种小型、低功耗的微型计算机,非常适合用于设计和实现计算器的功能。
在本文中,我们将以单片机为基础,设计和实现一个简易计算器。
一、设计思路1.硬件设计:-使用单片机作为主控制器。
-接入键盘矩阵和显示器。
-使用LED灯作为指示灯,用于显示运算符和结果。
2.软件设计:-通过键盘输入数字和运算符。
-将输入的数字和运算符转换成相应的控制信号。
-进行运算,并将结果显示在屏幕上。
3.功能实现:-实现加法、减法、乘法和除法运算。
-提供清零、退格和等号等功能。
-支持小数和负数的输入和运算。
-提供错误提示功能,例如除数不能为零等。
二、具体实现1.硬件实现:-将键盘矩阵的行和列与单片机的IO口相连,通过扫描来检测按键的输入。
-将显示器与单片机的IO口相连,通过控制引脚来发送和接收数据。
-将LED灯与单片机的IO口相连,设置相应的引脚状态来显示不同的指示信号。
2.软件实现:-使用C语言编写程序,通过中断和轮询的方式,实现键盘输入的检测和数据的读取。
-将读取到的数据进行解析,并根据不同的按键进行相应的操作。
-根据输入的数字和运算符,进行相应的运算并输出结果。
3.功能实现:-加法、减法、乘法和除法运算可以通过相应的算法实现,例如加法可以通过循环和位运算来实现。
-清零功能可以将运算结果和输入的数字都清零,退格功能可以删除输入的最后一个数字或运算符。
-支持小数运算可以在运算过程中进行进位和进位操作,支持负数运算可以通过判断运算符来进行相应的处理。
-错误提示功能可以通过对输入的数据进行检查和判断来实现,例如判断除数是否为零。
三、总结通过上述的设计和实现,我们可以成功地设计和制作一个单片机的简易计算器。
通过这个计算器,用户可以进行简单的加减乘除运算,同时还具备清零、退格、小数和负数等功能。
这个计算器可以应用在日常生活中的计算场景,方便用户进行各种简单的运算操作。
单片机简易计算器设计

单片机简易计算器设计一、引言:计算器是一种用于进行数学运算的工具,可以提供基本的算术运算功能。
单片机是一种集成电路,具有微处理器、存储器、计数器和输入/输出接口等功能,适合用于设计和实现计算器。
本篇文章将介绍如何设计和实现一款基于单片机的简易计算器。
二、设计目标:本文设计的简易计算器具有以下功能:1.能够进行四则运算,包括加法、减法、乘法和除法;2.具有输入和输出功能,可以输入运算表达式,并输出计算结果;3.采用简单直观的按键输入方式,便于用户操作。
三、设计原理:1.系统框图:```_______________输入/输接口I______________\/_______________单片机芯(CPU______________```2.硬件设计:使用单片机来处理计算表达式和输出计算结果。
输入/输出接口IC负责处理用户输入和显示输出。
单片机芯片是整个计算器系统的核心,负责执行算术运算的逻辑。
3.软件设计:(1)初始化:设置单片机芯片工作环境,包括引脚配置、定时器设置等。
(2)输入处理:使用按键输入方式获取用户输入的数值和运算符,按下等号键时开始计算。
(3)运算处理:根据输入的数值和运算符进行相应的运算操作,得出计算结果。
(4)输出显示:将计算结果输出到显示装置上。
四、实现步骤:1.硬件实现:根据设计原理中的系统框图,采购和连接合适的输入/输出接口IC以及单片机芯片。
2.软件编程:(1)初始化:根据单片机芯片的型号和文档,编写初始化程序,包括引脚配置、定时器设置等。
(2)输入处理:编写输入处理程序,包括按键输入方式、数值和运算符的提取等。
(3)运算处理:编写运算处理程序,根据输入的数值和运算符,实现相应的运算逻辑。
(4)输出显示:编写输出显示程序,将计算结果输出到显示装置上。
3.实验验证:将硬件和软件进行调试和验证,确保计算器可以正常工作并满足设计目标。
4.优化改进:根据实验结果,对计算器进行优化和改进,提升计算器的性能和用户体验。
基于51单片机的简易计算器设计

基于51单片机的简易计算器设计基于51单片机的简易计算器设计一、引言随着微电子技术和嵌入式技术的发展,越来越多的智能化设备被应用于日常生活中。
其中,基于51单片机的简易计算器设计具有广泛的应用价值。
本文将介绍如何使用51单片机设计一个简易计算器,实现加减乘除的基本运算功能。
二、设计方案1.硬件组成:本设计采用51单片机作为主控芯片,与键盘、显示器等外围设备相连。
键盘用于输入数字和运算符,显示器则用于显示运算结果。
2.软件设计:软件部分包括主程序和子程序。
主程序负责初始化硬件、读取键盘输入和显示运算结果。
子程序包括加减乘除的运算子程序,可根据输入的运算符和操作数进行相应的运算。
3.算法实现:在加减乘除的运算子程序中,采用基本的数学运算方法实现。
对于加法,直接将两个操作数相加;对于减法,将两个操作数相减;对于乘法,采用循环相乘的方法;对于除法,采用循环相除的方法。
三、实验结果在实验中,我们成功地使用51单片机设计了一个简易计算器,实现了加减乘除的基本运算功能。
在测试过程中,我们输入了不同的数字和运算符,得到了正确的运算结果。
同时,我们也测试了计算器的稳定性,发现其在连续运算时表现良好,没有出现明显的误差或故障。
四、结论基于51单片机的简易计算器设计具有简单易行、实用性强等优点。
通过实验测试,我们验证了其可行性和稳定性。
此外,该设计还可以根据需要进行扩展和优化,例如增加更多的运算功能、优化算法等。
未来,我们可以进一步研究如何提高计算器的运算速度和精度,以及如何将其应用于更多的实际应用场景中。
五、改进意见与展望1.增加更多的运算功能:例如实现括号、开方、指数等高级运算,满足更复杂的数学计算需求。
2.优化算法:针对现有的加减乘除运算算法进行优化,提高运算速度和精度。
例如采用更高效的除法算法,减少运算时间。
3.增加存储功能:在计算器中加入存储单元,使得用户可以在多个步骤之间进行数据传递和保存。
4.增强人机交互界面:优化显示器的显示效果,增加用户输入的便捷性,提高用户体验。
简易计算器课程设计

山东大学控制科学与工程学院课程设计报告书课程设计名称:简易计算器班级:测控一班学号: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.需求分析:-定义计算器的功能-确定计算器支持的数学运算,如加法、减法、乘法、除法等2.用户界面设计:-设计计算器的界面布局,包括数字按键、运算符按键、等号按键等-考虑使用框架或库来构建用户界面3.输入处理:-设计解析用户输入的算式-处理用户点击按键时的输入4.运算处理:-实现各种数学运算的算法-将用户输入的算式传入运算处理函数进行计算5.显示结果:-将计算结果显示在计算器的界面上下面是一个简易计算器的实现示例,使用Python语言和PyQt库来构建:```pythonimport sysfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QGridLayout, QPushButton, QLineEdit class Calculator(QWidget):def __init__(self):super(.__init__self.setWindowTitle("简易计算器")yout = QVBoxLayoutself.input_box = QLineEdityout.addWidget(self.input_box)self.buttons =['7','8','9','/'],['4','5','6','*'],['1','2','3','-'],['0','.','=','+']self.grid_layout = QGridLayoutfor i in range(4):for j in range(4):button = QPushButton(self.buttons[i][j])button.clicked.connect(self.button_clicked)self.grid_layout.addWidget(button, i, j)yout.addLayout(self.grid_layout)self.setLayout(yout)self.equal_clicked = Falsedef button_clicked(self):button = self.sendertext = button.textif text == '=':self.calculateelse:self.input_box.setText(self.input_box.text( + text) def calculate(self):expression = self.input_box.texttry:result = eval(expression)self.input_box.setText(str(result))except Exception as e:self.input_box.setText("错误:{}".format(e))if __name__ == '__main__': app = QApplication(sys.argv) calculator = Calculator calculator.showsys.exit(app.exec_()。
简易计算器的设计

学号:课程设计题目简易计算器的设计学院自动化专业电气工程及其自动化班级姓名指导教师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显示出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动化控制系统及装置综合实习控制系统及装置综合实习实习报告学院: XX学院专业: XXX姓名: XX学号: XXXXXXX指导教师: XXX二〇一一年九月十六日目录1.实习课题任务 (3)1.1课题:简易计算器的设计 (3)1.2设计、实习要求 (3)2.课题任务方案 (3)3.硬件部分: (4)3.1电路的整体设计 (4)3.2单元电路设计 (5)3.2.1 单片机部分 (5)3.2.2输入单元 (8)3.2.3显示单元 (9)4.软件部分 (9)4.1LED显示程序 (9)4.2读键输入程序 (10)4.3运算主程序的设计 (12)5.实习中出现的问题 (13)6.实习感想 (13)1. 实习课题任务1.1 课题:简易计算器的设计 1.2 设计要求:根据功能和指标要求,本系统选用80C51单片机为主控机实现对计算器的设计。
可以进行两位数的加、减、乘、除,可连续运算。
当键入值大于99时,将自动清零,可以重新输入。
按“+”、“-”、“×”号可以进行操作数的相应运算,减法中运算结果为“-”时,“-”号要跟着结果。
2. 课题任务方案本次设计使用单片机来完成两位数以内简易计算器。
本设计以AT80C51为单片机,P2口作为输入端外接4*4键盘,通过键盘扫描确定输入数字。
在P0口、P1口接驱动电路,用以保证LED 数码管工作正常。
计算器将完成的功能有两位数以内加、减、乘、除功能。
整体框图如下:在设计过程中,先着手编写主程序,再根据需要设计从属程序和子程序,逐层细化最终完成一个复杂程序的设计。
程序流图如下所示:单 片 机输入单元运算单元显 示 单 元3. 硬件部分:3.1电路的整体设计电路的整体原理图及PCB 图如图所示:启动LED 显示初始值键盘输入数字LED 显示数字键盘输入功能键盘输入数字LED 显示数字键盘输入功能键LED 显示计算结果是否继续运算?结束键盘输入“CE ”是否3.2单元电路设计3.2.1 单片机部分:AT80C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即CPU、RAM、ROM/EPROM、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能计数器。
如下图所示:80C51有40引脚双列直插(DIP)和44引脚(QFP)封装形式。
上图为引脚配置:40个引脚中,正电源和地线两根,外置石英振荡的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
如前要求,单片机P0、P1送显示,P0扫描键盘,运算结果经显示器驱动器由LED 数码管显示。
由于运算用到单片机内ROM,故EA/=1,即31脚送高电平。
另外XTAL1和XTAL2之间接晶振,RES端接复位电路,VCC接高电平GND接地,其余未提及的管脚可悬空。
a. 复位电路RST为复位输入信号,高电平有效。
在振荡器工作时,在RST上作用两个机器周期以上的高电平,将单片机复位。
复位电路如所示:b. XTAL1和XTAL2当使用芯片内部时钟时,这两根引线用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
如图所示:其他引脚介绍c. P0.0~P0.7P0.0~P0.7 是P0口8位双向口线。
P0口是漏极开路的双向I/O口,当使用片外存储器(ROM及RAM)及外部I/O接口时,作地址和数据总线分时复用。
P0口(作为总线时)能驱动8个LSTTL负载,作一般 I/O口用时需外加上拉电阻。
d. P1.0~P1.7P1.0~P1.7是P1口的8位双向口线。
P1口是准双向I/O口,具有内部上拉电阻。
在编程/校验期间,用做输入低位字节地址。
P1口可以驱动4个LSTTL负载。
e. P2.0~P2.7P2.0~P2.7是P2口的8位双向口线。
P2口也是准双向I/O口,具有内部上拉电阻。
当使用片外存储器(ROM及RAM)及外部I/O接口时,输出高8位地址。
P2口可以驱动4个LSTTL负载。
f. P3.0~P3.7:双功能口第一功能作为通用I/O 口使用,P3.0~P3.7是P3口的8位双向口线。
P3口也是准双向I/O 口,具有内部上拉电阻,P3口可以驱动4个LSTTL 负载。
P3口线还有第二功能,具体定义如下: P3.0——RXD (串行输入口),输入。
P3.1——TXD (串行输出口),输出。
P3.2——(外部中断0),输入。
P3.3——(外部中断1),输入。
P3.4——T0(定时器0外部输入),输入。
P3.5——T1(定时器1外部输入),输入。
P3.6—— (片外数据存储器及I/O 接口写选通),低电平有效。
P3.7—— (片外数据存储器及I/O 接口读选通),低电平有效。
g. PROG ALE /PROG ALE /是地址锁存允许信号。
在系统扩展时,ALE 用于将P0口输出的低8位地址锁存到外部地址锁存器,以实现P0口低位地址和数据的分时复用。
此外在不访问外部存储器时,ALE 是以晶振频率的1/6的固定频率输出正脉冲,故它也可以作为外部时钟源或外部定时脉冲源使用。
第二功能PROG 是对80C51单片机编程时作为编程脉冲的输入端。
ALE 可以驱动8个LSTTL 负载。
h. PSENPSEN 是片外程序存储器选通信号,低电平有效。
在从片外程序存储器取指期间,在每个机器周期中,当有效时,程序存储器的内容被送上P0口(数据总线)。
可以驱动8个LSTTL 负载。
i. PP V EA /PP V EA /是访问外部程序存储器选通信号。
当其为低电平时,对ROM 的读操作限定为外部存储器;当其为高电平时,对ROM 的读操作是从内部开始的,当PC 值大于内部程序存储器地址范围时,CPU 自动转向读外部程序存储器。
第二功能VPP 用于编程时接入21V 或12V 的编程电压。
j. VCC 和GNDVCC 在运行和程序校验时加+5 V 。
GND 接地。
74LS245芯片介绍:74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。
3.2.2输入单元键盘是一组按键的集合,它是最常用的单片机输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。
键是一种常开型按钮开关,平时键的二个触点处于断开状态,按下键时它们才闭合。
矩阵键盘的按键设置在行、列线的交点上,行、列线分别连接到按键开关的两端。
列线通过上拉电阻接到+5V。
平时无按键动作时,列线处于高电平状态,而当由按键按下时,列线电平状态将由与此列线相连的行线电平决定。
行线电平如果为低,则列线电平为低;行线电平如果为高,则列线电平亦为高。
这一点是识别矩阵键盘按键是否被按下的关键所在。
3.2.3显示单元LED 数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp 来表示。
封装图如下:4. 软件部分:4.1 LED 显示程序:开始初始化显示取数据输出段码输出位选通信延时位选通信号移指向下一个数位 完 成否显示子程序如下:;动态显示子程序DIR:MOV DPTR,#TAB ; 数码管译码表首址MOV R0,#78H ;待显缓冲区个位地址MOV A,#0FEH ; 个位位选信号MOV R1,ALD1:MOV A,@R0MOVC A,@A+DPTR ;查表MOV P2,R1 ;共阳极管字位选择送到P2口MOV P0,A ;字段码送P0口LCALL DELAY1ms ;调延时1ms 子程序INC R0 ;R0指向下一模块MOV A,R1 ;JNB ACC.5,LD2 ;判断是否发完6个数RL A ;指向下一个位MOV R1,A ;位选信号存回R3SJMP LD1 ;跳去再显示下一个数LD2:RET ;发完6个数就返回TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,90H,0FFH ;共阳极译码表DELAY1ms:MOV R6,#2LOOP1:MOV R7,#248NOPLOOP2:DJNZ R7,LOOP2DJNZ R6,LOOP1RET4.2读键输入程序:开始初始化地址参数输出列扫描信号列扫描信号移位读入行信号该列有键输入? 四列扫描完? 按照行列计算键值查表得键码等待按键释放否是否为了实现键码的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用扫描法识别按键。
列扫描信号进行读入行的信号判断该列是否有列的输出——是则进行按照行列计算键盘的值,查表取得键码并返回——若否则进行再次扫描。
程序框图如下:读键子程序如下:KEY:LCALL KS ;调用检测按键子程序JNZ K1 ;有键按下继续LCALL DELAY2 ;无键按调用延时去抖ACALL DIR ;调用动态显示AJMP KEY ;返回继续检测按键K1:LCALL DELAY2 ;有键按下延时去抖动LCALL KS ;再调用检测按腱子程序JNZ K2 ;确认有按键进行下一步ACALL DIR ;调用动态显示AJMP KEY ;无键按下返回继续检测K2:MOV R2,#0EFH ;将扫描值送入R2暂存MOV R3,#00H ;将第一列值送入R3暂存K3:MOV P1,R2 ;将R2值送入P1口L0:JB P1.0,L1 ;P1.0等于1跳转到L1MOV A,#00H ;将第一行值送入ACCAJMP LK ;跳转到键值处理程序L1:JB P1.1,L2 ;P1.1等于1跳转到L2MOV A,#04H ;将第二行的行值送入ACCAJMP LK ;跳转到键值处理程序L2:JB P1.2,L3 ;P1.2等于1跳转到L3MOV A,#08H ;将第三行行值送入ACCAJMP LK ;跳转到键值处理程序L3:JB P1.3,NEXT ;P1.3等于1跳转到NEXT处MOV A,#0CH ;将第四行行值送入ACCLK:ADD A,R3 ;行值与列值相加后的键值送入APUSH ACC ;将A中的值送入堆栈暂存K4:LCALL DELAY2 ;调用延时去抖程序LCALL KS ;调用按键检测程序JNZ K4 ;按键没有松开继续返回检测POP ACC ;将堆栈值送入ACCMOV DPTR,#KEYTABMOVC A,@A+DPTRRETNEXT:INC R3 ;列值加一MOV A,R2 ;R2值送入AJNB ACC.7,KEY ;扫描完至KEY 处进行下一扫描RL A ;扫描未完将值左移一位进行下一列扫描MOV R2,A ;将ACC 值送入R2暂存AJMP K3 ;跳转到K3继续KS:MOV P1,#0FH ;将P1口高四位置0低四位置1MOV A,P1 ;读P1口XRL A,#0FH ;将A 中的值与A 中的值相异或RET ;子程序返回KEYTAB:DB 1,2,3,10,4,5,6,11,7,8,9,12,15,0,14,13 ;键值表DELAY2:MOV R6,#2H ;延时去抖动子程序LP1:MOV R7,#0FAHLP2:DJNZ R7,LP2DJNZ R6,LP1RET4.3运算主程序的设计:首先初始化参数,送LED 低位显示“0”,高位不显示。