找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易计算器Proteus仿真图与单片机代码

  [复制链接]
跳转到指定楼层
楼主
计算器,最大数65536,加减乘除用,a,b,c,d表示
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <REGX51.H>         
  2. unsigned char a[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
  3. unsigned char b[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 } ;
  4. unsigned char d[]={~0x21,~0x12,~0x22,~0x42,~0x14,~0x24,~0x44,~0x18,~0x28,~0x48};
  5. unsigned char e[]={~0x01,~0x02,~0x04,~0x08,~0x81};
  6. unsigned char c[8];
  7. unsigned int i,j,k,l,n,nm,ny;
  8. unsigned int y1,y2,y3,y4,y5,y6,y7,y8;
  9. unsigned int x,x1,x2;
  10. unsigned int q;
  11. void delay(unsigned int x)
  12. {
  13.         x--;
  14. }
  15. void shuguan(unsigned int m)
  16. {
  17.         P0=0xff;
  18.         switch(j)
  19.         {
  20.                 case 0 :P2=b[j];if(m>=10000000)P0=a[m/10000000%10];else P0=0xff;break;
  21.                 case 1:P2=b[j];if(m>=1000000)P0=a[m/1000000%10];else P0=0xff;break;
  22.                 case 2:P2=b[j];if(m>=100000)P0=a[m/100000%10];else P0=0xff;break;
  23.                 case 3:P2=b[j];if(m>=10000)P0=a[m/10000%10];else P0=0xff;break;
  24.                 case 4:P2=b[j];if(m>=1000)P0=a[m/1000%10];else P0=0xff;break;
  25.                 case 5:P2=b[j];if(m>=100)P0=a[m/100%10];else P0=0xff;break;
  26.                 case 6:P2=b[j];if(m>=10)P0=a[m/10%10];else P0=0xff;break;
  27.                 case 7:P2=b[j];if(x2==0)P0=a[m%10];if(x2==1)P0=0x88;if(x2==2)P0=0x83;if(x2==3)P0=0xc6;if(x2==4)P0=0xa1;break;
  28.         }
  29.         j++;if(j==8)j=0;
  30.         delay(300);
  31. }
  32. void anj()
  33. {
  34.         for(i=0;i<4;i++)
  35.         {
  36.                 P1=e[i];
  37.                 if(P1!=e[i])
  38.                 {
  39.                    y2=i          ;
  40.                 for(nm=0;nm<10;nm++)
  41.                         {
  42.                                 if(P1==d[nm])
  43.                                  {
  44.                                          ny=nm;
  45.                                         y1=1;         
  46.                                 }
  47.                         }
  48.                         if(P1==e[4])          //~0x81,不可以,???
  49.                         {
  50.                                 y3=1;
  51.                         }

  52.                         if(P1==~0x41)
  53.                         {
  54.                                 y4=1  ;
  55.                         }
  56.                         if(P1==(0xff-0x82))
  57.                         {
  58.                                 y5=1;
  59.                         }
  60.                         if(P1==(0xff-0x84))
  61.                         {
  62.                                 y6=1;
  63.                         }
  64.                         if(P1==(0xff-0x88))
  65.                         {
  66.                                 y7=1;
  67.                         }
  68.                         if(P1==(0xff-0x11))
  69.                         {
  70.                                 y8=1;
  71.                         }
  72.                 }
  73.                 if(i==y2)
  74.                 {
  75.                         if(P1==e[i]&&y1==1)
  76.                         {
  77.                                 x=x*10+ny;
  78.                                 x2=0;                       
  79.                                 y1=0;
  80.                         }                  
  81.                                   if(P1==e[i]&&y3==1)
  82.                         {         
  83.                                   if(q==0)x1=x;
  84.                                  if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
  85.                                  q=1;
  86.                                  x2=1;
  87.                                  x=0;   
  88.                                  y3=0;
  89.                         }
  90.                                 if(P1==e[i]&&y6==1)
  91.                         {         
  92.                                   if(q==0)x1=x;
  93.                                  if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
  94.                                  q=3;
  95.                                  x2=3;
  96.                                  x=0;   
  97.                                  y6=0;

  98.                         }
  99.                                         if(P1==e[i]&&y7==1)
  100.                         {         
  101.                                   if(q==0)x1=x;
  102.                                  if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
  103.                                  q=4;
  104.                                  x2=4;
  105.                                  x=0;   
  106.                                  y7=0;

  107.                         }
  108.                                 if(P1==e[i]&&y5==1)
  109.                         {         
  110.                                   if(q==0)x1=x;
  111.                                  if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
  112.                                  q=2;
  113.                                  x2=2;
  114.                                  x=0;   
  115.                                  y5=0;
  116.                         }
  117.                                   if(P1==e[i]&&y4==1)
  118.                         {
  119.                                                  if(q==0)x1=x;
  120.                                         if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
  121.                                         q=0;  
  122.                                         if(q==0)x=x1;
  123.                                         x2=0;
  124.                                         y4=0;
  125.                         }
  126.                         if(P1==e[i]&&y8==1)
  127.                         {
  128.                                         x=0;
  129.                                         x1=0;
  130.                                         x2=0;
  131.                                         y8=0;
  132.                         }
  133.                 }

  134.         }
  135. }
  136. void main()
  137. {
  138.         x=0;
  139.         while(1)
  140.         {
  141.         shuguan(x);
  142.           anj();
  143.         }
  144. }                                             
复制代码

Keil代码与Proteus仿真下载:
计算器 (2).zip (86.82 KB, 下载次数: 115)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1004248 发表于 2022-5-1 10:00 | 只看该作者
左下角是清零的,可以连续加减乘除,不过是按顺序计算的,可以加一个变量来扩充数据范围
回复

使用道具 举报

板凳
ID:1004248 发表于 2022-5-1 10:00 | 只看该作者
我也是新手,大佬多指点指点
回复

使用道具 举报

地板
ID:1046315 发表于 2022-10-7 23:09 | 只看该作者
为啥这个代码我的蜂鸣器响了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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