欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    简易计算器的设计.doc

    • 资源ID:2386106       资源大小:525.50KB        全文页数:22页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简易计算器的设计.doc

    一、功能实现:利用1602液晶显示器实现整数和小数的加法、减法、乘法、除法、开根号的运算。第一行显示输入的数据,第二行显示运算结果。二、Proteus仿真图三、操作说明:每次运算完后必须按一下清零键,该系统才会重新开始执行。四、程序:#include<reg52.h>#include<math.h>#define int unsigned int#define char unsigned charvoid inti(); /初始化void delay(); /延时void anjian(); /按键显示数字和符号,第一个数存在a内void sheji(); /设计显示完后的参数void jsab();/存储两个输入数void jisuanxs(); /计算显示void chufa(); /除法计算部分void chengfa(); /乘法计算部分void jianfa(); /减法计算部分void jiafa();/加法计算部分void kaigenhao();/开根号运算部分void benshenxs(); /一个数本事显示void leijixiaoshudian(); /小数点的累计void fenli(); /计算后的结果分离,以便于显示void ql(); /清屏void xshuju(char shuju); /写数据void xzhiling(char zhiling); /写指令/char num="I LOVE YOU" 显示在屏幕上int sz='0','1','2','3','4','5','6','7','8','9','+','-','*','/','=','.'char xs="ENRRO"sbit e=P22;sbit rs=P20;sbit rw=P21;sbit key0=P26;sbit key1=P27;sbit key2=P30;sbit key3=P31;sbit key4=P32;sbit key5=P33;sbit key6=P34;sbit key7=P35;sbit key8=P36;sbit key9=P37;sbit key10=P13;sbit key11=P14;sbit key12=P15;sbit key13=P16;sbit key14=P17;sbit qingling=P10;sbit key15=P11;sbit key16=P12;int fuhao,num,m,n,q,w,s,fuhao1,fuhao2,fuhao3,fuhao4,fuhao5,xiaoshu,cishu1,cishu2;int i,g,j,p;int t,f,h;float a,b,c,d;void main() inti();a=0;b=0;c=1.0;d=1.0;q=0;fuhao=0;xiaoshu=0;cishu1=0;cishu2=0;num=0;xzhiling(0x80+0x01);/*第一行初始地址为80H,后面加03H是指在距屏幕的起始处3空格出开始显示,第二行的初始地址为80H+40H */ while(1) while(fuhao=0) /没有计算过程,输入数据后,按等于号即输出结果 anjian(); benshenxs(); while(fuhao1=1) /加法anjian();jiafa();while(fuhao2=1)/减法anjian();jianfa();while(fuhao3=1) /乘法anjian();chengfa();while(fuhao4=1) /除法anjian();chufa(); while(fuhao5=1) /开根号anjian();kaigenhao();ql(); /清零void inti()/初始化 e=0; xzhiling(0x38);/功能设定,根据所用的液晶显示器来决定的,即开显示 xzhiling(0x0f); /0x0f设置显示功能开,有光标且闪烁,如为0x0e则为光标不闪,如为0x0c则无光标 xzhiling(0x06); /光标设置为写入字符后自动右移一位,和整屏左移 xzhiling(0x01); /清屏 void delay() /延时int i,j;for(i=5;i>0;i-)for(j=110;j>0;j-);void xzhiling(char zhiling) /写指令rs=0;rw=0;e=0;P0=zhiling;delay();e=1;delay();e=0;void xshuju(char shuju) /写数据rs=1;rw=0;e=0;P0=shuju;delay();e=1;delay();e=0;void anjian() /按键显示数字和符号,第一个数存在a内if(key0=0) /0 delay(); if(key0=0) xshuju(sz0); delay(); while(!key0); num=0; jsab(); leijixiaoshudian(); if(key1=0) /1 delay(); if(key1=0) xshuju(sz1); delay(); while(!key1); num=1; jsab(); leijixiaoshudian(); if(key2=0) /2 delay(); if(key2=0) xshuju(sz2); delay(); while(!key2); num=2; jsab(); leijixiaoshudian(); if(key3=0) /3 delay(); if(key3=0) xshuju(sz3); delay(); while(!key3); num=3; jsab(); leijixiaoshudian(); if(key4=0) /4 delay(); if(key4=0) xshuju(sz4); delay(); while(!key4); num=4; jsab(); leijixiaoshudian(); if(key5=0) /5 delay(); if(key5=0) xshuju(sz5); delay(); while(!key5); num=5; jsab(); leijixiaoshudian(); if(key6=0) /6 delay(); if(key6=0) xshuju(sz6); delay(); while(!key6); num=6; jsab(); leijixiaoshudian(); if(key7=0) /7 delay(); if(key7=0) xshuju(sz7); delay(); while(!key7); num=7; jsab(); leijixiaoshudian(); if(key8=0) /8 delay(); if(key8=0) xshuju(sz8); delay(); while(!key8); num=8; jsab(); leijixiaoshudian(); if(key9=0) /9 delay(); if(key9=0) xshuju(sz9); delay(); while(!key9); num=9; jsab(); leijixiaoshudian(); if(key10=0) /加 delay(); if(key10=0) xshuju(sz10); delay(); fuhao=1; xiaoshu=0; num=0; fuhao1=1; while(!key10); if(key11=0) /减 delay(); if(key11=0) xshuju(sz11); delay(); fuhao=1; xiaoshu=0; num=0; fuhao2=1; while(!key11); if(key12=0) /乘 delay(); if(key12=0) xshuju(sz12); delay(); fuhao=1; xiaoshu=0; num=0; fuhao3=1; while(!key12); if(key13=0) /除 delay(); if(key13=0) xshuju(sz13); delay(); fuhao=1; xiaoshu=0; fuhao4=1; num=0; while(!key13); if(key15=0)/小数点 delay();if(key15=0)xiaoshu=1;xshuju(sz15);delay();while(!key15); if(key16=0) /开根号 delay();if(key16=0)xshuju(0xe8);delay();fuhao5=1;fuhao=1;while(!key16); void jsab()/存储两个输入数if(fuhao=0)a=a*10+num;elseb=b*10+num;void fenli() /计算后的结果分离,以便于显示if(q>=0&&q<10)q=q;if(q>=10&&q<100)m=q/10;n=q%10;if(q>=100&&q<1000)m=q/100;n=q%100/10;s=q%10;void jisuanxs() /计算显示 if(key14=0)delay();if(key14=0)xzhiling(0x80+0x40);if(q<10&&q>=0)xshuju(szq);delay();sheji();if(q>=10&&q<100) xshuju(szm);delay();xshuju(szn);delay();sheji(); if(q>=100&&q<1000) xshuju(szm);delay();xshuju(szn);delay();xshuju(szs);delay();sheji(); xzhiling(0x0c); void ql() /清屏 if(qingling=0)xzhiling(0x01); /清屏fuhao1=0;fuhao2=0;fuhao3=0;fuhao4=0;fuhao5=0;fuhao=0;xiaoshu=0;cishu1=0;cishu2=0;a=0;b=0;q=0;c=1.0;d=1.0;xzhiling(0x0f);void sheji() /设计显示完后的参数fuhao1=0;fuhao2=0;fuhao3=0;fuhao4=0;fuhao=1;void benshenxs() /一个数本事显示 if(key14=0) delay();if(key14=0)if(cishu1!=0) for(j=cishu1;j>0;j-)c=c*0.1;a=a*c;q=(int) a;t=(int)(a/0.01);h=t%100/10;f=t%10;if(h!=0)|(f!=0)/判断小数部分不为0时显示xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);else /小数部分为0时,显示xzhiling(0x80+0x40);fenli();jisuanxs(); if(cishu1=0) q=a;xzhiling(0x80+0x40);fenli();jisuanxs();delay(); ql(); void jiafa()/加法计算部分 if(key14=0) delay();if(key14=0)if(cishu1!=0)|(cishu2!=0) for(j=cishu1;j>0;j-)c=c*0.1;a=a*c; for(p=cishu2;p>0;p-)d=d*0.1;b=b*d;q=(int)(a+b);t=(int)(a+b)/0.01);h=t%100/10;f=t%10;if(h!=0)|(f!=0)/判断小数部分不为0时显示xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);else/小数部分为0时显示xzhiling(0x80+0x40);fenli();jisuanxs(); if(cishu1=0)&&(cishu2=0) q=a+b;xzhiling(0x80+0x40);fenli();jisuanxs();delay(); ql(); void jianfa() /减法计算部分 if(key14=0) delay();if(key14=0)if(cishu1!=0)|(cishu2!=0) for(j=cishu1;j>0;j-)c=c*0.1;a=a*c; for(p=cishu2;p>0;p-)d=d*0.1;b=b*d;q=(int)(a-b);t=(int)(a-b)/0.01);h=t%100/10;f=t%10;if(h!=0)|(f!=0) /判断小数部分不为0时显示xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);else /小数部分为0时显示xzhiling(0x80+0x40);fenli();jisuanxs(); if(cishu1=0)&&(cishu2=0) q=a-b;xzhiling(0x80+0x40);fenli();jisuanxs();delay(); ql(); void chengfa() /乘法计算部分 if(key14=0) delay();if(key14=0)if(cishu1!=0)|(cishu2!=0) for(j=cishu1;j>0;j-)c=c*0.1;a=a*c; for(p=cishu2;p>0;p-)d=d*0.1;b=b*d;q=a*b;t=(int)(a*b)/0.01);h=t%100/10;f=t%10;if(h!=0)|(f!=0)/小数部分不为0时显示xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);else /小数部分为0时显示xzhiling(0x80+0x40);fenli();jisuanxs(); if(cishu1=0)&&(cishu2=0) q=a*b;xzhiling(0x80+0x40);fenli();jisuanxs();delay(); ql(); void chufa() /除法计算部分 if(key14=0) delay();if(key14=0)if(cishu1!=0)|(cishu2!=0) for(j=cishu1;j>0;j-)c=c*0.1;a=a*c; for(p=cishu2;p>0;p-)d=d*0.1;b=b*d;q=a/b;t=(int)(a/b)/0.01);h=t%100/10;f=t%10;if(h!=0)|(f!=0)/小数部分不为0时显示xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);else /小数部分为0时显示xzhiling(0x80+0x40);fenli();jisuanxs(); if(cishu1=0)&&(cishu2=0) q=a/b;t=(int)(a/b)/0.01);/小数部分保留两位h=t%100/10; /分离小数部分f=t%10;if(key14=0)delay();if(key14=0)if(h!=0)|(f!=0)xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);elsexzhiling(0x80+0x40);fenli();jisuanxs();delay();ql(); /小数分离显示部分if(b=0) /分母为0时,显示ENRRO表示出错了if(key14=0)delay();if(key14=0)xzhiling(0x80+0x40);for(g=0;g<5;g+)xshuju(xsg);xzhiling(0x0c);sheji();ql(); ql();void kaigenhao()/开根号运算部分 if(key14=0) delay();if(key14=0)if(cishu2!=0) for(p=cishu2;p>0;p-)d=d*0.1;b=b*d;q=(int)(sqrt(b);t=(int)(sqrt(b)/0.01);h=t%100/10;f=t%10;if(h!=0)|(f!=0)/小数部分不为0时显示xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay(); while(qingling=1);/起到锁存的作用将上面的显示锁定,如果没有该语句则会出错xzhiling(0x0c);if(cishu2=0) q=(int)(sqrt(b);t=(int)(sqrt(b)/0.01);/小数部分保留两位h=t%100/10; /分离小数部分f=t%10;if(h!=0)|(f!=0)xzhiling(0x80+0x40);fenli();jisuanxs();xshuju(sz15);delay();xshuju(szh);delay();xshuju(szf);delay();xzhiling(0x0c);elsexzhiling(0x80+0x40);fenli();jisuanxs();delay();sheji(); ql();void leijixiaoshudian() /小数点的累计 if(xiaoshu=1)&&(fuhao=0) cishu1+; if(xiaoshu=1)&&(fuhao=1) cishu2+;

    注意事项

    本文(简易计算器的设计.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开