找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1948|回复: 0
打印 上一主题 下一主题
收起左侧

单片机计算器程序

[复制链接]
跳转到指定楼层
楼主
简易计算器有图加程序

  1. #include"key16a.h"
  2. #include"lcd1602.h"
  3. Uchar code keyval[16]={'/','=',0,'C','*',9,8,7,'-',6,5,4,'+',3,2,1,};
  4. Uchar data numb1[4],numb2[4],result[12];
  5. void Fclear ()
  6.         {Uchar i;
  7. for(i=0;i<4;i++)
  8. { numb1[i]=0;
  9.         numb2[i]=0;
  10. }
  11. for(i=0;i<12;i++)
  12. result[i]=' ';
  13. }
  14. void main()
  15. { Uchar i=0,j=0,tmp=0;
  16. Uchar oprat1=0,oprat2=0,opratflag=0;
  17.         Uint answer=0;
  18.         Fclear ();
  19. RstLcd();
  20.         ClrLcd();
  21.         while(1)
  22.         { do{tmp=key_scan();}while(tmp==0xff);
  23. tmp=keyval[tmp];
  24. if(tmp=='C'){ClrLcd();break;}
  25. else
  26. {if(tmp!='=')
  27. { if((tmp<10)&&(opratflag==0))
  28. { numb1[i]=tmp;WriteChar(tmp+0x30,i+4,0);i++;}
  29. else if (tmp>10)
  30. {opratflag=tmp;WriteChar(tmp,7,0);}
  31. else
  32. {numb2[j]=tmp;WriteChar(tmp+0x30,j+8,0);j++;}
  33. }
  34. else
  35. {
  36. switch(i)
  37. { case 1: oprat1=numb1[0];
  38. numb1[0]+=0x30;numb1[1]=numb1[2]=' ';
  39.         break;
  40.         case 2:
  41. oprat1=numb1[0]*10+numb1[1];
  42.         numb1[0]+=0x30;numb1[1]+=0x30;
  43.         numb1[2]=' ';break;
  44.         case 3:
  45. oprat1=numb1[0]*100+numb1[1]*10+numb1[2];
  46. numb1[0]+=0x30;numb1[1]+=0x30;
  47.         numb1 [2]+=0x30;
  48.         break;
  49. }
  50.         switch(j)
  51. { case 1: oprat2=numb2[0];
  52. numb2[0]+=0x30;numb2[1]=numb2[2]=' ';
  53.         break;
  54.         case 2:
  55. oprat2=numb2[0]*10+numb2[1];
  56.         numb2[0]+=0x30;numb2[1]+=0x30;
  57.         numb2 [2]=' '; break;
  58.         case 3:
  59. oprat2=numb2[0]*100+numb2[1]*10+numb2[2];
  60.         numb2[0]+=0x30;numb2[1]+=0x30;
  61.         numb2 [2]+=0x30;
  62.         break;
  63. }
  64. result [0]=' ';
  65. switch(opratflag)
  66. { case '+':
  67. answer=oprat1+oprat2;break;
  68. case '-':
  69. if(oprat1<oprat2)
  70. { answer=oprat2-oprat1;
  71.         result[0]='-';}
  72. else
  73. {answer=oprat1-oprat2;
  74. }
  75. break;
  76. case'*':
  77. answer=oprat1*oprat2;break;
  78. case '/':
  79. answer=oprat1/oprat2;
  80. tmp=oprat1%oprat2;
  81. if(tmp>=100) i=3;
  82. else if(tmp>9){i=2;}
  83. else if (tmp>0)
  84. {i=1;}
  85. else break;
  86. result[6]= result[7]=result[8]='.';
  87. j=9;
  88. switch(i)
  89. {case 3:result[j]=tmp/100+0x30;
  90.         case 2:result[j++]=(tmp/10)%10+0x30;
  91.         case 1:result[j]=tmp%10+0x30;
  92. break;
  93. }
  94. break;
  95. }
  96. if(answer>=10000) i=5;
  97. else if (answer>=1000)i=4;
  98. else if (answer>=100)i=3;
  99. else if(answer>=10)i=2;
  100. else i=1;
  101. j=1;
  102. switch(i)
  103. {case 5:result[j++]=answer/10000+0x30;
  104.         case 4:result[j++]=(answer/1000)%10+0x30;
  105.         case 3:result[j++]=(answer/100)%10+0x30;
  106.         case 2:result[j++]=(answer/10)%10+0x30;
  107.         case 1:result[j]=answer%10+0x30;break;
  108. }
  109. WriteChar('=', 3,1);
  110. WriteString(result,4,1);
  111. i=0;j=0;tmp=0; answer=0;
  112. oprat1=0,oprat2=0,opratflag=0;
  113. Fclear();
  114. }
  115. }
  116. }
  117. }
复制代码

全部资料51hei下载地址:
计算机.zip (103.44 KB, 下载次数: 19)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表