基于51单片机的电子计算器(DOC) - 图文(4)

2019-09-02 17:32

17

**首届电子创意设计竞赛

case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=11; break; case 0xeb: key=1; break; case 0xdb: key=2; break; case 0xbb: key=3; break; case 0x7b: key=12; break; case 0xe7: key=0; break; case 0xd7: key=15; break; case 0xb7: key=14; break; case 0x77: key=13; break; }

while(temp!=0x0f) { temp=P1; temp=temp&0x0f; } flag1=1; }

//flag=1标志按键检测完毕

} } }

/*计算结果并显示函数*/ void cal_show() { uchar i,j,n; long double s,temp2;

long int s1,s2,a1,b1,c1,temp1; a1=b1=1; s1=s2=0; s=0;

18

**首届电子创意设计竞赛

if(judge2!=0) {

for(j=0;j

//存放第一操作数

{ for(i=0;i

s1=s1+a[j]*a1; a1=1;

//判断输入的是几位数

}

for(j=judge1+1;j

s2=s2+a[j]*b1; b1=1;

//存放第二操作数 //判断是几位数

}

if(cal==10) {s=s1+s2; }

if(cal==11) {s=s1-s2; } if(cal==12) {

s=s1*s2;

//判断是什么运算,并执行运算

}

if(cal==13) {

s=(s1*0.1)/(s2*0.1);

//把s1,s2转化为小数形式 ?

}

Answer=s; }

else s=Answer;

//下面对结果进行四舍五入

19

**首届电子创意设计竞赛

c1=(long int)(s*1000); if(c1>5 || c1==5) s=s+0.01; //下面对数据进行处理

temp1=(long int)(s); //temp1 是答案的整数部分 temp2=s-temp1; n=0;

while(temp1) { b[n]=temp1; temp1=temp1/10;

n++;

//整数部分放入数组 //temp2 是答案的小数部分

}

b[n]=temp2*10; //把小数部分的第一位变成整数并放进数组 b[n+1]=(uchar)(temp2*100); //小数第二位......放进数组

//下面把得到的结果显示到液晶上面去 for(i=n;i>0;i--) {

write_data(table[b[i-1]]);//输出整数部分

}

write_data(table[15]);//输出小数点间隔整数部分和小数部分 write_data(table[b[n]]);//小数点后第一位 write_data(table[b[n+1]]);//小数点后第二位 }

/******************************************************************** * 名称 : L1602_string(uchar hang,uchar lie,uchar *p) * 功能 : 1602写字符串函数

***********************************************************************/

20

**首届电子创意设计竞赛

void L1602_string(uchar hang,uchar lie,uchar *p) { }

/******************************************************************** * 名称 : L1602_char(uchar hang,uchar lie,char sign) * 功能 : 1602写指令函数

***********************************************************************/

void L1602_char(uchar hang,uchar lie,char sign) {

uchar a;

if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; wcmd(a); wdata(sign); uchar a,b=0;

if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; while(1) { }

wcmd(a++);

if((*p == '\\0')||(b==16)) break; b++; wdata(*p); p++;

21

**首届电子创意设计竞赛

}

void main() {

uchar k,i,j; sound=0;

L1602_init(); for(k=5;k>0;k--) {

L1602_string(1,1,\ L1602_string(2,1,\

L1602_char(2,16,k% 10 + 48); sound=1; Delay(400); sound=0; Delay(600); }

sound=0; L1602_init();

write_com(0x01); write_com(0x80); key=15; i=flag1=0; while(1) { keyscan(); if(flag1==1) {if(key==15)

//清零

//将液晶指针定位在第一行第一个单元

{write_com(0x01); i=0;

for(j=0;j<20;j++)

22

**首届电子创意设计竞赛

a[j]=b[j]=0; judge1=judge2=0; }

else if(key<10)

//10以下是数字显示部分 //judge2=0,不会在液晶存放数据

{ write_data(table[key]); a[i]=key; i++; }

else if(key<14)

//10~14属于运算符号 +

{ write_data(table[key]); judge1=i-1; cal=key; } else {

L1602_string(2,1,\

write_data(table[key]); //输出等于号 if(i==0) judge2=0; else judge2=i-1;

write_com(0x80+0x47); //将液晶指针定位在第二行第一个单元 cal_show(); }

//键盘检测标志置0进行下一次检测 //调用计算并显示函数

// key=14时 为=号

flag1=0; } } }


基于51单片机的电子计算器(DOC) - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017会计继续教育试题及答案(一)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: