单片机-- 简易计算器汇编程序
基于单片机的计算器——汇编
基于单片机的计算器——汇编编号:单片机综合设计实训 (论文)说明书题目:基于单片机的电子计算器院(系):专业:学生姓名:学号:指导教师:年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 设计目的通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
单片机的简易计算器毕业设计
单片机的简易计算器毕业设计简易计算器是一种基本、常见的电子设备,它能够对数字进行简单的加减乘除运算。
单片机作为一种小型、低功耗的微型计算机,非常适合用于设计和实现计算器的功能。
在本文中,我们将以单片机为基础,设计和实现一个简易计算器。
一、设计思路1.硬件设计:-使用单片机作为主控制器。
-接入键盘矩阵和显示器。
-使用LED灯作为指示灯,用于显示运算符和结果。
2.软件设计:-通过键盘输入数字和运算符。
-将输入的数字和运算符转换成相应的控制信号。
-进行运算,并将结果显示在屏幕上。
3.功能实现:-实现加法、减法、乘法和除法运算。
-提供清零、退格和等号等功能。
-支持小数和负数的输入和运算。
-提供错误提示功能,例如除数不能为零等。
二、具体实现1.硬件实现:-将键盘矩阵的行和列与单片机的IO口相连,通过扫描来检测按键的输入。
-将显示器与单片机的IO口相连,通过控制引脚来发送和接收数据。
-将LED灯与单片机的IO口相连,设置相应的引脚状态来显示不同的指示信号。
2.软件实现:-使用C语言编写程序,通过中断和轮询的方式,实现键盘输入的检测和数据的读取。
-将读取到的数据进行解析,并根据不同的按键进行相应的操作。
-根据输入的数字和运算符,进行相应的运算并输出结果。
3.功能实现:-加法、减法、乘法和除法运算可以通过相应的算法实现,例如加法可以通过循环和位运算来实现。
-清零功能可以将运算结果和输入的数字都清零,退格功能可以删除输入的最后一个数字或运算符。
-支持小数运算可以在运算过程中进行进位和进位操作,支持负数运算可以通过判断运算符来进行相应的处理。
-错误提示功能可以通过对输入的数据进行检查和判断来实现,例如判断除数是否为零。
三、总结通过上述的设计和实现,我们可以成功地设计和制作一个单片机的简易计算器。
通过这个计算器,用户可以进行简单的加减乘除运算,同时还具备清零、退格、小数和负数等功能。
这个计算器可以应用在日常生活中的计算场景,方便用户进行各种简单的运算操作。
基于单片机的简易计算器编程
if(t[j]==0x34) { DispCharacter(0,k--,'4');}
if(t[j]==0x35) { DispCharacter(0,k--,'5');}
if(t[j]==0x36) { DispCharacter(0,k--,'6');}
}
for(i=r-2;i>=0;i--)
{
tx=u;
u=u+(( unsigned long )(t[i]-48)*(pow(r-i-2)));
if(u<tx) { systemerror();}
}
}
void hou( ) //计算符号后面的数值
{
int j,flash=0; //标志位:从不是零的高位开始显示!
int k=12;
for(j=3;j>=0;j--)
{
if(f3==0) { break; }
if(m[0]==0x30&&m[1]==0x30&&m[2]==0x30) { f3=0; break; }
PinRW=0;
PinE=0;
PinData = data1;
PinE=1;
ShortDelay(10);
PinE=0;
PinRW=1;
PinRS=0;
}
void WriteInstruc(char Instruc)
{
while(StatusCheck());
if(m[j]==0x32) { DispCharacter(1,k++,'2'); flash++;}
单片机简易计算器设计(二)2024
单片机简易计算器设计(二)引言:单片机简易计算器是一种以单片机为核心实现基本算术运算的小型电子设备。
本文继续探讨单片机简易计算器的设计方案,并详细介绍了其具体实现步骤和功能。
正文:第一大点:电路设计1. 选择适当的单片机型号2. 设计电源电路,确保稳定供电3. 搭建输入输出电路,包括按键和显示模块的连接4. 设计外部调试接口,方便程序的调试和更新5. 进行电路的模拟仿真和实际测试,确保电路的正常工作第二大点:程序编写1. 定义输入输出的数据结构2. 编写初始化程序,配置端口和寄存器3. 编写按键扫描程序,实现按键的读取和编码4. 编写基本算术运算程序,包括加法、减法、乘法和除法5. 编写显示程序,将结果显示在数码管或液晶屏上第三大点:算法优化1. 选择合适的算法,使计算速度尽可能快2. 使用位运算代替乘除法运算,提高运算效率3. 使用查表法来加速计算过程4. 增加缓存机制,优化存储空间的使用5. 对程序进行反复优化和测试,确保算法的准确性和高效性第四大点:错误处理与异常处理1. 设计输入错误的检测机制,防止用户输入无效的数据2. 处理溢出和除零等运算错误,避免程序崩溃3. 设计异常处理程序,对错误输入进行友好提示4. 进行充分的测试和调试,确保程序的稳定性5. 添加日志功能,记录错误信息和运行状态,便于排查问题第五大点:功能扩展1. 添加科学计算功能,如平方根、三角函数等2. 实现单位换算功能,方便不同单位之间的转换3. 增加储存器功能,可以保存计算结果或中间数据4. 设计菜单界面,使用户可以自由选择不同的功能5. 进行实际应用测试,检验扩展功能的可靠性和实用性总结:本文对单片机简易计算器的设计进行了全面的阐述。
通过合理的电路设计、程序编写和算法优化,以及错误和异常处理,使得计算器具备稳定高效的运算能力。
同时还介绍了功能扩展方面的设计思路,为后续的开发和升级提供了参考。
51单片机简易计算器设计
51单片机简易计算器设计一、设计思路计算器的基本功能包括加法、减法、乘法和除法。
我们可以使用按键作为输入方式,将输入的数字和操作符暂时保存在内存中,然后根据操作符进行相应的运算。
最后再将运算结果显示在数码管上。
具体设计思路如下:1.确定计算器所需的硬件组件:数码管、按键、51单片机和相关电路。
2.定义按键与数字和操作符的对应关系。
3.编写51单片机的程序,实现按键输入、运算和结果显示的功能。
二、硬件设计1.数码管:使用常见的7段数码管作为显示器,通过引脚连接到51单片机的IO口。
2.按键:使用4个按键分别表示数字输入键、加法键、减法键和等于键。
三、软件设计1.初始化:将数码管引脚设为输出模式,将按键引脚设为输入模式。
2.按键处理:采用中断方式检测按键输入,通过编程判断所按的键。
3.数字输入:将按键所对应的数字保存在变量中,最多支持四位数的输入。
4.操作符输入:将按下的操作符保存在变量中。
5.运算:根据保存的操作符进行相应的运算,并将结果保存在变量中。
6.结果显示:将结果显示在数码管上。
四、代码实现下面是一个示例代码的框架,供参考:```c#include <reg52.h>sbit SDA = P0^0; // I2C总线数据线sbit SCL = P0^1; // I2C总线时钟线//定义按键的IO口sbit BUTTON0 = P1^0; // 数字输入键sbit BUTTON1 = P1^1; // 加法键sbit BUTTON2 = P1^2; // 减法键sbit BUTTON3 = P1^3; //等于键unsigned char num1 = 0; // 第一个操作数unsigned char num2 = 0; // 第二个操作数unsigned char op = 0; // 操作符unsigned char result = 0; // 运算结果//判断按键所对应的数字或操作符void buttonif (BUTTON0 == 0) // 数字输入键//将按键所对应的数字保存在变量中//显示数字}else if (BUTTON1 == 0) // 加法键//保存操作符为加号}else if (BUTTON2 == 0) // 减法键//保存操作符为减号}else if (BUTTON3 == 0) //等于键//根据保存的操作符进行相应的运算//将结果保存在变量中//显示结果}void mainwhile (1)button(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。
单片机设计简易计算器
单片机设计简易计算器单片机是指将整个计算机系统集成在一块芯片上的微处理器。
设计一个简易计算器,可以使用单片机实现各种基本运算,如加、减、乘、除以及开方等。
首先,我们需要选择单片机的类型和开发环境。
常用的单片机有51系列、AVR系列、ARM系列等。
根据具体需求,选择一种合适的单片机进行设计。
接下来,需要设计计算器的硬件电路。
计算器的核心部分是输入和输出部分,因此需要设计一个合适的显示屏和按键阵列。
一种常用的显示屏是数码管,可以显示数字和一些特殊字符。
按键阵列可以使用矩阵型按键。
在硬件设计完成后,需要进行软件编程。
首先要开发一个简单的操作系统,以便管理单片机的资源和任务。
然后,根据计算器的功能需求,在操作系统上开发相应的计算器应用程序。
计算器的软件程序主要包括以下几个模块:1.输入模块:通过按键阵列读取用户输入的数字和操作符,并且根据用户的输入进行相应的处理。
2.运算模块:根据用户输入的操作符进行相应的运算,包括加、减、乘、除以及开方等。
3.输出模块:将运算结果通过数码管显示出来。
以下是一个简单计算器的软件程序设计示例:```c#include <reg51.h>sbit row1 = P1^0;sbit row2 = P1^1;sbit row3 = P1^2;sbit col1 = P1^3;sbit col2 = P1^4;sbit col3 = P1^5;sbit col4 = P1^6;void delay(unsigned int ms)unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 112; j++);unsigned char keyscarow1 = 0; // 设置第一行为低电平row2 = 1;row3 = 1;if (col1 == 0) { delay(10); while(col1 == 0); return '1'; } if (col2 == 0) { delay(10); while(col2 == 0); return '2'; } if (col3 == 0) { delay(10); while(col3 == 0); return '3'; }if (col4 == 0) { delay(10); while(col4 == 0); return '+'; } row1 = 1;row2 = 0; // 设置第二行为低电平row3 = 1;if (col1 == 0) { delay(10); while(col1 == 0); return '4'; } if (col2 == 0) { delay(10); while(col2 == 0); return '5'; } if (col3 == 0) { delay(10); while(col3 == 0); return '6'; } if (col4 == 0) { delay(10); while(col4 == 0); return '-'; } row1 = 1;row2 = 1;row3 = 0; // 设置第三行为低电平if (col1 == 0) { delay(10); while(col1 == 0); return '7'; } if (col2 == 0) { delay(10); while(col2 == 0); return '8'; } if (col3 == 0) { delay(10); while(col3 == 0); return '9'; } if (col4 == 0) { delay(10); while(col4 == 0); return '*'; } return 0;void display(unsigned char number)P2 = number;void maiunsigned char num1 = 0, num2 = 0, result = 0; unsigned char operator = 0;while (1)num1 = keyscan(;if (num1 == '+')operator = '+';} else if (num1 == '-')operator = '-';} else if (num1 == '*')operator = '*';} else if (num1 != 0)while (1)num2 = keyscan(;if (num2 != 0)break;}}if (operator == '+')result = num1 + num2;} else if (operator == '-')result = num1 - num2;} else if (operator == '*')result = num1 * num2;}display(result);}}```以上程序是一个简单的计算器程序示例。
H-L单片机【简单计算器程序】xys
//***********H-L51单片机【简单计算器】程序************// /*知识运用到:LED灯,蜂鸣器,LED显示器动静态显示,矩阵键盘输入,定时器*///************************************************************************** ***************************************************************************#include <reg52.h> //【计算器】键盘模式 1 2 3 4 【功能;加减乘除基本运算,两位输入四位可#define uint unsigned int // 5 6 7 8 带一位小数点输出,最大显示:99*99=9801】#define uchar unsigned char // 9 0 =sbit dula=P2^6; //控制数码管段选的锁存器锁存端// + - * / sbit wela=P2^7; //控制数码管位选的锁存器锁存端sbit beep=P2^3; //蜂鸣器接口uchar num=0,temp,shu,xshu,ge,shi,bai,qian,d,e,f,g;long i,j,xiaoshu,aa; //i用于表示输入次数,j 表示输入运算符(可用于区分a、b),aa用于定时器float zh,a1,a2,b1,b2,a2a1,b2b1,c;//a2a1、b2b1运算等于zh,由于有运算结果小数点输出,故需定义为浮点型uchar code table[]={ //编码表table[]={ 0,1,2,3 }0x3f,0x06,0x5b,0x4f, // 4,5,6,7,0x66,0x6d,0x7d,0x07, // 8,9,A,B,0x7f,0x6f,0x77,0x7c, // C,D,E,F,无显示,"_",".",0x39,0x5e,0x79,0x71,0x00,0x08,0x80};//***********************【延迟函数】************************//void delay(uint z){uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--);}//***********************【中断函数】************************// void jishu() interrupt 1{aa=0;}//***********************【显示函数】************************//display1(d) // 【个位显示】{P0=table[d]; //将第num 个显示编码送P0dula=1; //一个下降沿将数据锁存dula=0;P0=0xdf; //位选通全部的数码管wela=1; //一个下降沿将数据锁存wela=0;}display2(e){P0=table[e]; //【十位显示】dula=1;dula=0;P0=0xef;wela=1;wela=0;}display3(f){P0=table[f]; //【百位显示】dula=1;dula=0;P0=0xf7;wela=1;wela=0;}display(g) //【千位显示】{P0=table[g];dula=1;dula=0;P0=0xfb;wela=1;wela=0;}display4(shu) //【数显示】//*********************************千百十个四位显示▼▼{xiaoshu=zh*10;xshu=xiaoshu%10;if(xshu>=1) //******************************判断是否存在小数点▼{if(shu/100>=1)//(判断有没有百位){bai=shu/100;shi=shu%100/10;ge=shu%100%10;while(1){display(bai);delay(2);display3(shi);delay(2);display2(ge);delay(2);display2(18);delay(2);display1(xshu);delay(2);}}//if(shu/100else if(shu/10>=1)//(判断有没有十位){shi=shu/10;ge=shu%10;while(1){display3(shi);delay(2);display2(ge);delay(2);display2(18);delay(2);display1(xshu);delay(2);}}//else if(shu/10else if(shu/1>=1){ge=shu/1;while(1){display2(ge);delay(2);display2(18);delay(2);display1(xshu);delay(2);}}//else if(shu/1else{while(1){display2(18);delay(2);display1(xshu);delay(2);} }}//if(xshu //******************************判断是否存在小数点▲else //第一个if对应的else{if(shu/1000>=1)//(判断有没有千位){qian=shu/1000;bai=shu%1000/100;shi=shu%1000%100/10;ge=shu%1000%100%10;while(1){display(qian);delay(2);display3(bai);delay(2);display2(shi);delay(2);display1(ge);delay(2);}}//if(qianelse if(shu/100>=1)//(判断有没有百位){bai=shu/100;shi=shu%100/10;ge=shu%100%10;while(1){display3(bai);delay(2);display2(shi);delay(2);display1(ge);delay(2);}}else if(shu/10>=1)//(判断有没有十位){shi=shu/10;ge=shu%10;while(1){display2(shi);delay(2);display1(ge);delay(2);}}else display1(shu);}//else} //【数显示】//****************************千百十个四位显示▲▲display5(shi,ge) //【定时】十个位显示,用于防止死循环的动态显示{EA=1;ET0=1;TMOD=0x01;TH0=(65536-100000)/256;//0.5s计数TL0=(65536-100000)%256;while(aa){display2(shi);delay(5);display1(ge);delay(5);TR0=1; //启动定时器TR0}display1(17);delay(300);display1(16);delay(300);display1(17);}//*********************【蜂鸣器鸣灭函数】**********************//void whbeep(){while(temp!=0xf0) //这段程序是检测按键是否被释放{temp=P3; //如果没有释放就一直等待并且temp=temp&0xf0;beep=0; //蜂鸣器一直响}beep=1; //释放后关闭蜂鸣器}//************************【主函数】*************************////**************【主要通过键盘检测等技术来实现】*************//void main(){i=0;j=0;display4(0);while(1){P3=0xfe; //●★●给P3.0 送低电平,其余为高电平,即1111 1110,以便检测第一列的四个键盘temp=P3; //把P3 口数据读回来temp=temp&0xf0;//把P3 口与11110000 相与while(temp!=0xf0)//当有键按下刚一定不相等,于是进入//下一步检测{delay(5); //软件延时去抖动temp=P3;temp=temp&0xf0;switch(temp) //因为我们刚才是将第一行置的低,在这里再判断是第几列{case 0xe0:num=1;i++; break; //如果temp=0xee 则为第一行和第一列的交叉点,由此我们知道是矩阵键盘上的第一个键被按下,我们给num=1case 0xd0:num=2;i++; break;case 0xb0:num=3;i++; break;case 0x70:num=4;i++; break;}whbeep();// 控制蜂鸣器的响delay(8); //延时while(temp!=0xf0); //软件松手检测if(j==0){if(i==1){a2=num;a2a1=a2;display1(a2a1);P1=0xfe;}//如果j=0,i=1,表示第一次输入,赋值给a2-》显示-》开第一个灯else {a1=num;a2a1=10*a2+a1; aa=4;display5(a2,a1);TR0=0;P1=0xfe;}//如果j=0,i=1,表示第二次次输入,赋值给a1-》关计数器-》显示-》开第一个灯}else{if(i==1){b2=num;b2b1=b2;display1(b2b1);P1=0xf8;}////如果j>=1,i=1,表示第一次输入,赋值给a2-》显示-》开第一个灯else {b1=num;b2b1=10*b2+b1; aa=4;display5(b2,b1);TR0=0;P1=0xf8;}//如果j>=1,i=2,表示第二次次输入,赋值给a1-》关计数器-》显示-》开第一个灯}}//while(temp!=0xf0)P3=0xfd; //●★●给P3.1 送低电平,其余为高电平,即1111 1101,以便检测第二列的四个键盘temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;switch(temp){case 0xe0:num=5;i++; break;//i自加作用为标记第一第二次输入,过程为i=1、2、0、1、2 。
项目报告 简易计算器 单片机汇编语言
项目报告三、简易计算器一、任务分析利用MOVC、DB指令编写程序。
用单片机实验箱来实现简易计算器的功能,实现的现象是“1+2=3”,是通过独立式按键来控制数码管来实现“1+2=3”的。
二、硬件电路图三、程序框图主程序:按键子程序:四、程序代码;显示1+2=3,效果”1+23“逐个数码管显示,数码管动态显示ORG 0000HAJMP MAINORG 0100HMAIN: MOV SP,#60HMOV DPTR,#TAB;---------------------------------M1: ACALL ANJIANMOV A,50HCJNE A,#0,M2AJMP M1;--------------------------------- M2: CJNE A,#1,M3MOV 20H,AMOV P1,#20HMOVC A,@A+DPTRMOV P0,AAJMP M1;----------------------------------- M3: CJNE A,#2,M4MOV P1,#10HMOVC A,@A+DPTRMOV P0,AAJMP M1;---------------------------------- M4: CJNE A,#3,M5MOV 21H,AMOV P1,#08HMOVC A,@A+DPTRMOV P0,AAJMP M1;---------------------------M5: MOV A,20HADD A,21HINC AMOV P1,#04HMOVC A,@A+DPTEMOV P0,AAJMP M1;------------------------ ANJIAN: MOV 50H,#0JB P2.0,J1ACALL DELAY10MSJB P2.0,J1AJ0: JNB P2.0,$ACALL DELAY10MSJNB P2.0,AJ0MOV 50H,#1RETJ1: JB P2.1,J2ACALL DELAY10MSJB P2.1,J2AJ1: JNB P2.1,$ACALL DELAY10MSJNB P2.1,AJ1MOV 50H,#2RETJ2: JB P2.2,J3ACALL DELAY10MSJB P2.2,J3AJ2: JNB P2.2,$ACALL DELAY10MSJNB P2.2,AJ2MOV 50H,#3RETJ4: JB P2.3,RETTACALL DELAY10MSJB P2.3,RETTAJ4: JNB P2.3,$ACALL DELAY10MSJNB P2.3,AJ4MOV 50H,#4RETT: RET;----------------------------DELAY10MS: MOV R5,#20L1: MOV R6,#250DJNZ R6,$DJNZ R5,L1RET;---------------------------TAB: DB 00H,06H,46H,5BH,4FHEND五、仿真效果按下k1键第一位数码管显示 1按下k2键第二位数码管显示+按下k3键第三位数码管显示2按下k4键第四位数码管显示1+2的值3六、心得体会在经过这次实验后,我发现在编程时必须先想好流程图不然在完美的程序也出不了结果。
基于51单片机的简易计算器设计
基于51单片机的简易计算器设计设计一个基于51单片机的简易计算器,主要功能包括加减乘除四则运算和百分数计算。
下面是设计的详细步骤:1.硬件设计:-使用51单片机作为主控芯片。
-连接16x2的LCD显示屏,用于显示输入和计算结果。
-连接16个按键开关,用于输入运算符和数字。
-连接4个LED灯,用于指示四则运算的选择。
2.软件设计:-初始化LCD显示屏,并显示欢迎信息。
-监听按键输入,在接收到输入后,根据输入的按键值判断操作类型。
-如果按键值对应数字键,保存输入的数字,并在LCD上显示当前输入的数字。
-如果按键值对应四则运算符(+、-、*、/),保存当前输入的数字,并保存运算符。
-如果按键值对应等号(=),根据保存的数字和运算符进行相应的运算,计算结果保存并显示在LCD上。
-如果按键值对应清零(C),将所有保存的数据清空,并显示初始状态。
-如果按键值对应百分号(%),将当前数字除以100并显示在LCD上。
3.主要函数说明:- void init_lcd(:初始化LCD显示屏。
- void display_lcd(char* str):将指定字符串显示在LCD上。
- void clear_lcd(:清空LCD显示屏。
- char get_key(:获取按键输入的值。
- void calculate(:根据保存的数字和运算符进行计算。
- void add_digit(char digit):将输入的数字添加到当前数字中。
- void set_operator(char op):保存运算符。
- void clear_data(:清空所有保存的数据。
4.主要流程:-初始化LCD显示屏并显示欢迎信息。
-在循环中监听按键输入,并根据输入的按键值进行相应的操作。
-根据不同的按键值,调用不同的函数进行处理。
-最后计算结果显示在LCD上。
以上是基于51单片机的简易计算器设计的详细步骤和主要函数说明。
你可以根据这个设计框架进行具体的代码实现。
MSP430单片机课程设计-简单计算器设计
MSP430 单片机课程设计
unsigned char disbuff[8] = {20,20,0,0,0,0,0,0};//初始数码管 unsigned char getkey(void); unsigned int qiushu(); void clear(void); void zhuanhuan(); void delay(unsigned int j) { for(uint i=0;i<j;i++); } unsigned int qiushu() //转化成相应的十进制整数 {unsigned int y; y=disbuff[2]*100000+disbuff[3]*10000+disbuff[4]*1000+disbuff[5]*100 +disbuff[6]*10+disbuff[7]; return y; } void clear(void) {unsigned int a; for(a=7;a>1;a--) disbuff[a]=0; } //清除屏幕
实验二:猜数字游戏设计
一、目的
利用单片机芯片 MSP430x14x、四位八段共阴数码管,设计一个猜数字游戏, 并将游戏结果显示在数码管上。
二、功能
要求该设计能实现如下的功能:游戏开始后,先在程序内随即设定四个 0-9 之间的不同数,作为游戏数答案。然后用户给出 4 个数,该软件会将您提交的数 与它自动产生的数进行比较,结果在八段数码管上显示成"kAsB"。k 代表位置正 确数字也正确的字数,s 代表数字正确但位置不正确的字数。当 k=4 且 s=0 时, 则比较正确显示“GOOD” ,进行下一次比较。
4
MSP430 单片机课程设计
基于51单片机的简易计算器设计
基于51单片机的简易计算器设计一、引言计算器是一种执行基本数学运算的电子设备,现在市面上有各种类型的计算器,从小型的手持计算器到大型的科学计算器。
本设计基于51单片机设计了一种简易计算器,可以实现加法、减法、乘法和除法等基本运算。
二、设计思路1.系统硬件设计本设计使用的51单片机芯片选择了常用的STC89C52芯片,具有强大的功能和稳定性。
外设有键盘、数码管和LCD液晶显示屏。
2.系统软件设计系统的软件设计基于C语言进行,使用51单片机的汇编语言和C语言进行编程。
软件主要分为键盘输入处理、运算处理和结果显示三个部分。
三、系统硬件设计1.键盘输入部分使用4x4矩阵键盘作为输入设备,将键盘的4行4列分别接入到51单片机的4个IO口上,通过行列扫描的方式来检测按键的状态。
2.数码管显示部分使用共阳极的数码管来显示结果,通过提供适当的电压和信号控制来显示所需的数字。
3.LCD液晶显示屏为了方便用户查看输入和结果,本设计还使用了LCD液晶显示屏。
通过串口通信将结果传输到液晶显示屏上进行显示。
四、系统软件设计1.键盘输入处理通过行列扫描的方式检测键盘的按键状态,当检测到按键按下时,将对应的按键值存储起来。
2.运算处理根据用户的输入进行相应的运算处理。
根据检测到的按键值进行不同的运算操作,如加法、减法、乘法和除法。
3.结果显示将运算的结果通过串口通信传输到LCD液晶显示屏上进行显示。
五、系统实现1.硬件连接将键盘的行列引脚接到51单片机的对应IO口上,数码管和LCD液晶显示屏也分别连接到单片机的IO口上。
2.软件编码通过C语言编写系统软件,包括键盘输入处理、运算处理和结果显示三个模块。
3.调试测试将编写好的软件烧录到单片机上,通过键盘输入进行测试,并观察数码管和LCD液晶显示屏上的输出结果。
六、总结本设计基于51单片机实现了一个简易计算器,通过键盘输入进行基本的运算操作,并将结果通过数码管和LCD液晶显示屏进行显示。
基于单片机的简易计算器设计原理图及程序代码
for(i=2;i<9;i++)
dsp[i]=12;
c=0;
}
while(dsp[0]==15&&c==0)
{
dsp[0]=keyscan();
if(dsp[0]==14||dsp[0]<10)
{
dsp[0]=14;
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
r[3]=(x%10000)/1000;
r[4]=(x%100000)/10000;
r[5]=(x%1000000)/100000;
r[6]=(x%10000000)/1000000;
r[7]=x/10000000;
}
}
if(k==13)
{
if(y==0)
{
BEEP=0;
r[0]=11;
r[1]=11;
if(k==10)
{
x=x+y;
if(x>99999999)
{
BEEP=0;
r[0]=11;
r[1]=11;
r[2]=10;
r[3]=12;
r[4]=12;
r[5]=12;
r[6]=12;
r[7]=12;
}
else
{
r[0]=x%10;
r[1]=(x%100)/10;
r[2]=(x%1000)/100;
P2=0xff;
}
}
ET0=1;
}
x=10000*x;
x=x+a[0]+a[1]*10+a[2]*100+a[3]*1000+a[5]*100000+a[6]*1000000+a[7]*10000000;
单片机简易计算器设计(汇编语言)
KEYBUF EQU 40H ;键号存放单元ORG 0000HLJMP MAINORG 0030HMAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值MOV R0,#30H ;显示首地址MOV R2,#0CH ;计算数据存放单元个数CLR AQING: MOV @R0,A ;将数据存放单元清零INC R0DJNZ R2,QINGMOV P0,#8FH ;关闭显示MOV R1,#30H ;将显示首地址存放R1里;===============================================;五位无符号显示子程序DIS1: MOV R0,#30H ;把显示数据第一位放在R0里MOV R2,#04H ;把显示的位码放在R2里MOV R3,#05H ;把显示的长度放在R3里DIS2: MOV A,@R0ANL A,#0FH ;屏蔽显示数据的高四位MOV B,AMOV A,R2ANL A,#0FH ;屏蔽位码的高四位SWAP AORL A,BMOV P0,A ;送总显示数据到P0显示LCALL DEL Y4ms ;调用延时4msINC R0 ;取下一个显示数据DEC R2DJNZ R3,DIS2 ;四位显示晚后重新开始显示;===================================================;键盘扫描子程序WAIT: MOV P1,#0FFH ;P1口送高电平CLR P1.0 ;第一行清零MOV A,P1 ;读P1口ANL A,#0F0H ;低位屏蔽XRL A,#0F0H ;判断低位是否有低电平,即判断是否有按键按下JZ NOKEY1 ;地位有低电平继续扫描,否者跳到第而行去扫描LCALL DEL Y10ms ;延时10ms去抖在进行判断是否有按键按下MOV A,P1 ;继续读P1口ANL A,#0F0H ;判断低位是否有低电平CJNE A,#0E0H,NK1 ;如果扫描数据不为0E0H就转到NK1MOV KEYBUF,#0 ;否者判断为0号键AJMP DK ;转DK1查表程序NK1: CJNE A,#0D0H,NK2 ;如果扫描数据不为0D0H就转到NK2 MOV KEYBUF,#1 ;否者判断为1号键AJMP DK ;转DK2查表程序NK2: CJNE A,#0B0H,NK3 ;如果扫描数据不为0B0H就转到NK3 MOV KEYBUF,#2 ;否者判断为2号键AJMP DK ;转DK3查表程序NK3: CJNE A,#70H,NK4 ;如果扫描数据不为70H就转到NK4 LJMP SAN_CHUNK4: NOPNOKEY1: MOV P1,#0FFH ;和上面相同CLR P1.1MOV A,P1ANL A,#0F0HXRL A,#0F0HJZ NOKEY2LCALL DEL Y10MSMOV A,p1ANL A,#0F0HXRL A,#0F0HJZ NOKEY2MOV A,P1ANL A,#0F0HCJNE A,#0E0H,NK5MOV KEYBUF,#3AJMP DKNK5: CJNE A,#0D0H,NK6MOV KEYBUF,#4AJMP DKNK6: CJNE A,#0B0H,NK7MOV KEYBUF,#5AJMP DKNK7: CJNE A,#70H,NK8MOV KEYBUF,#10 ;否者判断为3号键AJMP DK ;转DK4查表程序NK8: NOPNOKEY2: MOV P1,#0FFHCLR P1.2MOV A,P1ANL A,#0F0HXRL A,#0F0HJZ NOKEY3LCALL DEL Y10MSANL A,#0F0HXRL A,#0F0HJZ NOKEY3MOV A,P1ANL A,#0F0HCJNE A,#0E0H,NK9MOV KEYBUF,#6AJMP DKNK9: CJNE A,#0D0H,NK10MOV KEYBUF,#7AJMP DKNK10: CJNE A,#0B0H,NK11MOV KEYBUF,#8AJMP DKNK11: CJNE A,#70H,NK12LJMP DENG_HAONK12: NOPNOKEY3: MOV P1,#0FFHCLR P1.3MOV A,P1ANL A,#0F0HXRL A,#0F0HJZ NOKEY4LCALL DEL Y10MSMOV A,P1ANL A,#0F0HXRL A,#0F0HJZ NOKEY4MOV A,P1ANL A,#0F0HCJNE A,#0E0H,NK13LJMP CHUNK13: CJNE A,#0D0H,NK14LJMP CHENGNK14: CJNE A,#0B0H,NK15LJMP JIANNK15: CJNE A,#70H,NK16LJMP JIANK16: NOP;======================================================= ;查表求键值程序MOV A,KEYBUF ;查表程序查对应的键号数据MOV DPTR,#TABLE ;把表头地址放入DPTRMOVC A,@A+DPTR ;A里面存放的为键号,利用A和表头地址找到对应的键号数据MOV B,A ;把查到的数据送往显示单元INC R1 ;取下一个显示单元MOV A,R1CJNE A,#36H,DKA1 ;判断显示单元是否已满MOV R1,#35H ;35H,36H单元用于更好的控制五位显示AJMP DKADKA1: MOV 34H,33H ;按键代码按左移显示,先按先显示MOV 33H,32HMOV 32H,31HMOV 31H,30HMOV 30H,BDKA: MOV A,P1 ;读P1口ANL A,#0F0H ;屏蔽高四位XRL A,#0F0H ;地位是有低电平JNZ DKA ;如果有低电平继续读P1口,否者向下执行,查找第二行NOKEY4: LJMP DIS1;===================================;功能按键功能设定DENG_HAO:MOV DPTR,#JI_SUAN ;等号键功能通过加、减、乘、除设定的偏移量来调用子程序MOV A,3CH ;3CH存放的为功能程序入口地址偏移量JMP @A+DPTR ;转移到按键功能程序JI_SUAN: AJMP JIA1 ;加计算子程序AJMP JIAN1 ;减计算子程序AJMP CHENG1 ;乘计算子程序AJMP CHU ;除计算子程序;=======删除键功能SAN_CHU: ACALL QING_DISAJMP DKA;=======加键功能JIA: MOV 3CH,#00HACALL CUN_SHUACALL QING_DISAJMP DKA;=======减键功能JIAN: MOV 3CH,#02HACALL CUN_SHUACALL QING_DISAJMP DKA;=======乘键功能CHENG: MOV 3CH,#04HACALL CUN_SHUACALL QING_DISAJMP DKA;=======除键功能CHU: MOV 3DH,#06HACALL CUN_SHUACALL QING_DISAJMP DKA;=================================;存被加(减、乘、除)数,存放在37H~3BH里CUN_SHU: MOV 37H,30H ;36H存放的为最低位MOV 38H,31HMOV 39H,32HMOV 3AH,33HMOV 3BH,34H ;3AH存放的为最高位RET;================================;清除显示单元QING_DIS: MOV R1,#30HQING1: MOV @R1,#00HINC R1MOV A,R1CJNE A,#36H,QING1MOV R1,#30HLOP1: RET;================================;十进制加法子程序JIA1:MOV A,37H ;个位被加数ADD A,30H ;个位被加数+加数MOV B,#10 ;十六进制除10转换成BCD码DIV ABMOV 30H,B ;余数即个位存放在30HMOV 37H,A ;商存放在37HMOV A,38H ;十位被加数ADD A,31H ;十位被加数+加数ADD A,37H ;加上个位之和的进位MOV 37H,#00H ;清除37HMOV B,#10 ;十六进制除10转换成BCD码DIV ABMOV 31H,B ;余数即十位存放在31HMOV 38H,A ;商存放在38HMOV A,39H ;百位计算同十位ADD A,32HADD A,38HMOV 38H,#00HMOV B,#10DIV ABMOV 32H,BMOV 39H,AMOV A,3AH ;千位计算同十位ADD A,33HADD A,39HMOV 39H,#00HMOV B,#10DIV ABMOV 33H,BMOV 3AH,AMOV A,3BH ;万位计算同十位ADD A,34HADD A,3AHMOV 3AH,#00HMOV B,#10DIV ABMOV 34H,BMOV 3BH,#00HAJMP DKA;=====================JIAN1: AJMP DKACHENG1: AJMP DKACHU1: AJMP DKA;============================================= ;延时程序和查表表格DELY4ms: MOV R6,#8 ;延时4毫秒D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETDELY10ms:MOV R6,#20 ;延时10毫秒D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2RETTABLE: DB 07H, 04H, 01H ; / 本表格是以键盘为参考7 8 9 / DB 08H, 05H, 02H ; * 4 5 6 *DB 09H, 06H, 03H ; - 1 2 3 -DB 00H, 00H ;= + 清除0 = +END。
单片机简易数字计算器-汇编
基于单片机的简易计算器设计自动化控制一班kaoyanbaomu521摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。
本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。
关键词:单片机计算器范围加减乘除1 引言1.1 计算器的历史说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。
中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。
这种算筹多用竹子制成,也有用木头,兽骨充当材料的。
约二百七十枚一束,放在布袋里可随身携带。
直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。
17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。
1.2 电子计算器的特殊键在使用电子计算器进行四则运算的时候,一般要用到数字键,四则运算键和清除数据键。
除了这些按键,还有一些特殊键,可以使计算更加简便迅速。
2 单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机设计简易计算器
3
开始 是否是+
是否是—
是否是*
是否是/
结束 图 3.2 运算子程序流程图
Result=c+d
Resule=c-d
Resule=c*d
Resule=c/d
键盘扫描流程图为:
开始 延时10ms
是否按键按下
DDRD=0XFE PORTD=0XF0
DDRD=0X0F
是否是第一排
按键
DDRD=0XFD
PORTD=0XF0
因此选用了 ATMEGA16 单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是
实现设计的中心环节。本设计使用的程序语言是 C 语言,在“ICC AVR”中运行,调试,
直到运行出正确结果,然后输出后缀名为.HEX 格式的文件,以备在 Protues 中仿真使用。
程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。
1 设计思想
武汉理工大学《单片机》课程设计说明书
简易计算器 Simply Calculator
此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;
单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分
主要完成单片机输出的显示。
本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致
2.2 数字显示与计算
本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接 地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端 (H/L),D0—D7为数据I/O口。
首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如 果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数, 如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用 加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用 乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NAME T11 单片机-- 简易计算器汇编程序;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7 ; T11 8279键盘显示接口实验二CSEG AT 0000HLJMP STARTCSEG AT 4100HSTART: MOV DPTR,#00CFE9H ;8279命令字MOV A,#0D1H ;清显示MOVX @DPTR,ALOOP1: MOVX A,@DPTRANL A,#0FHJZ LOOP1 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R1,A ;保存键值加个FMOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R1ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令LOOP2: MOVX A,@DPTR ;输入显示符号ANL A,#0FHJZ LOOP2 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R2,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#81H ;选中LED2MOVX @DPTR,AMOV A,R2ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令LOOP3: MOVX A,@DPTR ;第二个数ANL A,#0FHJZ LOOP3 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R3,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#82H ;选中LED3MOVX @DPTR,AMOV A,R3ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令LOOP4: MOVX A,@DPTR ;====ANL A,#0FHJZ LOOP4 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R4,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#83H ;选中LED4MOVX @DPTR,AMOV A,R4ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令CJNE R4,#0CEH,LOOP5 ;判断第四个输入是不是等于号jia: CJNE R2,#0cAH,jianMOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1ADD A,R3LJMP XIANSHIjian: CJNE R2,#0cBH,chengMOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1SUBB A,R3LJMP XIANSHIcheng:CJNE R2,#0CcH,CHUMOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1MOV B,R3MUL ABLJMP XIANSHICHU: MOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1MOV B,R3DIV ABLJMP XIANSHI ;第四个等于号运算LOOP5: MOVX A,@DPTR ;第二个数ANL A,#0FHJZ LOOP5 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R5,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#84H ;选中LED5MOVX @DPTR,AMOV A,R5ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令CJNE R5,#0CEH,LOOP6; panduandi五个是等于号MOV A,R4ANL A,#0FHMOV R4,AMOV A,R1ANL A,#0FHMOV R1,ACJNE R2,#0CAH,TIAO2 ;人为地忽略单位数减双位数MOV A,R3 ;加法,第二个是符号ANL A,#0FHMOV R3,AMOV B,#0AHMUL ABADD A,R4ADDC A,R1LJMP XIANSHITIAO2 :CJNE R2,#0CCH,TIAO4 ;人为地忽略分数MOV A,R3 ;乘法,第二个是符号ANL A,#0FHMOV R3,AMOV B,#0AHMUL ABADD A,R4MOV B,R1MUL ABLJMP XIANSHITIAO4 :CJNE R3,#0CAH,TIAO5;加法,第三个是符号MOV A,R2ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2ADDC A,R4LJMP XIANSHITIAO5 :CJNE R3,#0CBH,TIAO6;减法,第三个是符号MOV A,R2ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2SUBB A,R4LJMP XIANSHITIAO6 :CJNE R3,#0CCH,TIAO7;乘法,第三个是符号MOV A,R2ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2MOV B,R4MUL ABLJMP XIANSHITIAO7 : MOV A,R2 ;除法,第三个是符号ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2MOV B,R4DIV ABLJMP XIANSHILOOP6: MOVX A,@DPTR ;====ANL A,#0FHJZ LOOP6 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R6,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#85H ;选中LED6MOVX @DPTR,AMOV A,R6ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令MOV A,R1ANL A,#0FHMOV R1,AMOV A,R2ANL A,#0FHMOV R2,AMOV A,R4ANL A,#0FHMOV R4,AMOV A,R5ANL A,#0FHMOV R5,AMOV B,#0AHMOV A,R1MUL ABADD A,R2MOV R7,A ;把12放到R7MOV B,#0AHMOV A,R4MUL ABADD A,R5MOV R1,A ;把45放到R1CJNE R3,#0CAH,JIAN1MOV A,R7ADDC A,R1LJMP XIANSHIJIAN1: CJNE R3,#0CBH,CHENG1MOV A,R7SUBB A,R1LJMP XIANSHICHENG1:CJNE R3,#0CCH,CHU1MOV A,R7MOV B,R1MUL ABLJMP XIANSHICHU1: MOV A,R7MOV B,R1DIV ABLJMP XIANSHIXIANSHI: ;MOV R1,A;MOV DPTR,#00CFE9H ;8279命令字;MOV A,#0D1H ;清显示;MOVX @DPTR,A;MOV A,R1MOV R0,A ;jieguoSUBB A,#64H ;HE 100 BI JIAOJC DENG2 ;XIAOYU 100 TIAOMOV A,R0MOV B,#64H ;SAN WEI SHU QU BAI WEIDIV ABMOV R4,A ;BAI WEI SHU FANG R4MOV A,B ;QU BAI HOU YU SHU GEI aMOV B,#0AHDIV AB ;QU SHI WEIMOV R5,A ;SHI WEI FANG R5MOV R6,B ;GE WEI SHU FANG R6MOV DPTR,#0CFE9H ;写显示RAM命令BAI WEI DENGMOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R4ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;MOV DPTR,#0CFE9H ;写显示RAM命令SHI WEI DENGMOV A,#81H ;选中LED2MOVX @DPTR,AMOV A,R5ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;MOV DPTR,#0CFE9H ;写显示RAM命令GE WEI DENGMOV A,#82H ;选中LED3MOVX @DPTR,AMOV A,R6ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;LJMP LOOP1DENG2 : MOV A,R0CLR C ;上面借位清0SUBB A,#0AHJC DENG3MOV A,R0MOV B,#0AHDIV ABMOV R4,A ;SHI WEI GEI R4MOV R5,B ;GE WEI GEI R5MOV DPTR,#0CFE9H ;写显示RAM命令SHI WEI DENGMOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R4ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;MOV DPTR,#0CFE9H ;写显示RAM命令GE WEI DENGMOV A,#81H ;选中LED2MOVX @DPTR,AMOV A,R5ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;LJMP LOOP1DENG3 : MOV A,R0MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R0ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;LJMP LOOP1TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;段显码表db 7fh,6fh,77h,7ch,39h,5eh,79h,71hEND。