模拟计算器

合集下载

模拟电子计算器

模拟电子计算器

MAX232CPE(带座)
U3
dip16
12M
Y1
XTAL1
数量 4 2 4 2 2 1 2 2 1
17
2 1 1 1 9 4 8 1 9 1 1 1 1 1
10K 贴片
R14, R15, R16, R17, R18, R19, R20, R21, R22
CC0.200 IDCD9 TO92 0805 0805 AXIAL0.35 0805
自锁按键
SW1
K_DIP6
L7805
U1
TO-220-0
AT89S52/STC89C52(带座) U2
ZIF40 -1
VCC 1
2
Q1
A LS1 B
VCC C4
RST
KR1
C5
R13
R14
VCC
ISP1
MOSI VCC
1 2
3
RST
4 5
SCK
6 7
MISO
8 9
10
CY1 CY2
2
1
U2
P10 RR1 1 P11 RR2 2 P12 RR3 3 P13 RR4 4 P14 CR1 5 MOSI CR2 6 MISO CR3 7 SCK CR4 8
模拟电子计算器元件清单
名称 0.1U 10U 4.7uF 30P 1N4007
C1, C2, C4, C8 C3, C5 C6, C7, C9, C10 CY1, CY2 D1, D2
代号
宏封装 RC_C0805 CD0.1-0.180 CD0.1-0.180 cc0.100 DIODE0.315
带座串口头 共阳数码管 10 脚简牛座 DC 电源座

模拟计算器

模拟计算器

摘要计算器是微型计算机的一种特殊类型,它与一般通用计算机的主要区别在于程序输入的方式不同计算机的程序一般都已经固定,只需按键输入数据和运算符号就会得出结果,很容易就能掌握。

而一般计算机的程序可以根据需要随时改动,或重新输入新的程序。

简易计算器主要用于加减乘除。

科学计算器,又增添了初等函数运算(有的还带有数据总加、求平均值等统计运算)。

现代电子计算器首次问世是1963年。

那时的计算器是台式的,在美国波士顿的电子博览会上展出过。

与计算机相比,它小巧玲珑,计算迅捷,一般问题不必事先编写复杂的程序。

随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大电路、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。

随着社会需求,计算器也从原有单一的数字加减计算演变为复杂的多种计算。

现在不再单一的在某一方面,而是涉及到生活的方方面面。

本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果数码管上显示出来数据和结果,能够实现个位数的四则运算。

本设计是用单片机STC89C52来控制,采用共阳极数码管显示,软件部分是由C语言来编写的。

关键词STC89C52 计算器显示器单片机目录第一章绪论1.1 课题研究的可行性当今时代,是一个新技术层出不穷的时代。

在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。

模拟计算器实验报告

模拟计算器实验报告

课程设计报告课程设计题目:模拟机算器程序学生姓名:柯尊国专业:网络工程班级:1021130321指导教师:高永平、姜林2011年11 月27 日东华理工大学课程设计评分表学生姓名:柯尊国班级:10211303 学号:21课程设计题目:模拟机算器程序项目内容满分实评选题能结合所学课程知识、有一定的能力训练。

符合选题要求(5人一题)10 工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10 能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。

10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。

格式、绘图、表格、插图等规范准确,符合国家标准10 有一定篇幅,字符数不少于5000 10总分100指导教师评语:指导教师签名:年月日目录一. 课程设计题目..................................................................................二. 问题分析1.算法分析.....................................................................2.流程图........................................................................三. 算法设计1.算法描述.....................................................................2.系统类图.....................................................................3.属性和方法定义..............................................................四. 运行实例................................................................................五. 经验与体会................................................................................六. 参考文献................................................................................ 七.源代码................................................................................一:课程设计题目模拟计算器程序问题描述设计一个程序来模拟一个简单的手持计算器。

上海市居住证积分模拟打分计算器

上海市居住证积分模拟打分计算器

上海市居住证积分模拟打分计算器综述上海市居住证积分制度自2016年开始实施,旨在吸引具有创新创业、高学历、高技能、高层次人才、重点高端人才等特定条件的人员来沪居住。

该积分制度根据申请人的个人条件及贡献程度综合评分来确定是否符合居住证申请条件。

本文将介绍上海市居住证积分模拟打分计算器的用途、使用方法以及注意事项。

一、用途上海市居住证积分模拟打分计算器可帮助申请人在真实申请前对其符合条件的情况进行预估和评估。

通过输入个人信息和条件,计算器将根据上海市居住证政策指标进行打分,并对申请人是否具备申请居住证的资格进行初步判断。

二、使用方法1. 打开上海市居住证积分模拟打分计算器。

2. 依次填写个人信息和条件。

这些条件通常包括工作年限、年龄、学历、户籍、年收入、专业技能、创新创业和社会责任等。

3. 仔细核对填写的信息是否正确,确保准确性和完整性。

4. 单击“计算”按钮,计算器将根据填写的信息和各项条件进行打分。

5. 结果将以积分的形式显示出来。

根据上海市居住证政策规定的积分标准,申请人将能够大致了解自己是否符合居住证申请的条件。

三、注意事项1. 本计算器仅提供模拟计算功能,结果仅供参考。

最终的居住证申请仍需根据上海市居住证政策实际规定以及有关部门的审核结果来确定。

2. 完整填写个人信息和条件,确保准确性和完整性。

填写不准确或遗漏的信息将导致计算结果的出错。

3. 本计算器仅提供初步预估和评估的功能,申请人若需要准确的积分计算和申请指导,建议咨询专业机构或相关部门。

4. 上海市居住证政策随时可能进行调整和更新,申请人在使用计算器前应先了解最新政策规定,以避免违规或无效的申请。

5. 积分仅作为判断条件之一,是否能够获得上海市居住证还需综合考虑其他因素,如人才需求、申请额度等。

结论上海市居住证积分模拟打分计算器为申请人提供了一个便捷的工具,帮助其在申请前初步了解自己是否具备申请居住证的条件。

然而,申请人需要注意计算器的局限性,如仅提供初步预估、积分仅作为判断条件之一等。

7-11模拟电子计算器

7-11模拟电子计算器

模拟电子计算器功能简介:简易电子计算器输入按键为4*4矩阵键盘,显示为8位数码管。

只可输入正数,可连续计算,计算结果只能是整数。

输入大于4位报警,发光二极管作为按键输入提示。

计算结果最大32767,最小-32768,超过计算范围计算结果溢出。

1、电源电路(1)电源电路电源电路采用集成稳压器L7805三端稳压电路,三条引脚输出,分别是输入端、接地端和输出端,它的1、3角接整流二极管IN4007主要是因为IN4007能承受很大的反向电流对整个电源起到保护作用,C1 、C2分别是输入和输出端滤波电容。

(2)采用L7805优点该系列集成稳压IC型号中的78后面的数字代表该三端集成稳压电路的输出电压,如7805表示输出电压为正5V。

三端稳压器件来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。

引脚号标注方法是按照引脚电位从高到底的顺序标注的。

这样标注便于记忆。

引脚①为最高电位,②脚为最低电位,不论正压还是负压,③脚均为输出端。

2、显示电路:显示电路主要由数码管及段码限流电阻R5~R12和位选驱动电路组成,数码管为四位一体共阳数码管,为动态扫面显示。

位选驱动为PNP型三极管驱动。

单片机给基极低电平三极管导通,对应的数码管选通供电,显示内容取决于段码的内容。

3、串口通讯电路串口通讯用MAX232实现TTL电平和PC电平之间的转换。

其中C8电容为退耦电容,C6、C7、C9、C10电容构成电荷泵电路,功能为产生+12V和—12V两个电源。

4、键盘输入电路简易电子计算器输入按键为4*4矩阵键盘。

共用八个IO端口,四个行扫描和四个列扫描,完成16按键的识别与输入。

5、单片机处理电路单片机电路包括复位电路,时钟电路和中央处理器电路组成,复位电路为上电复位及手动复位。

工作原理为系统刚上电时,由于电容两端的电压不能突变电容C5可以近似看成短路状态,这时RST端电压为Urst=(R14/(R13+R14))*Vcc为高电平,电容C5通过电阻R13及R14不断充电,当C5充满电时RST为低电平,单片机完成上电复位过程。

数据结构实验报告总结

数据结构实验报告总结

数据结构实验报告总结设计题目:模拟计算器程序学生姓名:谢先斌系别:计算机与通信工程学院专业:计算机科学与技术班级:1班学号:541007010144指导教师:卢冰李晔XX 年 6 月 21 日郑州轻工业学院课程设计任务书题目模拟计算器程序专业、班级计算机科学与技术10-01班学号541007010144 姓名谢先斌主要内容:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。

基本要求:要检查有关运算的条件,并对错误的条件产生报警。

主要参考资料:严蔚敏吴伟民编著《数据结构(C语言版)》清华大学出版社第44页栈、第52页表达式求值完成期限: XX年6月21日指导教师签名:课程负责人签名:XX年 6月 21 日一、设计题目模拟计算器的程序设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。

设计要求:要检查有关运算的条件,并对错误的条件产生报警。

二、算法设计的思想本程序设计主要是应用了栈,利用栈的“先进后出”原理,建立了两个栈,分别为运算符栈pOStack和运算数栈pDStack。

算法的基本思想(参考课本p53页)是:(1) 首先置操作数栈为pDStack空栈,表达式起始符为“=”,位运算符栈的栈底元素;(2) 依次读入表达式中的每个字符,若是操作数则进入pDStack栈,若是运算符则和pOStack栈的栈定运算符比较优先权后作相应操作,直到整个表达式求值完毕(即pOStack栈的栈定元素和当前读入的字符均为“=” )。

三、算法的流程图本程序的流程如下附图1所示:附图1 程序流程图四、算法设计分析首先创建了两个栈:typedef struct OPStack //定义运算符栈{char opStack;int top;}OPStack, *pOPStack;typedef struct DATAStack //定义运算数栈{double stack;int top;}DATAStack, *pDATAStack;来分别存放运算符和运算数。

模拟量计算器公式

模拟量计算器公式

模拟量计算器公式
模拟量计算器的公式是根据具体的应用场景和要求而定的,因此没有一个通用的公式。

模拟量计算器一般是用来将输入的模拟信号进行处理、转换或运算,最终得到特定的输出结果。

以下是几个常见的模拟量计算器的公式示例:
1. 模拟量输入信号的线性缩放计算公式:
输出值= (输入值- 输入范围下限) * (输出范围上限- 输出范围下限) / (输入范围上限- 输入范围下限) + 输出范围下限
2. 温度转换公式(例如将摄氏度转换为华氏度):
华氏度= 摄氏度* 1.8 + 32
3. 电压-电流转换公式(例如将电压转换为电流):
电流= 电压/ 电阻
这些公式只是一些常见的示例,实际应用中可能会有更加复杂的计算公式,需要根据具体的情况和要求来确定。

在设计和使用模拟量计算器时,建议参考相关的技术文档、规格说明或咨询相关领域的专业人士,以确保正确地选择和应用适合的计算公式。

virtuoso calculator 导数

virtuoso calculator 导数

virtuoso calculator 导数
virtuoso calculator是一种通过计算机软件模拟的计算器,可以执行各种计算任务,包括简单的加减乘除运算、复杂的科学计算、统计分析等。

它具有很多优点,首先,可以提供高精度的计算结果,避免了人工计算的误差;其次,可以提供多种运算模式和功能,例如,可以进行向量和矩阵计算、解方程、绘制图形等,方便了各种学科的科学研究和工程应用;此外,还可以存储和检索计算结果,方便用户查询和复用。

使用时,用户只需在计算机上安装相应的计算器软件,然后就可以使用鼠标和键盘进行计算输入,并即时获得计算结果。

而且,虚拟计算器的界面通常设计得直观易用,用户可以轻松找到所需的功能和按钮。

虚拟计算器在教育和工作中有广泛的应用,可以帮助学生更好地理解和掌握数学和科学概念,提高他们的计算能力和问题解决能力;也可以提高工作效率,节省时间和精力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能仪器仪表课程设计报告摘要 (3)关键词 (3)说明 (3)一.设计功能及工具 (4)1.1设计功能 (4)1.2单片机AT89C51简介 (4)1.3 LED数码显示管简介 (7)1.4输入设备键盘 (7)二.电路设计 (8)2.1时钟电路 (8)2.2复位电路 (9)2.3显示驱动电路 (9)2.4蜂鸣器提示电路 (10)2.5总电路原理图 (10)三.C设计和运行 (12)3.1 C程序代码 (12)3.2 Keil C调试运行 (18)3.3 Proteus 操作运行 (19)四.Proteus 仿真演示 (20)4.1加法演示 (20)4.2减法演示 (21)4.3乘法演示 (22)4.4除法演示 (23)五.总结 (24)参考文献 (24)摘要本设计一简易的模拟计算器程序,实现基本的加减乘除的运算并将结果显示在相应的LED上,且在数字信息输入完毕时有声音提示。

此次设计利用proteus 7 professional 软件绘制电路原理图,在Keil C平台上实现C语言程序编制,最后联立proteus和Keil C实现仿真设计成果。

采用了4X4矩阵式键盘输入,8位LED动态显示,避免了I/O口扩展使程序简化。

利用的AT89C51单片机,八个引脚用来扫描键盘的输入,八个引脚用来驱动八位LED显示,八个引脚用作八位LED的位选信号。

当显示器输出大于八位时,可在剩下的I/O口中任意选一个用来使扬声器发出声音警报。

关键词:AT89C51 、计算器、proteus、Keil C说明本次模拟计算器程序小组共2人:耿莎莎(我)和黄洁雯。

其中,我主要负责Proteus 和Keil C软件的下载并学习用法;利用Proteus绘制电路原理图;成功无错误地运行C程序并联立Proteus仿真计算器成果。

鉴于程序运行无错误无警告,然而仿真徒有信号无法输入显示,遂求教于指导老师,以期发现并改正按键键盘输入程序来使仿真成果实现。

一.设计功能及工具1.1设计功能1.计算器最多只能显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位不显示。

2.具有4X4键盘,分别表示0~9、+、-、×、/、=和清零键CL,输入的数字从设计的键盘输入。

3.可以对计算结果小于256的两个无符号数进行加、减、乘、除运算,并显示计算结果。

4.结果溢出时发出“嘀”警报声。

1.2单片机AT89C51简介图1-1 AT89C51 元件图芯片AT89C51的外形结构和引脚图如所示。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性:8051 CPU与MCS-51 兼容4K字节可编程FLASH存储器(寿命:1000写/擦循环)全静态工作:0Hz-24KHz三级程序存储器保密锁定128*8位内部RAM32条可编程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.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE输出可在SFR8EH 地址上置0。

此时, ALE只有在执行MOVX,MOVC指令时才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出引脚。

1.3LED数码显示管简介LED,发光二极管,是一种固态半导体器件,它可以直接把电转化为光。

LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源正极,使整个晶片被环氧树脂封装起来。

半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N性半导体,在这边主要是电子。

但这两种半导体连接起来的时候,它们之间就形成一个“P-N”结。

当电流通过导线作用于这个晶片的时候,电子就被推向P区,在P区里空穴与电子复合,然后就会以光子的形式发出能量,这就是LED发光的原理。

而光的波长也就是光的颜色,是由形成P-N结的材料决定的。

LED的内在特征决定了它是最理想的光源去代替传统的光源,它有着广泛的用途。

七段LED有7个发光二极管按“日”字形排列,所有二极管的阴极或阳极连在一起。

当某个发光二极管的阴极接低电平或阳极接高电平时,对应二极管点亮,根据不同的组合,形成不同的字符0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。

LED具有动态和静态显示之分。

动态是一个字位一个字位各只LED轮流点亮,由于每个字位停留小于人的视觉,就好像LED是点亮的。

LCD显示器有分段式和点阵式两种结构。

LCD是一种被动显示器,由于它的功耗极低,抗干扰能力强,因而在低功耗的单片机系统中大量运用。

1.4输入设备键盘介绍键盘是由若干按键组成的开关矩阵,能实现简单的人机对话。

与计算机系统的键盘有两类:一类是编码键盘,即键盘上闭合键的识别由专门硬件来实现;另一类是非编码键盘,即键盘输入及闭合键的识别由软件来完成。

图1-2 输入按键开关键盘二.电路设计2.1时钟电路本设计采用内部时钟产生方式。

内部震荡方式所得的时钟信号比较稳定。

在XTAL1和XEAL2两端跨接晶体或陶瓷谐振器,与内部反相器构成稳定的自激振荡器。

晶振选用的12MHZ的内部震荡方式,电路如图:电容器C1、C2起稳定振荡频率,快速起振的作用,电容值取33P。

图2-1 内部震荡结构图2.2复位电路采用上电+按键复位电路,如下图,上电后,由于电容充电,使RST持续一段高电平时间。

当单片机已在运行之中时,按下复位键也能使RST持续一段的高电平,从而实现上电加开关复位的操作。

C3选择30uF,R2选择10K。

这不仅能使单片机复位,而且还能使单片机的外围芯片也同时复位。

图2-2 复位电路图2.3显示驱动电路数码管发光需要一定的电流,但单片机本身不可能提供足够的电流,即拉电流和灌电流不能满足要求,所以想要数码管正常发光,就要加适当的驱动电路。

首先考虑数码管的断码输出端,单片机的P0口可带8个TTL负载,而其他的I/O口只能带4个TTL负载,所以采用P0口作数码管的断码输出端,但P0口是集电极开路输出,要想输出拉电流,必须加上拉电阻,提高驱动能力,电路如图洗啊所示。

图2-3 显示驱动电路图2.4蜂鸣器提示电路在89s52的p3.6连一个蜂鸣器,在输入8位数后,再输入数时,从p3.6脚输入一低电平,并延时一定时间,蜂鸣器发出一“嘀”的声音,提示使用者输入已达8位数。

为限制电流,在电路中加一限流电阻。

图2-4 蜂鸣器电路图2.5电路原理图所需元件清单:元件代号器件名称数量AT89C51 AT89C51 1BUTTON 按键17 RES 电阻 2CAP 电容 37SEG-MPX8-CA-BLUE LED数码显示管 1CRYSTAL 晶振 1RESPACK-8 拉电阻 1SOUNDER 蜂鸣器 1 最终,总的电路原理图如下:图2-5 电路原理图三.C设计和运行3.1 C程序代码#include<reg51.h>#include<absacc.h>sbit P1_0=P1^0;sbit P3_5=P3^5;sbit P3_6=P3^6;sbit P3_7=P3^7;sbit P3_4=P3^4;unsigned int num0,result;unsigned int number,num1;unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char dispbuf[8]={0,16,16,16,16,16,16,16};unsigned char disp[8]={0,16,16,16,16,16,16,16};unsigned char dispbitcount;unsigned char temp;unsigned char i,j;unsigned char key;unsigned char keypres;unsigned char yunsuanfu; /***运算标志符/bit alarmflag; /***溢出报警标识符**/bit eq;void rresult() /**拆分result并送入显示数组***/{ i=0;number=result;if(number<0) alarmflag=1;else { for(i=0;i<9;i++){ if(number==0) break;else dispbuf[i]=number%10;number/=10;}}}/******运算num1值*******/unsigned long int calcul(){ switch(yunsuanfu){case 1:result+=num1;return(result);break;case 2:result-=num1;return(result);break;case 3:result*=num1;return(result);break;case 4:result/=num1;return(result);break;default:yunsuanfu=0;}}/***********************/unsigned long int num1process(unsigned char *p,unsigned char count) { num0=*p;while(count-1>0){ for(i=0;i<count-1;i++)*(p+count-1)=(*(p+count-1))*10;num0+=*(p+count-1);count--;}return(num0);}/*******************/void reset(void){for(i=0;i<8;i++){ dispbuf[i]=disp[i];}keypres=0;}/********************/void change(unsigned char *p,unsigned char count){while(count>0){*(p+count)=*(p+count-1);count--;}dispbuf[0]=key;}/*****中断动态显示LED*****/void t0(void) interrupt 1{TH0=(65536-4000) / 256;TL0=(65536-4000) % 256;P2=dispbitcode[dispbitcount];P0=dispcode[dispbuf[dispbitcount]];dispbitcount++;if (dispbitcount==8) dispbitcount=0;if (alarmflag==1){ for(i=0;i<50;i++){ P1_0=~P1_0;for(j=0;j<50;j++);}} alarmflag=0;}void main(void){TMOD=0x01;TH0=(65536-3000) / 256;TL0=(65536-3000) % 256;TR0=1;ET0=1;EA=1;/*********扫描1*********/while(1){P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=50;i>0;i--)for(j=100;j>0;j--)temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e: key=7; break;case 0x0d: key=8; break;case 0x0b: key=9; break;case 0x07: key=10; break;}/******加法*****/if (key==10){yunsuanfu=1;result=num1process(dispbuf,keypres);reset();}if (key>=7&&key<10){keypres++;if(keypres==1) dispbuf[0]=key;else if(keypres<9)change(dispbuf,keypres);else if(keypres>8) alarmflag=1;}temp=P3;temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}}}P3=0xff; /*****扫描2*****/P3_5=0;temp=P3;temp=temp & 0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=100;j>0;j--);temp=P3;temp=temp & 0x0f;if(temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e: key=4; break;case 0x0d: key=5; break;case 0x0b: key=6; break;case 0x07: key=11; break;}if(key==11) /****减法****/{yunsuanfu=2;result=num1process(dispbuf,keypres);reset();}if ((key>=4)&&(key<7)){keypres++;if(keypres==1) dispbuf[0]=key;else if(keypres<9)change(dispbuf,keypres);else if(keypres>8) alarmflag=1;}temp=P3;temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}}}P3=0xff; /******扫描3****/P3_6=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=50;i>0;i--)for(j=100;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e: key=1; break;case 0x0d: key=2; break;case 0x0b: key=3; break;case 0x07: key=12; break;}/*******乘法******/if(key==12){yunsuanfu=3;result=num1process(dispbuf,keypres);reset();}if((key>=1)&&(key<4)){keypres++;if(keypres==1) dispbuf[0]=key;else if(keypres<9)change(dispbuf,keypres);else if(keypres>=9) alarmflag=1;}temp=P3;temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f;}}}P3=0xff; /*******扫描4*****/P3_7=0;temp=P3;temp=temp & 0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=100;j>0;j--);temp=P3;temp=temp & 0x0f;if(temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e: key=0; break;case 0x0d: key=13; break;case 0x0b: key=14; break;case 0x07: key=15; break;}if (key==15) /****除法***/{yunsuanfu=4;result=num1process(dispbuf,keypres);reset();}if(key==14) reset(); eq=0;if(key==13){if(eq!=1){num1=num1process(dispbuf,keypres);reset();calcul();rresult();}}if(key==0&&keypres!=0){ keypres++;if(keypres<9)change(dispbuf,keypres);if(keypres>8) alarmflag=1;}temp=P3;temp=temp & 0x0f;while(temp!=0x0f){ temp=P3;temp=temp & 0x0f;}}}}}3.2 Keil C调试运行(1)在keil 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)(2)用keil的文本编辑器编写源文件,可以是汇编文件(.ASM),并将该文件添加到项目中去。

相关文档
最新文档