单片机计算器程序文档格式.docx
《单片机计算器程序文档格式.docx》由会员分享,可在线阅读,更多相关《单片机计算器程序文档格式.docx(9页珍藏版)》请在冰点文库上搜索。
![单片机计算器程序文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/ce62dd30-e21b-47a4-9092-37927632e807/ce62dd30-e21b-47a4-9092-37927632e8071.gif)
ucharg3=0;
ucharg4=0;
charj=-1;
/*与Number[]数组连用*/
ucharm=0;
/*按键【=】的控制变量*/
ucharn=0;
/*按键【.】的控制变量*/
ucharx=0;
/*小数点个数的记录变量*/
ucharxo=0;
/*控制开始计数小数点的变量*/
longintresult;
voidDelay(uinto)/*延时函数delay()的定义*/
{
uinti,j;
for(i=0;
i<
o;
i++)
{
for(j=0;
j<
121;
j++){;
}
}
voidshow(longfloatOut_put)
{ucharr;
uchark;
longintq,p;
uchars=0;
uchari;
longinttemp;
temp=Out_put;
if((Out_put-temp)!
=0){result=Out_put*10000;
r=4;
else{result=Out_put;
r=0;
p=result;
if(m==1)
if(result<
0)
{result=-result;
q=result;
for(i=1;
i<
=8;
i++){q=q/10;
if(q==0){k=i;
i=9;
}}P0=0x40;
P2=C[8-k];
Delay
(1);
}//负号的显示
P0=0x80;
P2=C[r];
Delay
(1);
P0=0x00;
result=p;
P0=Led[result%10];
P2=C[8];
result=result/10;
if((result%10==0)&
&
(result%100==0)&
(result%1000==0)&
(result%10000==0)&
(result%100000==0)&
(result%1000000==0)){P0=0x00;
}
else{P0=Led[result%10];
P2=C[7];
(result%100000==0)){P0=0x00;
P2=C[6];
(result%10000==0)){P0=0x00;
P2=C[5];
(result%1000==0)){P0=0x00;
P2=C[4];
(result%100==0)){P0=0x00;
P2=C[3];
if((result%10==0)){P0=0x00;
P2=C[2];
if(result==0){P0=0x00;
P2=C[1];
voidIn_put()//输入函数输入小数加小数点
{
if(k>
=0&
k<
=9)
switch(e)
case8:
D[7]=D[6];
A[7]=A[6];
//用来存放数值
case7:
D[6]=D[5];
A[6]=A[5];
case6:
D[5]=D[4];
A[5]=A[4];
case5:
D[4]=D[3];
A[4]=A[3];
case4:
D[3]=D[2];
A[3]=A[2];
case3:
D[2]=D[1];
A[2]=A[1];
case2:
D[1]=D[0];
A[1]=A[0];
case1:
if(n==0){D[0]=k;
A[0]=Led[k];
if(xo==1)x++;
}
if(n==1){A[0]=Led[k]|0x80;
xo=1;
n=0;
=11&
=15&
b==1)
{switch(k)
case11:
g1++;
g++;
if(g2==1)L=1;
if(g3==1)L=2;
if(g4==1)L=3;
break;
//+
case12:
g2++;
if(g1==1)L=4;
if(g3==1)L=5;
if(g4==1)L=6;
//-
case13:
g3++;
if(g1==1)L=7;
if(g2==1)L=8;
if(g4==1)L=9;
//*
case14:
g4++;
if(g1==1)L=10;
if(g2==1)L=11;
if(g3==1)L=12;
///
j++;
Number[j]=10000000*D[7]+1000000*D[6]+100000*D[5]+10000*D[4]+1000*D[3]+100*D[2]+10*D[1]+D[0];
=x;
i++){Number[j]=(float)Number[j]/10;
x=0;
for(i=0;
=7;
i++)//数据存储器清零
D[i]=0;
i++)//数据显示清零
{A[i]=0x00;
b=0;
e=0;
xo=0;
voidKey_scan()//键盘扫描函数Key_scan()
unsignedcharX,Y,Z;
P3=0xff;
P3=0x0f;
//先对P2置数行扫描
if(P3!
=0x0f)//判断是否有键按下
Delay(20);
//延时10ms,软件去干扰
=0x0f)//确认按键按下;
X=P3;
//保存行扫描时有键按下时状态
P3=0xf0;
//列扫描
Y=P3;
//保存列扫描时有键按下时状态
Z=X|Y;
//取出键值
while(P3!
=0xf0);
//按键防止抖动
switch(Z)//判断键值(那一个键按下)
case0xe7:
k=0;
e++;
In_put();
break;
//数字【0】
case0xd7:
k=1;
//数字【1】
case0xdb:
k=2;
//数字【2】
case0xdd:
k=3;
//数字【3】
case0xb7:
k=4;
//数字【4】
case0xbb:
k=5;
//数字【5】
case0xbd:
k=6;
//数字【6】
case0x77:
k=7;
//数字【7】
case0x7b:
k=8;
//数字【8】
case0x7d:
k=9;
//数字【9】
case0xeb:
n=1;
//小数点【.】
case0x7e:
k=11;
b=1;
//字符【B+】
case0xbe:
k=12;
//字符【C-】
case0xde:
k=13;
//字符【D*】
case0xee:
k=14;
//字符【E/】
case0xed:
k=15;
m=1;
In_put();
//字符【F=】
voidYun_suan()
if(g1==1&
g==1)Out_put=Number[0]+Number[1];
if(g2==1&
g==1)Out_put=Number[0]-Number[1];
if(g3==1&
g==1)Out_put=Number[0]*Number[1];
if(g4==1&
g==1)Out_put=Number[0]/Number[1];
if(g1==2&
g==2)Out_put=Number[0]+Number[1]+Number[2];
if(g2==2&
g==2)Out_put=Number[0]-Number[1]-Number[2];
if(g3==2&
g==2)Out_put=Number[0]*Number[1]*Number[2];
if(g4==2&
g==2)Out_put=Number[0]/Number[1]/Number[2];
if(L==1)Out_put=Number[0]-Number[1]+Number[2];
if(L==2)Out_put=Number[0]*Number[1]+Number[2];
if(L==3)Out_put=Number[0]/Number[1]+Number[2];
if(L==4)Out_put=Number[0]+Number[1]-Number[2];
if(L==5)Out_put=Number[0]*Number[1]-Number[2];
if(L==6)Out_put=Number[0]/Number[1]-Number[2];
if(L==7)Out_put=Number[0]+Number[1]*Number[2];
if(L==8)Out_put=Number[0]-Number[1]*Number[2];
if(L==9)Out_put=Number[0]/Number[1]*Number[2];
if(L==10)Out_put=Number[0]+Number[1]/Number[2];
if(L==11)Out_put=Number[0]-Number[1]/Number[2];
if(L==12)Out_put=Number[0]*Number[1]/Number[2];
voidXian_shi()
if(m!
=1)
Key_scan();
/*显示函数与A[i]有关*/
P0=A[0];
P0=A[1];
P0=A[2];
P0=A[3];
P0=A[4];
P0=A[5];
P0=A[6];
P0=A[7];
voidmain()
while
(1)
{
Xian_shi();
Yun_suan();
show(Out_put);
//