430 单片机 计算器

合集下载

计算器__msp430单片机原理与应用课程综合设计

计算器__msp430单片机原理与应用课程综合设计

计算器设计实验报告一、实验设计主要分工04009312 王国鹏:按键扫描,LCD显示。

04009320 文斌:算法设计,字符数据转换。

共同调试、完善设计。

二、程序设计实现功能效果(1)支持整数、小数基本加减乘除运算;(2)有优先级的判别计算。

优先级由高到低依次为括号运算、乘除运算、加减运算。

(3)支持键盘输入;(4)能够判断输入表达式的合法性。

程序开始运行后,定时扫描键盘。

输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、shift复用切换键、enter'='键、‘.’小数点键。

键盘为3*4的矩阵键盘,键盘定义如下:开始运行程序后,LCD12864屏幕显示Calculator,等待键盘输入。

通过定时中断,定时扫描按键。

有按键按下时,判断为0~9数字键、+-*/()运算符则显示在LCD上。

按下shift键则键盘复用为上图红色字符。

按下'='号后,得出计算结果,结果显示于表达式的下一行。

若有除零错误或语法错误(如连续输入运算符,括号失配等)则显示“=error”。

按下backspace,则表达式退一个字符,同时显示去掉最后一位字符。

按下“reset”,则回到初始状态,屏幕表达式和结果被清除,等待输入新的表达式。

三、程序设计流程图四、程序算法实现1、计算算法将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量str[i]中,表达为中缀表达式。

首先判断输入字符串的合法性,对不同的字符赋予不同的权值,str[i]中若为‘(’,则error[e]=1;若为‘)’,则error[e]=3;若为运算符或小数点,则error[e]=2;若为数字,则error[e]=0;根据数组error[e]序列判断输入字符串的正确性。

例如运算符连续输入error[j]=='2'&&error[j+1]=='2' 则errflag=1;若输入表达式字符串没有错误,则用void str2repol()函数,将输入字符串str[i]转换成逆波兰表达式并存于全局数组char repol[maxs]中。

单片机实现的计算器及仿真图

单片机实现的计算器及仿真图

/**************************************************功能说明:计算器,可实现整数加减乘除的循环运算,除法精确到千分位接线说明:P3控制位选,P2控制段选,P1控制键盘作者:合工大LS**************************************************/#include<reg52.h>#define S P3unsignedintc,e,f;unsignedint temp,temp2,temp3,temp4,temp5,tempx;unsigned charm,yunsuanfu;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管unsigned char t[]={0xff,0xff,0xff,0xff}; //小数点//---------------------延时-----------------------------//void delay(unsigned intdelaytime){while(delaytime--);}//---------------------数码管显示-----------------------//void display(){if((temp/1000)!=0||t[3]==0x7f){ S=0x04;delay(5);P2=table[temp/1000]&t[3];delay(700); } //千位if(((temp/1000)!=0)||((temp/100%10)!=0)||t[2]==0x7f||t[3]==0x7f){S=0x08;delay(5);P2=table[temp/100%10]&t[2];delay(700);} //百位if(((temp/1000)!=0||(temp/100%10)!=0)||((temp/1000)==0&&(temp/100%10)==0&&(temp/10 %10)!=0)||t[1]==0x7f||t[2]==0x7f||t[3]==0x7f){S=0x10;delay(5);P2=table[temp/10%10]&t[1];delay(700);} //十位//if((temp/1000)!=0||(temp/100%10)!=0||(temp/10%10)!=0||(temp%10)!=0){S=0x20;delay(5);P2=table[temp%10]&t[0];delay(700);} // 个位}//----------------------键盘扫描------------------------//unsigned char keyscan(){unsigned char key;while(1){display();P1=0xfe; //检测第一行if((P1&0xf0)!=0xf0){ key=P1;while((P1&0xf0)!=0xf0);switch(key)case 0xee:return 7;break;case 0xde:return 8;break;case 0xbe:return 9;break;case 0x7e:return 10; //除号break;}}P1=0xfd; //检测第二行if((P1&0xf0)!=0xf0){ key=P1;while((P1&0xf0)!=0xf0);switch(key){case 0xed:return 4;break;case 0xdd:return 5;break;case 0xbd:return 6;break;case 0x7d:return 11; //乘号break;}}P1=0xfb; //检测第三行if((P1&0xf0)!=0xf0){key=P1;while((P1&0xf0)!=0xf0);switch(key){case 0xeb:return 1;break;case 0xdb:return 2;break;case 0xbb:return 3;break;case 0x7b:return 12;break;}}P1=0xf7; //检测第四行if((P1&0xf0)!=0xf0){key=P1;while((P1&0xf0)!=0xf0);switch(key){case 0xe7: return 13; //确认键ON/C break;case 0xd7:return 0;break;case 0xb7:return 14; //=号break;case 0x77: return 15; //+号break;}}}}void main(){while(1){if(m<2){yunsuanfu=c;}m=2;if(m==2){while(1){e=keyscan();if(e<10||e==13){if(e<10){f=f*10+e;temp=f;}if(e==13) //复位{e=0;f=0;temp=f;tempx=0;t[3]=0xff;t[2]=0xff;t[1]=0xff;t[0]=0xff;m=1;break; //break起到跳出while语句作用}}elsebreak;}}if(m==2){if(yunsuanfu==15)temp=tempx+f;if(yunsuanfu==12)temp=tempx-f;if(yunsuanfu==11)temp=tempx*f;if(yunsuanfu==10){if(tempx%f==0)temp=tempx/f;if(tempx%f!=0){temp2=tempx/f;temp3=tempx%f; //一位小数temp4=temp3*10%f; //两位小数temp5=temp4*10%f; //三位小数if(temp2/1000!=0)temp=temp2;if(temp2/1000==0&&temp2/100!=0) //一位小数{temp2=temp2*10;t[3]=0xff;t[2]=0xff;t[1]=0x7f;t[0]=0xff;temp3=temp3*10/f;temp=temp2+temp3;}if(temp2/100==0&&temp2/10!=0) //两位小数{temp2=temp2*100;t[3]=0xff;t[2]=0x7f;t[1]=0xff;t[0]=0xff;temp3=temp3*10/f;temp4=temp4*10/f;temp=temp2+temp3*10+temp4;}if(temp2<10) //三位小数{temp2=temp2*1000;t[3]=0x7f;t[2]=0xff;t[1]=0xff;t[0]=0xff;temp3=temp3*10/f;temp4=temp4*10/f;temp5=temp5*10/f;temp=temp2+temp3*100+temp4*10+temp5;}}}}yunsuanfu=e;tempx=temp; //储存当前结果e=0;f=0;}}。

单片机计算器

单片机计算器

/*计算机简介:扩展外存,改变缓存数组下标,可计算任意位数字。

(现在改大了单片机放不下,够大了扩展计算sin,cos,平方立方很容易,摁键与内部数据接口函数都写好了)有运算优先级识别函数。

即先运算乘除,后运算加减。

(链表用的不太熟,内存也不够大,否则可识别加括号运算优先级)可通过改变源码确定精确度(小数点后显示几位数字,超出精确度数字随机)每次计算完摁“1”键即可复位再次计算。

摁其他键复位后无法正常运算各种刁钻古怪的算应该会让他死机····*/#include<reg52.h>#include<math.h>#define uchar unsigned char#define uint unsigned charuchar code text[16]="123+456-789*0.=/";//显示ucharsta,i=0,j,in[20],in_num=0,yun[10],key2,numofnum=1,suani=1;//定义光标位置,循环变量,循环变量,摁键示值数组,运算符号标志数组,输入是否为等于号标志变量,数字的个数变量uchar work[10];//定义存放结果各个位数值floatfl[3]={0,},final;//欲计算输入数值整合真值数组.数组个数为可一次计算数值的个数与yun[]下标为该下标减一.即计算十个数有九个运算符号连接.定义最终结果sbitlcden=P2^6;sbitlcdrs=P2^7;void w_inst(ucharoder);//液晶显示输入命令函数void w_data(uchardat);//液晶显示输入数据函数void display(uchar x);//显示函数void delay(uint z);//延时函数void move(uint z);//光标移动函数intctoi(uchar z);//char to int摁键字符转数值各个位整型函数void itof(uchar *in);//int to float各个位整型整合成实际值函数void calcu();//计算最终值函数ucharftoi(uchar z);//float to int把结果各个位数值取出.z为该函数输出计算结果的精确度ucharitoc(uchar z);//int to char把各个位数值转化为带输出text顺序void init();//液晶初始化函数ucharkeyscan();//键盘扫描函数void main(){ucharwei;start:init();for(sta=2,j=0;;sta++,j++)//sta为光标的位置{key2=keyscan();display(key2);move(sta);//不加此函数光标正常一位一位移动.但若输入运算式过长则溢出屏幕in[j]=ctoi(key2);in_num++;if(key2==14)break;//判断是否输入等号,若输入则跳出取值循环开始计算}itof(in);//处理数据为真值,为计算做准备calcu();//计算最终结果wei=ftoi(10);//把最终结果转换为各个位的字符表达,并返回输出字符个数move(17);//把光标移动到第二行准备输出结果for(i=0;i<wei-6;i++)//因为ftoi中转换在最后几位有误差(float与int转化造成)所以显示时去掉(wei-6)display(itoc(work[i]));while(key2=keyscan())//若摁1键则跳出循环再次运算goto start;//回到函数首部}ucharitoc(uchar z)//int to char把work中的各个位结果转换为text中对应序号待输出{uchar in;switch(z){case 0:in=12;break;case 1:in=0;break;case 2:in=1;break;case 3:in=2;break;case 4:in=4;break;case 5:in=5;break;case 6:in=6;break;case 7:in=8;break;case 8:in=9;break;case 9:in=10;break;case 12:in=7;break;//-case 15:in=13;break;//.}return in;}ucharftoi(uchar z)//float to int把最终结果转换为各个位数字,待输出.z为精确度(输出小数点后位数){ucharii,trans,fu=0;if(final<0){final=-(final*pow(10,z));fu=1;}else final=final*pow(10,z);for(ii=0;final>1;ii++,final/=10)//循环取值存入workwork[ii]=(int)(final)%10;for(i=0;i<(ii/2);i++)//取的值为倒序,调整位置函数{trans=work[i];work[i]=work[ii-i-1];work[ii-i-1]=trans;}for(i=0;i<z-1;i++)//把小数点后的各位数字向后移一位,为插入小数点代表值准备work[ii-1-i]=work[ii-2-i];work[ii-z]=15;//插入小数点if(fu==1)//判断结果是否为负数{for(i=ii+1;i>0;i--)//若为负数则各个位向后移一位work[i]=work[i-1];work[0]=12;//在串首插入负号}return ii;void calcu()//计算最终值函数{uchar z;for(z=0,i=0;i<numofnum-1;i++,z++)//该大循环找出乘除计算优先运算{if((yun[i]==3)||(yun[i]==4)){if(yun[i]==3){fl[i]=fl[i]*fl[i+1];numofnum--;i=-1;//计算两数值并放入前一数值空间,需要计算数值减一,并从头判断.}else{fl[i]=fl[i]/fl[i+1];numofnum--;i=-1;}for(j=z;j+2<=numofnum;j++)//该循环.在计算后把计算的两数字后的数字和运算符都往前移一位成为不间断数组,为下次计算做准备{fl[j+1]=fl[j+2];yun[j]=yun[j+1];}}}for(z=0,i=0;i<numofnum-1;i++,z++)//该大循环计算加减{if(yun[i]==1){fl[i]=fl[i]+fl[i+1];numofnum--;i=-1;//类上循环解释}else{fl[i]=fl[i]-fl[i+1];numofnum--;i=-1;}for(j=z;j+2<=numofnum;j++)//类上循环解释{fl[j+1]=fl[j+2];yun[j]=yun[j+1];}}final=fl[numofnum-1];}voiditof(uchar *in)uchar z=0,j1=0;//定义各数值在数组中的下标和输入的数值的数目.定义运算符号标志数组及其下标uchar in1;//存放地址所指数值uchar *p_in=in;//指向in数组的指针ucharjia=0,jian=0,chen=0,chu=0,dian=0,den=0;//是否输入加减乘除的标志和运算方法标志for(j=0;j<in_num;j++,p_in++){in1=*p_in;//取一位数值计算并把指针指向下一数值switch(in1){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:if((chen==1)||(chu==1)||(jia==1)||(jian==1))//若当前数值为0-9则进行合并{z++;numofnum++;jia=0;jian=0;chen=0;chu=0;dian=0;suani=1;}else if(dian==1){fl[z]=fl[z]+in1*(1/pow(10,suani));suani++;break;}fl[z]=fl[z]*10+in1;break;case 11:jia=1;yun[j1++]=1;break;//+若当前字符为11-15,则标志运算变量并记录。

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计简易计算器是一种基本、常见的电子设备,它能够对数字进行简单的加减乘除运算。

单片机作为一种小型、低功耗的微型计算机,非常适合用于设计和实现计算器的功能。

在本文中,我们将以单片机为基础,设计和实现一个简易计算器。

一、设计思路1.硬件设计:-使用单片机作为主控制器。

-接入键盘矩阵和显示器。

-使用LED灯作为指示灯,用于显示运算符和结果。

2.软件设计:-通过键盘输入数字和运算符。

-将输入的数字和运算符转换成相应的控制信号。

-进行运算,并将结果显示在屏幕上。

3.功能实现:-实现加法、减法、乘法和除法运算。

-提供清零、退格和等号等功能。

-支持小数和负数的输入和运算。

-提供错误提示功能,例如除数不能为零等。

二、具体实现1.硬件实现:-将键盘矩阵的行和列与单片机的IO口相连,通过扫描来检测按键的输入。

-将显示器与单片机的IO口相连,通过控制引脚来发送和接收数据。

-将LED灯与单片机的IO口相连,设置相应的引脚状态来显示不同的指示信号。

2.软件实现:-使用C语言编写程序,通过中断和轮询的方式,实现键盘输入的检测和数据的读取。

-将读取到的数据进行解析,并根据不同的按键进行相应的操作。

-根据输入的数字和运算符,进行相应的运算并输出结果。

3.功能实现:-加法、减法、乘法和除法运算可以通过相应的算法实现,例如加法可以通过循环和位运算来实现。

-清零功能可以将运算结果和输入的数字都清零,退格功能可以删除输入的最后一个数字或运算符。

-支持小数运算可以在运算过程中进行进位和进位操作,支持负数运算可以通过判断运算符来进行相应的处理。

-错误提示功能可以通过对输入的数据进行检查和判断来实现,例如判断除数是否为零。

三、总结通过上述的设计和实现,我们可以成功地设计和制作一个单片机的简易计算器。

通过这个计算器,用户可以进行简单的加减乘除运算,同时还具备清零、退格、小数和负数等功能。

这个计算器可以应用在日常生活中的计算场景,方便用户进行各种简单的运算操作。

单片机的简易计算器

单片机的简易计算器

单片机的简易计算器在现代科技的不断发展中,单片机已经成为了人们生活中不可或缺的一部分,其广泛应用于各个领域中。

其中,单片机作为计算器的应用是人们最为熟悉的,本文将介绍一个基于单片机的简易计算器。

1.引言计算器作为一种广泛使用的工具,早已融入人们的生活中。

随着电子技术的不断发展,计算器逐渐从机械式逐渐转变为电子式。

而单片机作为电子计算器中的核心,因其体积小、功耗低、成本低等优点,成为了电子计算器的首选之一2.原理介绍单片机简易计算器的原理是通过单片机对输入的数字和运算符进行解析,然后利用内部的算法进行计算,最后将结果显示在输出设备上。

该计算器主要包括输入模块、解析模块、计算模块以及显示模块四个部分。

3.输入模块输入模块主要包括键盘和显示屏。

键盘用于用户输入数字和运算符,显示屏用于显示输入和计算结果。

在单片机上,键盘和显示屏一般通过矩阵按键扫描和数码管显示等方式实现。

4.解析模块解析模块负责解析用户的输入,并将其转化为内部可以处理的格式。

例如,用户输入的数字和运算符将被解析为二进制码或其他表示形式。

解析模块一般通过状态机等方式实现。

5.计算模块计算模块是单片机简易计算器的核心部分,主要负责对输入的数字和运算符进行计算,并生成计算结果。

计算模块可以使用常见的算法,如加法、减法、乘法、除法,也可以实现特殊的运算功能,如开方、幂运算等。

6.显示模块显示模块负责将计算结果显示在输出设备上。

单片机简易计算器一般采用数码管显示,可以显示整数和小数。

在显示过程中,还需要考虑显示精度和位数等问题。

7.程序设计单片机简易计算器的程序设计需要考虑输入和输出的实时性和准确性。

需要设计相应的中断处理函数,实现按键的响应和显示的更新。

程序设计还需要考虑算法的优化和计算结果的溢出等问题。

8.功能扩展单片机简易计算器还可以进行功能的扩展,如添加转换功能、存储功能等。

例如,可以添加进制转换功能,实现十进制与二进制、八进制、十六进制之间的转换;还可以添加存储功能,实现计算结果的存储和读取。

单片机中用矩阵键盘实现计算器

单片机中用矩阵键盘实现计算器
{
num=num1/num2;
}
if(flag2==2&&flag1==2) //乘号和等号被按下
{
num=num1*num2;
}
if(flag2==3&&flag1==2) //减号和等号被按下
{
num=num1-num2;
}
if(flag2==4&&flag1==2) //加号和等号被按下
{
num=num1+num2;
display();//数据显示
}
}
void keyscan(void)
{
col_1=0;
col_2=0;
col_3=0;
col_4=0;
if ((P1&0x0f)!=0x0f) //判断行线是否全为1,不是则处理
{
col_1=0; //第一列输出'0'
col_2=1;
col_3=1;
col_4=1;
num2=7;
break;
case 2:if(flag==1)
num1=4;
if(flag==3)
num2=4;
break;
case 3:if(flag==1)
num1=1;
if(flag==3)
num2=1;
break;
case 5:if(flag==1)
num1=8;
if(flag==3)
num2=8;
case 15:
flag2=3;//“-”
break;
case 16:
flag2=4;//“+”
break;
}
keynum=0;//清除keynum的值

单片机(44按键与数码管制作的简易计算器,含原理图)

单片机(44按键与数码管制作的简易计算器,含原理图)
{
return (i+j*4);//返回键码
}
temp <<= 1;
}
}
}
#endif
#ifndef _wei_h_
#define_wei_h_
int mei;
int wei(int num1,int num2,int num3,int num4,int num5,int num6,int num7 )
if(P1 != 0xf0)//第三次判断有无按键按下
{
m = Keyscan();
if(0<=m && m<=9)
{
if(ch==1)
{Key_Value= Key_Value*10+m;}
else{Key_Value=m;ch=1;}
}
else
{
if(m==15)
{
Key_Value=0;n=0;l=0;
简易计算器(矩阵键盘+数码管)
#include <reg52.h>
#include <as.h>
#include<sd.h>
#include<math.h>
#include<df.h>
#define uint unsigned int
#define uchar unsigned char
long int Key_Value,n;
{mei=4;return mei;}
else
{
if(num6!=0)
{mei=3;return mei;}
else
{
if(num7!=0)
{mei=2;return mei;}

基于单片机的简易计算器

基于单片机的简易计算器

***********************************碎灵之痕**********************************基于单片机的简易计算器要下载原理图的请到/然后输入账号429755725@密码:f123456789希望大家不要修改密码,不要删除里面的文件,方便他人。

一、功能:1、可以实现结果不大于8位数的四则混合运算;2、运算符有:+、-、*、/、(、)、=;3、可以的到负数;4、具有退格(删除)功能;5、等号之后在按数字键会另外新建一个计算式;6、示例表达式:“78*(45-999)+86=”。

二、材料:1、液晶1602;-------------------------------------------------1块;2、单片机(STC89C52);------------------------------------1块;3、按键;---------------------------------------------------------21个;4、电位器(10K);--------------------------------------------1个;5、晶振(12M);----------------------------------------------1个;6、排阻(10K);------------------------------------------------1个;7、排座、排针;------------------------------------------------各一个;8、40脚单片机插座;-----------------------------------------1个;9、USB母口(供电用);--------------------------------------1个;10、电容、电阻;----------------------------------------------如图所示。

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

#include <msp430x14x.h>
const unsigned char data[22] ={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,
0x8f,0xbf,0x89,0xb9,
0xff,0xaf};//0~9 a~f 符号
unsigned char segment[8] = {20,20,0,0,0,0,0,0};//初始数码管
unsigned char flag1=0;
void delay(unsigned int j)
{
unsigned int i;
for(i=0;i<j;i++);
}
unsigned int jisuan()
{unsigned int y;
y=segment[2]*100000+segment[3]*10000+segment[4]*1000+segment[5]*100+segment[6]*10+s egment[7];
return y;
}
void clear(void)
{unsigned int a;
for(a=7;a>1;a--)
segment[a]=0;
}
void zhuanhuan( unsigned long r)
{
segment[7]=r%10;
segment[6]=r/10%10;
segment[5]=r/100%10;
segment[4]=r/1000%10;
segment[3]=r/10000%10;
segment[2]=r/100000%10;
}
unsigned char getkey(void)
{
unsigned char m,n=16;
P1OUT=0x00;
if((!(P1IN&BIT4))||(!(P1IN&BIT5))||(!(P1IN&BIT6))||(!(P1IN&BIT7)))
{delay(10000);
if((!(P1IN&BIT4))||(!(P1IN&BIT5))||(!(P1IN&BIT6))||(!(P1IN&BIT7)))
{
flag1=1;
for(m=0;m<=2;m++)
{
P1OUT=~BIT0;
if(!(P1IN&BIT7)){n=3;break;}
if(!(P1IN&BIT6)){n=7;break;}
if(!(P1IN&BIT5)){n=11;break;}
if(!(P1IN&BIT4)){n=15;break;}
P1OUT=~BIT1;
if(!(P1IN&BIT7)){n=2;break;}
if(!(P1IN&BIT6)){n=6;break;}
if(!(P1IN&BIT4)){n=14;break;}
if(!(P1IN&BIT5)){n=10;break;}
P1OUT=~BIT2;
if(!(P1IN&BIT7)){n=1; break;}
if(!(P1IN&BIT6)){n=5; break;}
if(!(P1IN&BIT5)){n=9; break;}
if(!(P1IN&BIT4)){n=13; break;}
P1OUT=~BIT3;
if(!(P1IN&BIT7)){n=0; break;}
if(!(P1IN&BIT6)){n=4; break;}
if(!(P1IN&BIT5)){n=8; break;}
if(!(P1IN&BIT4)){n=12; break;}
delay(20000);
while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&BIT4)))
for(unsigned char j=0;j<=7;j++)
{
P4OUT=0x80>>j;
P2OUT=data[segment[j]];
delay(500);
}
delay(20000);
}
}
}
return (n);
}
void main(void)
{
unsigned char flag=0,i=9;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P5DIR|=BIT7;
P5OUT&=~BIT7;
P4DIR=0xff;
P2DIR=0xff;
P1DIR=0x0f;
P1OUT=0xff;
while(1)
{ unsigned long p,q,r;
unsigned long s=1;
segment[1]=20;
i=getkey();
if((i<10)&(flag1=1))
{
segment[2]=segment[3];
segment[3]=segment[4];
segment[4]=segment[5];
segment[5]=segment[6];
segment[6]=segment[7];
segment[7]=i;
flag1=0;
}
else {
switch(i)
{case 15:segment[0]=19;p=jisuan();clear();flag=15;break;
case 14:segment[0]=18;p=jisuan();clear();flag=14;break;
case 13:segment[0]=17;p=jisuan();clear();flag=13;break;
case 12:segment[0]=16;p=jisuan();clear();flag=12;break;
case 10:segment[0]=10;p=jisuan();clear();flag=10;break;
case 11:{q=jisuan(); clear();
switch(flag)
{case 12:r=p+q;break;
case 13:r=p-q;break;
case 14:r=p*q;break;
case 15:r=p/q;break;
case 10:for(unsigned i=q;i>0;i--)
{ s=p*s;}
r=s;break;
}
if(r>999999)
{clear();segment[5]=14;segment[6]=14;segment[7]=21; }
else
zhuanhuan(r);
}
break;
}
}
for(unsigned char j=0;j<=7;j++)
{
P4OUT=0x80>>j;
P2OUT=data[segment[j]];
delay(200);
}
}
}。

相关文档
最新文档