8051汇编语言计算器设计
汇编语言程序设计————计算器

课程设计说明书题目: 表达式计算器学号:班级: 计算机创新实验班姓名:廖福轩目录一.设计内容 (2)二.设计方案 (2)1、主程序模块、 (2)2、赋权值模块、 (2)3、加减乘除运算子程序模块、 (2)4、调用赋权宏子程序模块、 (2)5、回车换行宏模块、 (2)6、9号功能显示字符串宏模块、 (2)三.设计框图 (3)四.程序代码 (4)五.运行结果 (9)六.设计总结 (9)计算器汇编语言程序设计一.设计内容从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能就是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续不?(y/n)”之类的提示回答“n”或“N”为止。
四则运算主要包括以下几个模块:(1)主程序模块、(2)赋权宏模块、(3)加减乘除运算子程序模块、(4)调用赋权宏子程序模块、(5)回车换行宏模块、(6)9号功能显示字符串宏模块、二.设计方案1、主程序模块、主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断就是否继续,继续则返回输入,不继续则退出程序、2、赋权宏模块、通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应、接着给对应的符号赋予权值,将其权值存入ch中、3、加减乘除运算子程序模块、运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号就是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断就是否为除号/,若为除号/则进行除法运算,然后判断就是否为加法,为加法则进行加法运算,接着判断就是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置、4、调用赋权宏子程序模块、该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0、从而可以通过设定的权值来判断优先级、5、回车换行宏模块、通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能、6、9号功能显示字符串宏模块、通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。
基于单片机的计算器——汇编

基于单片机的计算器——汇编编号:单片机综合设计实训 (论文)说明书题目:基于单片机的电子计算器院(系):专业:学生姓名:学号:指导教师:年01 月 1 日摘要当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。
计算器作为一种快速通用的计算工具方便了用户的使用。
计算器可谓是我们最亲密的电子伙伴之一。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中。
单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
本系统就是充分利用了AT89S52芯片的I/O引脚。
系统以采用MCS-51系列单片机Intel8051为中心器件来设计计算器控制器,以矩阵键盘输入、八位数码管显示,实现了能根据实际输入值计算并显示的功能。
关键词:计算器 AT89S52 八位数码管矩阵键盘AbstractIn today's society, with people constantly improve the material life, the electronic produc ts have entered the each and every family, whether living or studying, or entertainment and recreation almost everything is inseparable from the electronic products, large and complex co mputing capability is the human brain are not competent, but relatively easy to go wrong.Calc ulator as a rapid generic computational tool is convenient for users to use.The calculator is our most intimate electronic partners.SCM because of its small size and low cost, widely used in household appliances, industr ial control and other areas.In industrial production.Single chip microcomputer, the microcomp uter is an important branch, is full of vitality.Single chip micro computer referred to as SCM, is particularly applicable to the control field, it is also known as the micro controller.The system is to make full use of the AT89S52 chip I / O pins.System for using MCS-51 MCU Intel8051 as the center device to design the computer controller, with the matrix keybo ard input, the eight digital tube display, can be achieved according to the actual input value ca lculation and display functions.Key words: calculator AT89S52 digital tube eight matrix keyboard目录1实训设计内容 (4)1.1 设计目的 (4)1.2 设计任务 (4)2 系统硬件设计 (4)2.1 芯片介绍 (4)2.1.1主控芯片AT89S52概述与介绍 (4)2.1.2 MAX232芯片介绍 (9)2.2 硬件电路 (10)2.2.1 键盘接口电路 (10)2.2.2 7段LED数码管 (10)2.2.3 程序下载接口 (11)2.2.4 单片机时钟电路 (11)2.2.5 单片机复位电路 (12)3 软件设计 (12)3.1 按键扫程序设计 (12)3.2 算法设计 (13)4 电路板制作过程 (13)5 作品调试 (14)5.1硬件调试 (14)5.2 程序调试 (14)致谢 (16)参考文献: (17)附录: (18)1实训设计内容1.1 设计目的通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
8051单片机汇编语言程序设计

8051单片机汇编语言程序设计一、顺序结构1.有两个4位压缩BCD码,分别存放在30H,31H,40H,41H单元,要求求和,结果送至51H,52H中(高位在前,地位在后),给出程序流程图ORG 0000HCLR CMOV A,31HADD A,41HDA AMOV 52H,AMOV A,30HADDC A,40HDA AMOV 51H,AEND若需要求和的数为5271和6489,请分析每条指令后A和PSW的对应的数据二、分支结构2.求双字节有符号数的补码(双字节数为16位二进制数,其最高位D15为符号位),给出程序流程图和程序代码(单分支结构)CPT16:MOV A,R7JNB ACC.7,EXTMOV C,ACC.7MOV F0,CCPL AMOV R7,AMOV A,R6CPL AADD A,#01MOV R6,ACLR AADDC A,R7MOV C,F0MOV ACC.7,CMOV R7,AEXT: RET验证以上程序对-12597和6831两数的结果是否正确。
3.求分段函数的值,X是自变量存放在30H单元,Y是因变量存放在31H单元,给出程序流程图和程序代码(多分支结构A:逐次比较法)100010X X Y X X +>⎧⎪==⎨⎪-<⎩ FUNC1:MOV A,30HCJNE A,#00H,NZEROAJMP NEGTNZERO: JB ACC.7,POSITADD A,#1AJMP NEGTPOSIT: MOV A,#81HNEGT: MOV 31H,ARET4. 根据31H (高字节)、30H (低字节)的内容(分支转移参数)转向不同的处理程序(PRGX(X=0~n ,n>256)),给出程序流程图和程序代码(多分支结构B :转移表)JUMP1:MOV DPTR,#TAB1MOV A,30HMOV B,#3MUL ABMOV R3,AMOV A,BADD A,DPHMOV DPH,AMOV A,31HMOV B,#3MUL ABADD A,DPHMOV DPH,AMOV A,R3JMP @A+DPTRTAB1: LJMP PRG0LJMP PRG1LJMP PRGn若(31H30H )=364,则分析每条指令后A ,B ,DPTR 对应的数值。
用8051与1601LCD设计的整数计算器

// ---------------- Main.c -------------//名称:用8051与1601LCD设计的整数计算器// ---------------------------------------#include <reg51.h>#include <ctype.h> #include "calc.h" static data long lvalue; static data long rvalue; static data char currtoken; static data char lasttoken;static data char lastpress; static xdata charoutputbuffer[MAX_DISPLAY_CHAR];// //// 主程序// ------------void main()输出缓冲{// 变量初始化lvalue=0; rvalue=0; currtoken='='; lasttoken='=';// 初始化LCD initialise();calc_putput(OK); calc_evaluate();}// ---------------------------------------// 获取按键值并进行计算处理// ---------------------------------------void calc_evaluate(){char data key; int data i;char xdata number[MAX_DISPLAY_CHAR]; char xdata*bufferptr;// 清除缓冲for(i=0;i<=MAX_DISPLAY_CHAR;i++) number[i]=' ';bufferptr=number; while(1)key=calc_getkey();{if(calc_testkey(key)){if(bufferptr!=&number[MAX_DISPLAY_CHAR-2]){*bufferptr=key;calc_display(number);bufferptr++;}}else{if(lasttoken=='0') lvalue=calc_asciidec(number);elservalue=calc_asciidec(number);// 清除数字蝗虫bufferptr=number;for(i=0;i<=MAX_DISPLAY_CHAR;i++)number[i]=' ';// 处理操作符currtoken=key;if(currtoken=='C') calc_opfunctions(currtoken);elsecalc_opfunctions(lasetoken);// 清除输出缓冲for(i=0;i<=MAX_DISPLAY_CHAR;i++)outpufbuffer[i]=' ';bufferptr=number;if(currtoken!0x3d) lasttoken=currtoken;}lastpress=key;}}// ------------------------------------------// 根据运算符按键进行运算处理// ------------------------------------------void calc_opfunctions (char token){char data result;switch(token)case '+':if(currtoken=='='||isdigit(lastpress)){{lvalue+=rvalue; result=calc_chkerror(lvalue);}else result=SLEEP;break;case '-':if(currtoken=='='||isdigit(lastpress)){lvalue-=rvalue; result=calc_chkerror(lvalue);}else result=SLEEP;break;case '*':if(currtoken=='='||isdigit(lastpress)){lvalue*=rvalue; result=calc_chkerror(lvalue);}else result=SLEEP;break;case '/':if(currtoken=='='||isdigit(lastpress)){lvalue/=rvalue; result=calc_chkerror(lvalue);}else result=SLEEP;break;// 取消case 'C':lvalue=0;rvalue=0;currtoken='0';lasttoken='0';result=OK;break;default:result=SLEEP;}calc_output(result);}// -------------------------------------------------------// 检查待显示数据的上界和下界// 例如,99999999 and -99999999// ------------------------------------------------------- int calc_chkerror (long num) {if(num>=-99999999&&num<=99999999)return OK;elsereturn ERROR;}// ----------------------------------------------------------// 根据操作状态输出// ----------------------------------------------------------{switch(status){case OK:calc_deaplay(calc_decascii(lvalue));break;case SLEEP: break;case ERROR:calc_display("Exception");break;default:calc_display("Exception")break;}}// ---------------------------------------------------// 将ASCII 字符串转换为浮点数// ---------------------------------------------------long calc_asciidec (char *buffer){long data value;long data digit;value=0;while(*buffer!=' '){digit=*buffer-'0';value=value*10+digit;buffer++}return value;}// ---------------------------------------------------// 将浮点数转换为ASCII 字符串// ---------------------------------------------------char *calc_decascii(long num)long data temp=num;char xdata *avvayptr=&outputbuffer[MAX_DISPLAY_CHAR];long data divisor=10;{long data result;char data remainder,asciival;int data i;// 如果计算结果为0。
8051汇编语言计算器设计

8051汇编语言计算器设计摘要:本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。
该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。
整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。
整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器静态显示.关键字:AT89C51 单片机按键控制 LED显示第一章引言计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。
低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。
高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。
本计算器整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器动态显示.具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。
2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。
3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。
第二章系统硬件结构设计硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
基于8051计算器的汇编程序源代码

-=-=-=-=-=-=-=-=-=-=-=-= SOURCE CODE =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;;; 显示程序符号定义;;COM EQU 45HDAT EQU 46HCW_ADD EQU 5FFCHCR_ADD EQU 5FFDHDW_ADD EQU 5FFEHDR_ADD EQU 5FFFH; 子程序说明:; 寄存器工作组使用; WAITKEY, 00; KEYPRESSED, MAKENUM, RES2RAW 等子程序, 01; FLOATING LIB, 10; CALCULATE使用01, 当调用浮点程序库时10; 显示子程序,11; ====================================================================== ; 工作区使用注意:; -=-= 1. 位寻址区=-=-=-; 20H-21H 两个字用作位状态(位地址00H-0FH); 23H-27H ; NOT USE! ESP. 23H; 28H-2FH为显示区域与记录输入数字所用,RAWINPNTB BIT 10H ; 小数点位指示(位地址, POINT BIT)POSB BIT 11H ; 位置位,POSB=1表示创建BCD低位,POSB=0表示创建BCD高位DPB BIT 12H ; 大于1的浮点数MAKENUM时,指示小数点是否已经加入; 04H-08H, ARBITRARY USEBYTE2 BIT 14H ; SEE BYTE2USAGE (CTRL+F, FIND IT.); STAT保存整个计算器的运行状态!; BIT ASSIGNMENT:; .7: ERROR; .6: FLOAT; .5 & .4: OPERA TOR; VALUE MEANING:; 00: ADD; 01: SUB; 10: MUL; 11: DIV; .3: OPERATOR PRESSED; .2: CONSTRUCTING NUM2; .1: CONSTRUCTING NUM1; .0: EQUAL SIGN PRESSEDSTAT EQU 20HDCOUNT EQU 21H ; 数字位数计数(DIGIT COUNT),只是RAWIN中有效字节INPUT EQU 2AH ; 键盘输入暂存RAWPTR EQU 2BH ; 显示缓冲区指针NUMPTR EQU 2CH ; 当前组建数字的指针TEMP1 EQU 2DH ; 临时存储,一般用于临时保存R0, R1TEMP2 EQU 2EH ; 以切换寄存器组, UNUNSED... 07.25.NIGHT; -=-= 2. IRAM =-=-; 30H-33H为第一个操作数; 34H-37H为第二个操作数; 38H-3FH为显示区域; 48H-4FH为临时存储区域; 结果则存储在第一个操作数位置NUM1 EQU 30HNUM2 EQU 34HRAWIN EQU 38HTEMP EQU 48H; -=-=-= 3. REGISTERS =-=-=-; 键盘扫描使用寄存器组0,浮点程序使用寄存器组2; 其余数字组合部分用寄存器组1; 测试程序使用寄存器组3; ASCII TABLE; '.' -> 2EH; '+' -> 2BH; '-' -> 2DH; '*' -> 2AH; '/' -> 2FH; '=' -> 3DH;////////////////////////////////////////////////////////////////////;///;/// T H E [ M A I N ] P R O G R A M;/// ZEROX@2005.7.14;////////////////////////////////////////////////////////////////////ORG 0000HLJMP MAINORG 0030HMAIN:; 全局初始化MOV SP, #60H ; 堆栈MOV IE, #00H ; 禁止所有中断; 寄存器组00CLR RS1CLR RS0; 工作区IRAM(20H-5FH)默认全为0 INIT20TO5F:MOV R0, #20H ; START AT 20HMOV R7, #40H ; 64 BYTES TO ZERO LOOP20TO5F:MOV @R0, #00HINC R0DJNZ R7, LOOP20TO5F; ---------------------------------SETB STAT.0 ; 初始状态为等号状态MOV R7, #00HMOV SCON, #00H ; 串行工作方式0 ; -------------------------------------;; DISPLAY INIT; -------------------------------------LCALL LCDINITMOV COM,#06HLCALL PR1MOV COM,#0C0HLCALL PR1MAIN_LOOP: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 键盘输入;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 获取键盘输入,使用寄存器组00 CLR RS1CLR RS0; 获取输入MOV A, #0F0HWAITKEY:NOPCJNE A, #0F0H, WAITKEY_OK LCALL KEYSJMP WAITKEYWAITKEY_OK:MOV A, R7MOV INPUT, A ; 保存键盘输入到INPUT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 按键响应(内部处理);; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 处理键盘输入,使用寄存器组01CLR RS1SETB RS0LCALL KEYPRESSED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LCALL DISPLAYSJMP MAIN_LOOP; ======================================================== ; ==; == S U B R O U T I N E S; ==; ======================================================== KEYPRESSED:; 键盘输入保存在A 中,同时也保存在INPUT 中ANL A, #0F0H ; 屏闭低4位字节JNZ NONDIGIT ; 高位非零,不是数字; =========================================; 按键为数字; 否则按下的是数字,添加到显示缓冲区MOV A, INPUT ; 取回数字,高位已经是0; 如果之前处于“等号”状态,则此为NUM1JB STAT.0, NEWNUM1; 如果之前处于运算符状态,则此为NUM2JB STAT.3, NEWNUM2; 如果处于第一个数字状态JB STAT.1, INNUM1; 如果处于第二个数字状态JB STAT.2, INNUM2; 否则出错!!SETB STAT.7 ; ERROR BITRET ; KEYPRESSED 直接结束; --------------------------NEWNUM1:ANL STAT, #0F0H ; 操作状态清零(低4位)SETB STAT.1 ; 计算器状态改为NUM1; 同时清除浮点运算状态CLR STAT.6 ; STAT.6 -> FLOATING POINTSJMP NEWNUMNEWNUM2:ANL STAT, #0F0H ; 操作状态清零(低4位)SETB STAT.2 ; 计算器状态改为NUM2SJMP NEWNUMNEWNUM:; 准备开始一个新的操作数,首先清除显示缓冲区MOV RAWPTR, #RAWIN ; 指向开始; 清除小数点标志位CLR PNTBMOV DCOUNT, #00H ; 数字个数清零; 判断数字是否为0,0则忽略JZ IGNORE0; 非零数字,保存MOV RAWIN, A ; 此时RAWPTR单元的值,也就是地址; 就是RAWININC RAWPTR; 数字位数增1INC DCOUNTIGNORE0:RET; --------------------------INNUM1:INNUM2:MOV R2, DCOUNTCJNE R2, #08H, INNUM_OK; 数字个数已经达到最大值,忽略本次输入RETINNUM_OK:MOV R0, RAWPTR ; 使用R0间接寻址MOV @R0, AINC RAWPTRINC DCOUNTRET; =========================================; 按键非数字NONDIGIT:MOV A, INPUT ; 恢复AINC A ; '.' 用0FFH 表示,加1后为0JZ DECPNT ; DECIMAL POINT PRESSEDDEC A ; 否则不是小数点,减一恢复之; 非数字的情况:; 1. 加, 减, 乘, 除: 高4位应该分别为0001, 0010, 0011, 0100 ; 2. 小数点: 代码为0FFH, 前面已经考虑; 3. 等号: 1000 0000 (80H); 首先检查是否是等号(最高位为1)JB ACC.7, KEYEQU; 否则作为运算符对待LJMP KEYOP; ---------------------------------ERRORND:; ERROR OF NON-DIGIT; 出错…………SETB STAT.7LJMP EXIT; ======================================================= DECPNT:; 根据计算器状态进行操作JB STAT.1, DP1JB STAT.2, DP2JB STAT.3, DP3JB STAT.0, DP0; ERRORSETB STAT.7LCALL EXITDP1:DP2:; 在数字输入状态下下按下了小数点,如果之前已经按过小数点; 则忽略此次输入,计算器状态字无需修改JB PNTB, DP_DONE ; 小数点已经按下; 否则,这是本次操作数输入第一次按下小数点; 首先设置小数点已经按下标志位SETB PNTB; 否则添加小数点到输入区,也就是显示区; 首先判断第一个数字是不是0MOV R0, RAWPTR ; 获取指针用于比较; 如果当前输入位置不是开始(前面已有非零数字存储),直接添加小数点CJNE R0, #RAWIN, DP_ADD; 否则,RAWPTR还是指向RAWIN位置,第一个数字设置为0,; 后再添加小数点MOV R0, RAWPTR ; 用R0间接寻址MOV @R0, #00HINC RAWPTRINC DCOUNTDP_ADD:MOV R0, RAWPTR ; R0间接寻址MOV @R0, #0FFH ; DECIMAL POINTINC RAWPTRINC DCOUNTDP_DONE:RET; --------------------DP0:; 之前的状态为等号,按下小数点后因该开始第一个操作数输入; 设置状态ANL STAT, #0F0HSETB STAT.1SJMP DP_NEW; --------------------DP3:; 之前处于操作符状态,按下小数点则应该开始第二个操作数输入; 设置状态ANL STAT, #0F0HSETB STAT.2; 新的操作数开始SJMP DP_NEW; --------------------DP_NEW:; 小数点开始的新的操作数,添加'0' '.' 两个输入; 初始化MOV RAWPTR, #RAWINMOV DCOUNT, #00HCLR PNTBMOV RAWIN, #00H ; 第一个数字,0INC RAWPTRINC DCOUNTMOV R0, RAWPTR ; 使用R0间接寻址来存储小数点MOV @R0, #0FFH ; 小数点使用0FFH表示INC RAWPTRINC DCOUNTRET; =======================================================KEYEQU:; 保存原来的状态MOV B, STAT; 设置现在的状态为EQUANL STAT, #0F0H ; 清楚低4位状态SETB STAT.0 ; EQU STAT BIT; 根据原来的状态采取相应的操作JB B.1, EQU1 ; 原来处于第一个数的输入状态JB B.2, EQU2 ; 原来处于第二个数的输入状态(NORMAL)JB B.3, EQU3 ; 原来处于操作符状态JB B.0, EQU0 ; 原来处于等号状态; ERRORSETB STAT.7LJMP EXITEQU1:; 在第一个数的状态下按了等号,那么第一个数不需要进计算; 直接作为结果显示,实际上RAWIN就是当前的操作数的显示格式; 因此只需要将第一个数转换成浮点数存储于NUM1SETB RS0CLR RS1MOV R0, #RAWIN ; SOURCEMOV R1, #NUM1 ; DESTINATIONLCALL MAKENUM ; NOTE: MAKENUM!!!RETEQU2:; 在第二个数的状态下按了等号,这是最普通的操作; 首先转换操作数二到NUM2位置,然后计算结果; 并将结果转化为RAWIN形式,供DISPLAY显示MOV R0, #RAWINMOV R1, #NUM2 ; DESTINATIONLCALL MAKENUM ; NOTE: MAKENUM..; 计算结果,结果放在NUM1LCALL CALCULATE ; NOTE: CALCULATE!!!; 结果转换为RAWIN,即从NUM1到RAWINLCALL RES2RAW ; NOTE: RES2RAWNOPRETEQU3:; 原来状态为操作符,然后直接按了等号; 本程序采取的措施为:等1号覆盖前面的操作符; 因此不需要采取任何措施,直接同按下了第一个; 操作数后直接按等号相同,由于按下操作符的时候; 已经处理了第一个操作数,因此这里直接返回RETEQU0: ; SYSTEM RESET; 原来状态为等号,然后又按了等号; 第一次按等号的时候已经处理好,这里只需返回; 07.24 修改,连续两次等号相当于清0; 首先清除错误状态位CLR STAT.7MOV DCOUNT, #00H ; DCOUNT设置为0,显示就为0RET; ======================================================== ; 操作符处理,注意:前面已经判断不是等号KEYOP:; 保存操作符号: 给定的是10H, 20H, 30H, 40H; 转换为00H, 10H, 20H, 30H. 即,减去10H;DEBUGHERECLR CSUBB A, #10H; INVARIANT: 除了4, 5位,其他位不可能为1KEYOP_NE: ; KEY OPERATOR, NO ERROR; 如果是第一个数之后按的运算符JB STAT.1, KOP1; 如果是第二个数之后按的运算符JB STAT.2, KOP2; 如果是一个运算符之后按的运算符JB STAT.3, KOP3; 如果是按了等号后按的运算符JB STAT.0, KOP0; ERRORSETB STAT.7LJMP EXIT; ------------------KO_NE_DONE: ; KEY OPERATOR, NOT EQUAL, DONE; 完成相应的操作后,更新STAT到当前状态; 取回INPUT ,并减去10H ,成为STA T要求的操作符表示MOV A, INPUTCLR CSUBB A, #10H; 运算符信息保存在STAT 的4,5位; 先将4,5位清0ANL STAT, #0CFH ; #1100 1111BORL STAT, A ; 设置4,5位; 设置新的计算器状态ANL STAT, #0F0H ; 清除状态(低4位)SETB STAT.3 ; 操作符号状态RET ; KEYPRESSED 返回; --------KOP1:; 如果按了第一个数字之后按了操作符; 则首先将当前显示缓冲区里的数字; 拼合为3字节浮点数; 保存在NUM1位置; RAWIN 保持不变,因此计算器显示的仍然为; 第一个操作数MOV R0, #RAWIN ; 需要进行拼凑的数字MOV R1, #NUM1 ; 目的LCALL MAKENUMSJMP KO_NE_DONEKOP2:; 如果按了第二个数字之后按了操作符,; 首先计算前面的结果,然后结果作为; 第一个数, 并设置状态为操作符; 显示区域的数据为前面操作的结果; 即:需要将3字节的浮点数结果转化; 为可以显示的RAWIN格式。
单片机课程设计一汇编语言实现四位数计算器

单片机课程设计一汇编语言实现四位数计算器
四位数计算器是一种能够进行基本数学运算的设备,它可以对四位数进行加法、减法、乘法和除法运算。
这个计算器的设计基于单片机和汇编语言,它可以方便地进行各种数学运算,满足用户的需求。
我们需要一个单片机作为计算器的核心。
单片机是一种集成电路,可以完成各种计算和控制任务。
我们选择一款适合的单片机,并将其与其他必要的电子元件进行连接,以构建一个完整的计算器系统。
接下来,我们需要使用汇编语言编写相应的程序来实现计算器功能。
汇编语言是一种低级语言,可以直接控制计算机的硬件,实现各种操作。
通过编写汇编语言程序,我们可以实现加法、减法、乘法和除法等运算。
在程序中,我们首先需要设计一个界面,将计算器的输入和输出与单片机相连接。
用户可以通过按键输入需要计算的四位数和运算符,计算器将根据用户的输入进行相应的运算,并将结果显示在数码管上。
在程序的编写过程中,我们需要考虑各种可能的输入情况,例如用户输入的数字是否超出了四位数的范围,用户是否输入了错误的运算符等。
我们需要对这些情况进行处理,保证计算器的运算结果是准确的。
除了基本的加减乘除运算,我们还可以在计算器中添加其他功能,
例如开根号、取余数等。
这些功能的实现也需要通过编写相应的汇编语言程序来完成。
通过单片机和汇编语言的结合,我们可以实现一个功能完备的四位数计算器。
这个计算器可以方便地进行各种数学运算,满足用户的需求。
通过合理的设计和编程,我们可以使计算器的使用变得简单而高效,为用户提供便利的计算体验。
基于51单片机的计算器设计程序代码(汇编)

DBUF EQU 30HTEMP EQU 40HYJ EQU 50H ;结果存放YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放ORG 00HSTART:MOV R3,#0 ;初始化显示为空MOV GONG,#0MOV 30H,#10HMOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#10HMLOOP:CALL DISP ;PAN调显示子程序WAIT:CALL TESTKEY ;判断有无按键JZ WAITCALL GETKEY ;读键INC R3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1:CJNE A,#1,NEXT2LJMP E1NEXT2:CJNE A,#2,NEXT3LJMP E1NEXT3:CJNE A,#3,NEXT4LJMP E1NEXT4:CJNE A,#4,NEXT5LJMP E1NEXT5:CJNE A,#5,NEXT6LJMP E1NEXT6:CJNE A,#6,NEXT7LJMP E1NEXT7:CJNE A,#7,NEXT8LJMP E1NEXT8:CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10: CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11:CJNE A,#11,NEXT12LJMP E2NEXT12:CJNE A,#12,NEXT13LJMP E2NEXT13:CJNE A,#13,NEXT14LJMP E2NEXT14:CJNE A,#14,NEXT15LJMP E2NEXT15: LJMP E3 ;判断是否清除键E1: CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字N1:CJNE R3,#2,N2LJMP E12 ;为第二个数字N2:CJNE R3,#3,N3LJMP E13 ;为第三个数字N3: LJMP E3 ;第四个数字转溢出E11:MOV R4,A ;输入值暂存R4 MOV 34H,A ;输入值送显示缓存MOV 33H,#10HMOV 32H,#10HLJMP MLOOP ;等待再次输入E12:MOV R7,A ;个位数暂存R7 MOV B,#10MOV A,R4MUL AB ;十位数ADD A,R7MOV R4,A ;输入值存R4MOV 32H,#10H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13:MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出ADD A,R7JB CY,E3 ;输入溢出MOV R4,AMOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV YJ,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零MOV 30H,#10H ;显示清空MOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#10HLJMP MLOOPE2: MOV 34H,#10HMOV 33H,#10HMOV 32H,#10HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;”+"N21: CJNE A,#11,N22LJMP JIAN ;"-"N22:CJNE A,#12,N23LJMP CHENG ;"*”N23:CJNE A,#13,N24LJMP CHU ;”/”N24:CJNE A,#0,N25LJMP FIRST ;首次按功能键N25:LJMP DEN ;”=”N4:LJMP E3FIRST: MOV YJ,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA:MOV A,YJ ;上次结果送累加器ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV YJ,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1JIAN:MOV A,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG:M OV A,YJMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1CHU:MOV A,R4MOV B,AMOV A,YJDIV AB ;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1DEN:MOV R3,#0LJMP DISP1DISP1:MOV B,#10MOV A,YJ ;结果送累加器DIV AB ;结果除10MOV YJ1,A ;暂存”商”MOV A,B ;取个位数MOV 34H,A ;个位数送显示缓存MOV A,YJ1JZ DISP11 ;结果是否为一位数MOV B,#10MOV A,YJ1DIV ABMOV YJ1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV A,YJ1JZ DISP11 ;结果是否为二位数MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOPDISP:MOV R0,#DBUF ;显示子程序MOV R1,#TEMP+4MOV R2,#5DP10:MOV DPTR,#SEGTABMOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0DEC R1DJNZ R2,DP10MOV R0,#TEMPDP12:MOV A,@R0MOV P0,Aclr P2。
51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)背景介绍在数字化时代,计算器作为一种简单易用的工具,越来越得到人们的关注和热爱。
而基于51单片机的简易计算器,不仅可以成为一种学习电子技术的手段,还具有满足简单计算需求的实用性。
设计思路本计算器采用键盘输入和数码管输出的电路设计,为用户提供加、减、乘、除、小数点、退位以及等于等功能。
1.键盘输入采用矩阵键盘的方式,将所有按键按行列排列,并利用51单片机中断方式来读取键值。
2.计算处理通过编写相应的程序代码,计算出用户输入的两个数值及操作符的结果,并将结果存储在数据缓存器中,最后将其输出至数码管。
3.数码管显示根据计算结果的数据类型,将其经过相应的转换处理后,通过数码管将结果输出至用户。
设计技术1.软件编写软件编写方面,采用汇编语言进行编写,代码总长度为2.2KB 左右。
其中,以中断方式读取键值、实现数值存储与判断、计算处理、数码管的结果输出等作为关键点进行编写。
2.硬件搭建硬件搭建方面,需要按照电路图进行搭建,并将51单片机与相关周边电路进行连接。
根据设计思路,将键盘、数码管、电源、指示灯等设备按照需求进行连接。
可改进之处虽然 51单片机的简易计算器的搭建能够满足基本计算需求,但其在以下几方面还有可改进之处:•添加计算科学函数,如三角函数、对数函数等。
•改进操作方式,使其更加符合人体工程学原理。
•添加储存器,使用户能够将计算结果进行存储和调用。
总结通过本次对基于51单片机的简易计算器的设计与实现,我们深入了解了电子技术的基本概念和硬件搭建原理,并了解到了简单嵌入式系统的工作原理。
虽然该计算器在功能和效率方面还有待改进,但对于初学者来说,其对于电子技术的学习和实验还是很有价值和意义的。
•编写的汇编代码过于繁琐,可考虑使用高级语言编写以提高效率和易读性。
•在电路搭建时需注意布线的合理性,尽量避免出现干扰和信号损失的问题。
综上所述,基于51单片机的简易计算器的设计和实现虽存在一些不足,但还是很有价值的。
汇编语言课程设计四则运算计算器

汇编语言课程设计报告( 2010 -- 2011 年度第2 学期)课题名称:实现加减乘除四则运算的计算器专业计算机科学与技术学生姓名郑诗霖班级B计算机092学号**********指导教师王志宏完成日期2011年6月24日目录1 设计目的 (1)2 设计内容 (1)3 实现方法 (1)3.1 系统目标 (1)3.2程序流程图及说明 (2)3.2 主体功能 (4)4程序调试 (4)4.1 运行界面分析 (4)4.2 调试过程及分析 (4)5 小结 (6)参考文献 (7)附录 (8)附录1 源程序清单 (8)实现加减乘除四则运算的计算器1 设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。
2 设计内容课题名称:实现加减乘除四则运算的计算器主要功能:能实现加减乘除的计算;该程序接受的是16进制数;执行时,需在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:C:\tasm>js 3+253 实现方法3.1 系统目标本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。
比如,十进制数的加减乘除四则运算。
我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。
此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。
第一步,我要解决的是输入时是用INT 21H的10号功能调用还是用INT 21H 的1号功能调用来进行输入。
用8051单片机、数码管显示器、控制按键为元件来设计的计算器

摘要最近几年来随着科技的飞速进展,单片机的应用正在不断深切,同时带动传统控制检测技术日趋更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来利用,但仅单片机方面的知识是不够的,还应按照具体硬件结构、软硬件结合,来加以完善。
运算机在人们的日常生活中是比较常见的电子产品之一。
可是它还在进展当中,以后必将出现功能加倍壮大的运算机,基于如此的理念,本次设计是用8051单片机、数码管显示器、控制按键为元件来设计的计算器。
利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/O端口的功能和大体用途的了解。
关键字:8051数码管控制按键汇编语言目录摘要 (1)第一章绪论 (5)课题简介 (5)设计目的 (5)设计任务 (5)第二章课题背景 (6)单片机进展现状 (6)计算器系统现状 (7)矩阵按键 (8)第三章硬件系统设置 (9)硬件电路原理图 (9)键盘接口电路 (9)数码管显示 (10)第四章软件设计 (11)算术运算流程图设计 (11)源程序设计 (12)MOV DISPBUF+1,#0C0H (12)MOV DISPBUF+2,#0C0H (12)MOV R6,27H (12)SJMP LOOP (12)JB ,K12 (12)CJNE R5,#00H,L1 (12)L1: LJMP CEND (13)JB ,K13 (13)CJNE R5,#00H,L2 (13)L2: LJMP CEND (13)JB ,K22 (13)LJMP DYU (13)K22: MOV P2,#0DFH (13)JB ,K23 (13)MOV 25H,#3H (13)CCTV:LJMP KEND (13)JB ,K32 (13)JB ,K33 (13)MOV 25H,#2H (13)JB ,K42 (13)INC 27H (13)K42: MOV P2,#0DFH (13)JB ,K43 (13)MOV 25H,#1H (13)CJNE R5,#00H,CHANG (13)ZHI: MOV A,20H (14)MOV B,#0AH (14)CZH: MOV 24H,A (14)LJMP KEND (14)KEND:MOV P2,#0FH (14)MOV A,P2 (14)ANL A,#0FH (14)CHANG: CJNE R4,#2H,HONG (14)AJMP ZHI (14)HONG:JNC CEND (14)INC R5 (14)MOV 20H,25H (14)KBK: JNC CEND (14)MOV 20H,25H (14)MOV 23H,25H (14)MOV R4,#00H (14)S: CJNE R3,#2H,S1 (14)CLR C (14)MOV A,23H (14)JIANFA:SUBB A,24H (15)MOV 23H,A (15)SJMP CEND (15)S1: CJNE R3,#3H,S2 (15)MOV A,23H (15)MOV B,24H (15)S2: CJNE R3,#4,CEND (15)MOV A,24H (15)CJNE A,#00H,ZY (15)ZY: MOV A,23H (15)MOV B,24H (15)DIV AB (15)CEND:MOV P2,#0FH (15)MOV A,P2 (15)ANL A,#0FH (15)CONV: CJNE R5,#02H,BEI ;数码管显示数据转换子程序 (15)DIV AB (15)MOV DPTR,#TABLE (15)MOV R2,#4H (16)MOV A,#1H (16)SC: PUSH ACC (16)MOV A,@R0 (16)MOV P1,A (16)DEL12: MOV R6,#1EH (16)DEL2: MOV R7,#64H (16)DEL1: DJNZ R7,DEL1 (16)DJNZ R6,DEL2 (16)RET (16)D2: MOV R7,#100 (16)DJNZ R7,$ (16)DJNZ R6,D2 (16)TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H ;------字符表------ (16)DB 92H,82H,0F8H,80H,90H (16)DB 88H,83H,0C6H,0A1H,86H (16)第五章系统调试与存在的问题 (17)硬件调试 (17)软件调试 (17)总结 (18)参考文献 (19)附录 (20)附录一:计算器硬件连线图 (20)第一章绪论课题简介现今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,仍是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易犯错。
基于51单片机的简易计算器设计毕业论文(设计)word格式可编辑 精品

摘要工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。
本系统以MCS-51系列中的8051单片机为核心,能够实现多位数的四则运算。
该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。
本系统的设计说明重点介绍了如下几方面的内容:基于单片机简易计算器的基本功能,同时对矩阵键盘及数码管动态显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;对系统各功能模块的软、硬件实现进行了详细的设计说明。
关键词:MCS-51;8051单片机;计算器;加减乘除AbstractThe engineering practice teaching is to students better to consolidate and practice have set up by the professional knowledge, in this engineering practice, I to the intelligent measurement control instrument principle and design ", "the MCS-51 series single chip computer and its application" course knowledge as the foundation, the design the simple calculator. This system to MCS-51 of the 8051 series single chip microcomputer as the core, can realize the connection arithmetic. The system through the test matrix keyboard scan, judge whether key, the data transfer the numerical into digital tube dynamic display. This system mainly introduced the design that the following aspects of content: based on single chip microcomputer simple calculator basic functions, and the matrix keyboard and a digital tube dynamic display of the principle of a simple expatiated; introduced the design of the whole system, the whole process of the system are discussed, and its function module partition and the components for a detailed explanation; the functional modules of the system hardware and software of the implementation of the detailed design instructions.Key words: MCS-51;8051 single chip microcomputer;Calculator;Add, subtract, multiply and divide:目录第1章绪论 (1)1.1课题简介 (1)1.2设计目的 (1)1.3设计任务 (1)1.4章节安排说明 (1)第2章计算器系统简介 (2)2.1 单片机发展现状 (2)2.2计算机系统现状 (2)2.3简易计算器系统简介 (3)第3章计算机硬件系统简介 (4)3.1计算机硬件需求 (4)3.2MCS-51系列单片机简介 (4)3.3外围电路设计 (8)3.3.1振荡电路设计 (8)3.3.2复位电路设计 (9)3.3.3 键盘电路设计 (9)3.3.4 数码管显示电路设计 (10)3.4硬件原理图 (11)第4章计算器软件系统设计 (12)4.1系统模块图 (12)4.2系统流程图 (12)4.3 计算器主程序设计 (12)4.3.1计算器主程序设计 (12)4.3.2 存储单元分配 (13)4.4 计算器子程序设计 (14)4.4.1输入程序设计 (14)4.4.2运算程序设计 (15)4.4.3 显示程序设计 (16)第5章结论与展望 (18)5.1结论 (18)5.2不足与展望 (18)参考文献 (19)附录程序源代码 (20)第1章绪论1.1课题简介单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
经典:80C51单片机汇编语言程序设计

上例中,如果采用CJNE指令,应如何修改程序? 18
XAD EQU
1000H;
BUF EQU
2000H;
ORG 1000H
START:MOV DPTR, #XAD ;数据X的地址送数据指针DPTR
MOVX A,
@DPTR; A←取数据X
CJNE A, #0, ANZ ; X≠0转ANZ
SJMP SAV;
难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。
2
4.1.2 单片机使用的高级语言
对于8051单片机,现有4种语言支持,即汇编、 PL/M、C和BASIC。
C语言最终得到广泛应用。 可以大大提高单片机应用系统研制的开发效率。移 植性好。 高级语言的不足:生成的目标代码较长,导致应用程 序运行速度较慢。
分支程序
BR1: …
BRn: …
21
(2)通过转移指令表实现程序多分支
MOV A, n
RL A
;分支序号值乘以2
MOV DPTR, #BRTAB;转移指令表首址
JMP @A+DPTR
BRTAB: AJMP BR0
;转分支程序0
AJMP BR1
;转分支程序1
BR0: … BR1: …
AJMP BR127
顺序结构程序是最简单的程序结构。程序既无分支、 循环,也不调用子程序,程序执行时一条接一条地 按顺序执行指令。
6
2、程序设计的一般步骤
(1)分析任务 (2)确定算法 (3)画流程图 (4)编写程序 (5)上机调试
查错、改错, 用指令的形式
对程序进行 将程序流程图
优化。
实现出来。
当接到程序设计的任务后, 首先对任务进行详尽的分析, 搞清楚已知的数据和想要得 到的结果,程序应该完成何 种的功能。明确在程序设计 时应该 “做什么” 。
汇编语言程序的设计————计算器

课程设计说明书题目: 表达式计算器学号:41212241班级: 计算机创新实验班:廖福轩目录一.设计容 (2)二.设计方案 (3)1.主程序模块. (3)2.赋权值模块. (3)3.加减乘除运算子程序模块. (3)4.调用赋权宏子程序模块. (3)5.回车换行宏模块. (3)6.9号功能显示字符串宏模块. (2)三.设计框图 (3)四.程序代码 (4)五.运行结果 (11)六.设计总结 (11)计算器汇编语言程序设计一.设计容从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。
四则运算主要包括以下几个模块:(1)主程序模块.(2)赋权宏模块.(3)加减乘除运算子程序模块.(4)调用赋权宏子程序模块.(5)回车换行宏模块.(6)9号功能显示字符串宏模块.二.设计方案1.主程序模块.主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.2.赋权宏模块.通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应.接着给对应的符号赋予权值,将其权值存入ch中.3.加减乘除运算子程序模块.运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断是否为除号/,若为除号/则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置.4.调用赋权宏子程序模块.该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级.5.回车换行宏模块.通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能.6.9号功能显示字符串宏模块.通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。
基于51单片机的数字计算器的设计

《单片机技术及其应用》课程设计报告专业:通信工程班级:09312班姓名:某某某学号:09031069指导教师:二0一二年六月十八日目录1设计目的 (1)2 设计题目描述与要求 (1)3 设计过程 (2)4硬件总体方案及说明 (7)5 软件总体方案及设计流程 (11)6 调试与仿真 (16)7 心得体会 (18)8 指导老师意见 (19)9 参考文献 (19)附录一 (19)附录二 (31)基于51单片机的数字计算器的设计1设计目的简易计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,同时学习查阅资料、参考资料的方法。
本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。
设计过程在硬件与软件方面进行同步设计。
硬件选择AT89C51单片机和74ls164,输入用4×4矩阵键盘。
显示用5位7段共阴极LED静态显示。
软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
选用编译效率最高的Keil软件进行编程,并用proteus仿真。
2 设计题目描述与要求基于AT89C51数字计算器设计的基本要求与基本思路:(1)扩展4*4键盘,其中10个数字,5个功能键,1个清零(2)使用五位数码管接口电路(3)完成十进制的四则运算(加、减、乘、除)(4)实现低于三位小于255数字的连续运算(5)使用keil 软件编写程序(6)最后用ptoteus 仿真3 设计过程3.1设计思路按照2的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于实验箱的硬件电路已经固定,故选择串行静态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行静态显示显示运算结果。
基于51单片机实验报告(计算器)

基于51单片机实验报告(计算器)一.计算器模块1.功能介绍利用8051 单片机硬件资源和常用外围电路如LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。
2.设计方案利用STC89C52为内核的单片机,PC机。
四则运算利用4*4矩阵键盘实现从0—9和运算符号的输入,并将操作过程和结果显示在LCD1602上。
时钟显示和温度显示,可以利用DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往LCD1602显示,同样可以利用单片机开发板上面集成的DS18B20温度传感器来测试周围环境的温度,将获取的温度通过在LCD1602来显示。
系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602显示。
键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。
unsigned char temp;key = null;//第一行按键P3 = 0xfe;temp = P3;temp = temp & 0xf0;if (temp != 0xf0){delay(10); //延时软件去抖动temp = P3;temp = temp & 0xf0;if (temp != 0xf0) //确认有键按下{temp = P3;switch (temp){case 0xee:key = 'D'; //读键值break;case 0xde:key = 0;break;case 0xbe:key = '=';break;case 0x7e:key = '/';break;}flag++;}}读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。
8051课程设计_计算器演示

3
Program
MARK:
JC MARK MOV A,@R1 ADD A,#80H
SCAN: MOV P1,R2 MOV P0,@R0 MOV R7,#10H DJNZ R7,$ INC R2 INC R0 MOV P0,#000H RET MATKEYS0: ;跳转中转地址 LJMP MATKEYS TIMEINT0: DEC R4 CJNE R4,#00H,ENDINT MOV R4,#07H MOV A,@R1 SUBB A,#80H
MATKEYS1: MOV A,#00H LCALL PUTNUM LCALL CHECKOFF LJMP NIXIETUBE MATKEYS2: MOV A,#01H LCALL PUTNUM LCALL CHECKOFF LJMP NIXIETUBE MATKEYS3: MOV A,#02H LCALL PUTNUM LCALL CHECKOFF LJMP NIXIETUBE MATKEYS4: MOV A,#03H LCALL PUTNUM LCALL CHECKOFF LJMP NIXIETUBE
MATKEYS13:
3
Program
MATKEYS12: ;光标向左移一位 ACALL CLEARDOT DEC R1 ACALL CHECKR1 LCALL CHECKOFF LJMP NIXIETUBE MATKEYS160: LJMP MATKEYS16 MATKEYS150: LJMP MATKEYS15 MATKEYS140: LJMP MATKEYS14 MATKEYS130: LJMP MATKEYS13
4
Realization Demonstration…
Thank you for watching
汇编语言程序设计————计算器

目录一.设计内容 (2)二.设计方案 (2)1.主程序模块. (2)2.赋权值模块. (2)3.加减乘除运算子程序模块. (2)4.调用赋权宏子程序模块. (2)5.回车换行宏模块. (2)6.9号功能显示字符串宏模块. (2)三.设计框图 (3)四.程序代码 (4)五.运行结果 (9)六.设计总结 (9)计算器汇编语言程序设计一.设计内容从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续吗?(y/n)”之类的提示回答“n”或“N”为止。
四则运算主要包括以下几个模块:(1)主程序模块.(2)赋权宏模块.(3)加减乘除运算子程序模块.(4)调用赋权宏子程序模块.(5)回车换行宏模块.(6)9号功能显示字符串宏模块.二.设计方案1.主程序模块.主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.2.赋权宏模块.通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应.接着给对应的符号赋予权值,将其权值存入ch中.3.加减乘除运算子程序模块.运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断是否为除号/,若为除号/则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置.4.调用赋权宏子程序模块.该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级.5.回车换行宏模块.通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能.6.9号功能显示字符串宏模块.通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8051汇编语言计算器设计
摘要:本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。
该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。
整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。
整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器静态显示.
关键字:AT89C51 单片机按键控制 LED显示
第一章引言
计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。
低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。
高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。
本计算器整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器动态显示.具体设计如下:
1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。
2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。
3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。
第二章系统硬件结构设计
硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机
应用系统。
本设计选用以AT89C51单片机为主控单元。
显示部分:采用LCD静态显示。
按键部分,采用4*4键盘。
硬件电路如下:
2.1 键盘接口电路
计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这样的方式,而是采用矩阵键盘的方式。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的数量就为4*4个。
这样行列式键盘结构能有效的提高单片机系统中I/O口的利用率。
计算器的键盘布局所示:一般有16个键组成,在单片机中正好有一个端口实现16个按键功能,这种形式在单片机系统中最常用。
矩阵键盘内部电路如下:
2.11 LCD显示模块
本设计采用LCD液晶显示器来显示输出数据。
LCD的特性有:1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。
本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。
接口电路如下:
2.111 运算模块
MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等计算机所需要的基本功能部件。
如果按功能划分,它由以下功能部件组成,即微处理器(CPU),数据存储器(RAM),程序存储器(ROM/EPROM),并行
I/O口,串行口,定时器/计数器,中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的一些功能,通过使用单片机编写的程序可以实现高智能、高效率以及高可靠性,因此采用单片机作为计算器的主要功能部件,可以很快的实现运算功能。
运算模块由键盘和显示屏组成。
单片机通过按键来实现输入数据和操作方式的控制,在运算过程中,对所设的数据进行四则运算时,要先确定选用的是哪一个运算符,若是+或*,则要判断结果是否会溢出,溢出则显示错误提示,没有溢出则显示运算结果,若是/,则要判断除数是否为零,为零时显示错误提示,不为零显示运算结果。
第三章系统软件设计
3.1 键扫程序设计
键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,
然后确定是否有键按下,若无键
按下,则返回继续判断是否有键
闭合,若有键按下,则判断键号,
然后释放,若释放按键完毕,则
返回,若没有释放按键,则返回
继续释放。
流程图如下:
Y N
开始
有键闭合
否?
去抖动
确有键按下
判断键号
释放
返回返回
Y
N
Y
N
3.11 算术运算程序设计
算术运算程序的过程为:先判断输入的运算符是+、-、*、/ 中的哪一个,若是+或-,则要判断运算结果是否溢出,溢出则显示错误信息,没溢出就显示运算结果,若是/,则要先判断除数是否为零,为零就显示错误信息,不为零则显示运算结果,若是-,则直接显示运算结果,流程图:
3.111 显示程序设计
显示程序的过程为:显示开始时,先进行LCD 的初始化,判断是否显示,若不显示,则返回,若有显示则进行相应功能的设置,然后送地址和数据,再判断是否显示完,显示完则返回,没有显示完则继续送地址.流程图:
开始
运算符
是?
加 乘
减
除
运算结溢
出?
除数为
0?
错误信息送显示
缓冲
显示结果
Y Y
N
N
3.1111 C 程序的图片
显示开始
LCD 初始化
显示
相应功能设置
送地址
是否显示完
返回
送数据
Y
N
第四章系统软件结构设计要求
1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。
2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。
3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。
第五章实验结果分析
调试一般分为以下四个阶段:1、编写程序并查错;2、在C语言的编译系统中编译源程序3、对程序进行编译连接,并及时发现程序中存在的错误;4、改正错误; 5 、仿真
在本次调试中出现的问题有:
1、在程序中有的函数名未定义;
2、在抄录程序时,少录入一些字符,如:“;”、“{”、“-”等符号,而出现错误;
3、有一些函数名录入时少写一个字母或顺序颠倒;
4、没有注意函数名的调用及定义;
参考文献
1.谭浩强C语言第二版
2.王静霞单片机应用技术
3.龚运新单片机C语言开发技术
仿真图仿真图1:
仿真图2:。