找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于89C51的两位数计算器设计 完整程序及proteus仿真

[复制链接]
跳转到指定楼层
楼主

完整程序及proteus仿真,并且硬件电路调试过
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit leden=P2^7;
  5. sbit rs=P2^6;
  6. sbit wr=P2^5;
  7. //sbit busy=P0^7;
  8. uchar i,j,num,num_1,temp;
  9. long a,b, c;
  10. float a_c,b_c;
  11. uchar flag,fuhao;
  12. uchar code table[]={7,8,9,0,
  13.                     4,5,6,0,
  14.                                         1,2,3,0};
  15. uchar code table1[]={7,8,9,0x2f-0x30,
  16.                      4,5,6,0x2a-0x30,
  17.                                          1,2,3,0x2d-0x30,
  18.                                          0x01-0x30,0,0x3d-0x30,0x2b-0x30};
  19. void delay(uchar n)
  20. {
  21. uchar i,j;
  22. for(i=n;i>0;i--)
  23.     for(j=200;j>0;j--) ;
  24. }
  25. /*
  26. void check()
  27. {
  28. do{P0=0xff;
  29.     rs=0;wr=1;leden=0;delay(5);leden=1;}while(busy==1);

  30. }
  31. */
  32. void write(uint w)
  33. {
  34.    rs=0;
  35.    wr=0;
  36.    leden=0;
  37.    P0=w;
  38.    leden=1;
  39.    delay(10);//check();
  40.    leden=0;
  41.    
  42. }
  43. void write_data(uint q)
  44. {
  45.    rs=1;
  46.    wr=0;
  47.    leden=0;
  48.    P0=q;
  49.    leden=1;
  50.      delay(10);
  51.    leden=0;
  52.    
  53. }
  54. void init()
  55. {
  56.           num=1;
  57.    leden=1;
  58.    write(0x38);
  59.    write(0x08);
  60.    write(0x01);
  61.    write(0x06);
  62.    write(0x0f);
  63.    num_1=0;
  64.    i=0;j=0;a=0;b=0;c=0;flag=0;fuhao=0;

  65. }

  66. void keyscan()
  67. {
  68.    P1=0Xfe;
  69.    if(P1!=0xfe)
  70.    {
  71.     delay(10);
  72.         if(P1!=0xfe)
  73.         {
  74.           temp=P1&0xf0;
  75.           switch(temp)
  76.             {
  77.                 case 0xe0:num=0;break;
  78.                 case 0xd0:num=1;break;
  79.                 case 0xb0:num=2;break;
  80.                 case 0x70:num=3;break;
  81.                 }
  82.          }
  83.         while(P1!=0xfe);
  84.         if(num==0||num==2||num==1)         
  85.         {
  86.           if(j!=0)
  87.           {
  88.             write(0x01);
  89.                 j=0;
  90.           }
  91.           if(flag==0)
  92.           {
  93.             a=a*10+table[num];
  94.           }
  95.           else
  96.            {
  97.              b=b*10+table[num];
  98.            }
  99.          }
  100.          else
  101.          {
  102.            flag=1;
  103.            fuhao=4;//除号以按;
  104.          }
  105.          i=table1[num];
  106.          write_data(0x30+i);
  107.         }

  108.           P1=0xfd;
  109.    if(P1!=0xfd)
  110.    {
  111.     delay(10);
  112.         if(P1!=0xfd)
  113.         {
  114.           temp=P1&0xf0;
  115.           switch(temp)
  116.             {
  117.                 case 0xe0:num=4;break;
  118.                 case 0xd0:num=5;break;
  119.                 case 0xb0:num=6;break;
  120.                 case 0x70:num=7;break;
  121.                 }
  122.          }
  123.         while(P1!=0xfd);
  124.         if(num==4||num==5||num==6)
  125.         {
  126.          if(j!=0)
  127.           {
  128.             write(0x01);
  129.                 j=0;
  130.           }
  131.           if(flag==0)
  132.           {
  133.             a=a*10+table[num];
  134.           }
  135.           else
  136.            {
  137.              b=b*10+table[num];
  138.            }
  139.          }
  140.          else
  141.          {
  142.            flag=1;
  143.            fuhao=3;//乘号以按;
  144.          }
  145.          i=table1[num];
  146.          write_data(0x30+i);
  147.    }

  148.    P1=0xfb;
  149.   if(P1!=0xfb)
  150.    {
  151.     delay(10);
  152.         if(P1!=0xfb)
  153.         {
  154.           temp=P1&0xf0;
  155.           switch(temp)
  156.             {
  157.                 case 0xe0:num=8;break;
  158.                 case 0xd0:num=9;break;
  159.                 case 0xb0:num=10;break;
  160.                 case 0x70:num=11;break;
  161.                 }
  162.          }
  163.         while(P1!=0xfb);
  164.         if(num==8||num==9||num==10)
  165.         {
  166.          if(j!=0)
  167.           {
  168.             write(0x01);
  169.                 j=0;
  170.           }
  171.           if(flag==0)
  172.           {
  173.             a=a*10+table[num];
  174.           }
  175.           else
  176.            {
  177.              b=b*10+table[num];
  178.            }
  179.          }
  180.          else if(num==11)
  181.           {
  182.            flag=1;
  183.            fuhao=2;//jian号以按;
  184.            }
  185.          i=table1[num];
  186.          write_data(0x30+i);
  187.    }

  188.         P1=0xf7;
  189.     if(P1!=0xf7)
  190.    {
  191.     delay(10);
  192.         if(P1!=0xf7)
  193.         {
  194.           temp=P1&0xf0;
  195.           switch(temp)
  196.             {
  197.                 case 0xe0:num=12;break;
  198.                 case 0xd0:num=13;break;
  199.                 case 0xb0:num=14;break;
  200.                 case 0x70:num=15;break;
  201.                 }
  202.          }
  203.         while(P1!=0xf7);
  204.         


  205.    switch(num)
  206.    {
  207.      case 12:{write(0x01);a=0;b=0;flag=0;fuhao=0;}break;
  208.          case 13:
  209.                 {
  210.                            if(flag==0)
  211.                              {a=a*10;write_data(0x30);}
  212.                            else if(flag==1)
  213.                              {b=b*10;write_data(0x30);}
  214.                         } break;
  215.          case 14: {j=1;
  216.                     if(fuhao==1)
  217.                                 {write(0x80+0x4f);write(0x04);c=a+b;
  218.                                   while(c!=0)
  219.                                  {
  220.                                          write_data(0x30+c%10);
  221.                                          c=c/10;
  222.                                          }
  223.                                  write_data(0x3d);a=0;b=0;flag=0;fuhao=0;}

  224.                                 else if(fuhao==2)
  225.                                 {write(0x80+0x4f);write(0x04);
  226.                                   if(a-b>0)
  227.                                      {c=a-b;}
  228.                                   else { c=b-a;        }
  229.                                   while(c!=0)
  230.                                  {
  231.                                          write_data(0x30+c%10);
  232.                                          c=c/10;
  233.                                          }
  234.                                   if(a-b<0)
  235.                                  write_data(0x2d);write_data(0x3d);a=0;b=0;flag=0;fuhao=0;}
  236.                                  
  237.                                  else if(fuhao==3)
  238.                                  {write(0x80+0x4f);write(0x04);c=a*b;
  239.                                   while(c!=0)
  240.                                  {
  241.                                          write_data(0x30+c%10);
  242.                                          c=c/10;
  243.                                          }
  244.                                  write_data(0x3d);a=0;b=0;flag=0;fuhao=0;}
  245.                                  
  246.                                  else if(fuhao==4)
  247.                                  {
  248.                                   write(0x80+0x4f);write(0x04);        i=0;
  249.                                   c=a/b;        
  250.                                   while(c!=0)
  251.                                  {
  252.                                          write_data(0x30+c%10);
  253.                                          c=c/10;
  254.                                           i++;
  255.                                           if(i==3)
  256.                                              write(0x2e);
  257.                                          }
  258.                                          
  259.                                   if(a/b<=0)
  260.                                  write_data(0x30);write_data(0x3d);a=0;b=0;flag=0;fuhao=0;
  261.                                  }                  
  262.                                  } break;
  263.         case 15:{write_data(0x30+table1[num]);flag=1;fuhao=1;}        break;
  264.    }
  265.    }
  266.    P1=0xf0;
  267. }

  268. void main()
  269. {
  270.   init();
  271.   
  272.   
  273.   while(1)
  274.   {
  275.     keyscan();
  276.   }
  277. }


  278.          
复制代码

全部资料打包下载:
jsq.rar (37.84 KB, 下载次数: 47)

评分

参与人数 3黑币 +56 收起 理由
lqh123456789 + 5 很给力!
5664645345 + 1 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:172927 发表于 2017-4-12 21:23 | 只看该作者
谢谢分享,下载学习
回复

使用道具 举报

板凳
ID:202352 发表于 2017-5-18 22:09 | 只看该作者
学习学习
回复

使用道具 举报

地板
ID:53539 发表于 2017-12-13 10:27 | 只看该作者
学习学习学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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