找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7908|回复: 3
收起左侧

单片机简易计算器proteus仿真+代码+原理图文件

[复制链接]
ID:430864 发表于 2018-11-21 22:38 | 显示全部楼层 |阅读模式
0.png

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. /*******************************************************************************************/
  2. //   单片机原理与应用课程设计
  3. //   要点:1、能实现加、减、乘、除功能
  4. //       2、数码0-9及运算符号通过按键盘输入,并在液晶显示器上显示算式及运算结果
  5. //       4、用PROTEUS仿真
  6. //       5、焊接电路板并调试运行
  7. //   出品:潍坊学院信息与控制工程学院
  8. //   日期:2014年12月
  9. //   注意:该程序仅供参考
  10. /*******************************************************************************************/

  11. #include <reg51.h>
  12. #define uint unsigned int
  13. #define uchar unsigned char

  14. #define     LCDIO      P0  //1602数据口

  15. uchar code temp[]="0123456789";
  16. uchar  temp1[8],mm[4],temp2[8];
  17. float q;
  18. uchar num,num1,k,r=0,n,h,d,w;
  19. float  sum;
  20. long uu;
  21. sbit  rw=P2^1;
  22. sbit  rs=P2^0;
  23. sbit  ep=P2^2;

  24. sbit p10=P1^0;
  25. sbit p11=P1^1;
  26. sbit p12=P1^2;
  27. sbit p13=P1^3;
  28. sbit p14=P1^4;
  29. sbit p15=P1^5;
  30. sbit p16=P1^6;
  31. sbit p17=P1^7;
  32. void delayms(uint m)
  33. {
  34.           uint i,j;
  35.           for (i=0;i<m;i++)
  36.           for (j=0;j<120;j++);
  37. }

  38. void write_com(uchar com)
  39. {
  40.            rw=0;
  41.            rs=0;
  42.            ep=0;
  43.            LCDIO =com;
  44.            delayms(5);
  45.            ep=1;
  46.            delayms(5);
  47.            ep=0;   
  48. }
  49. void write_date(uchar date)
  50. {
  51.            rw=0;
  52.            rs=1;
  53.            ep=0;
  54.            LCDIO =date;
  55.            delayms(5);
  56.            ep=1;
  57.            delayms(5);
  58.            ep=0;
  59. }
  60. void init()
  61. {
  62.      
  63.          rs=0;
  64.          rw=0;
  65.          ep=0;
  66.          write_com(0x38);
  67.          write_com(0x0c);
  68.          write_com(0x06);         
  69. }
  70. void shaomiao()
  71. {
  72.   uchar i,s;
  73.   for (i=0,s=0xfe;i<4;i++)
  74.      {
  75.            P1=s;
  76.            if(p14==0|p15==0|p16==0|p17==0)
  77.              {
  78.                    delayms(10);
  79.                    if(p14==0|p15==0|p16==0|p17==0)
  80.                      {
  81.                 if(p14==0)
  82.                                   {
  83.                                     if(p10==0)
  84.                                           num=7;
  85.                                           if(p11==0)
  86.                                           num=4;
  87.                                           if(p12==0)
  88.                                           num=1;
  89.                                           if(p13==0)
  90.                                           num=10;
  91.                                   }                        
  92.                                 if(p15==0)
  93.                                   {
  94.                                     if(p10==0)
  95.                                           num=8;
  96.                                           if(p11==0)
  97.                                           num=5;
  98.                                           if(p12==0)
  99.                                           num=2;
  100.                                           if(p13==0)
  101.                                           num=0;
  102.                                   }        
  103.                                 if(p16==0)
  104.                                   {
  105.                                     if(p10==0)
  106.                                           num=9;
  107.                                           if(p11==0)
  108.                                           num=6;
  109.                                           if(p12==0)
  110.                                           num=3;
  111.                                           if(p13==0)
  112.                                           num=11;
  113.                                   }
  114.                                 if(p17==0)
  115.                                   {
  116.                                     if(p10==0)
  117.                                           num=15;
  118.                                           if(p11==0)
  119.                                           num=14;
  120.                                           if(p12==0)
  121.                                           num=13;
  122.                                           if(p13==0)
  123.                                           num=12;
  124.                                   }
  125.                          while(p14==0|p15==0|p16==0|p17==0);                  
  126.                          }
  127.                   if(num<10)
  128.                   {
  129.                   k++;
  130.           w=0;
  131.                   }                  

  132.             if(d==1)
  133.    {
  134.      d=0;
  135.          sum=-sum;
  136.          
  137.    }
  138.                   
  139.   }
  140.    
  141.    s=s<<1|0x01;
  142.    s=s|0xf0;         
  143. }  
  144. }
  145. void display1()
  146. {

  147.          uchar i;
  148.          uu=(long)(sum);
  149.          temp1[7]=uu/10000000;
  150.          temp1[6]=uu%10000000/1000000;
  151.          temp1[5]=uu%10000000%1000000/100000;
  152.          temp1[4]=uu%10000000%1000000%100000/10000;
  153.          temp1[3]=uu%10000000%1000000%100000%10000/1000;
  154.          temp1[2]=uu%10000000%1000000%100000%10000%1000/100;
  155.          temp1[1]=uu%10000000%1000000%100000%10000%1000%100/10;
  156.          temp1[0]=uu%10;
  157.   
  158.           if(h==1)
  159.                    {
  160.                      h=2;
  161.                             write_com(0x80+15-k);
  162.                          write_date(0x2d);
  163.                    }
  164.           if(r==0)
  165.                  write_com(0x80+15);
  166.           if(r==1)
  167.                  write_com(0xc0+15);
  168.           write_com(0x04);
  169.          for (i=0;i<k;i++)
  170.                  {  
  171.                    write_date(temp[temp1[i]]);
  172.                    delayms(5);
  173.                  }
  174.    
  175. }
  176. void display2()
  177. {
  178.          uchar i;
  179.          temp2[7]=uu%10000000/1000000;
  180.          temp2[6]=uu%10000000%1000000/100000;
  181.          temp2[5]=uu%10000000%1000000%100000/10000;
  182.          temp2[4]=uu%10000000%1000000%100000%10000/1000;
  183.          temp2[2]=uu%10000000%1000000%100000%10000%1000/100;
  184.          temp2[1]=uu%10000000%1000000%100000%10000%1000%100/10;
  185.          temp2[0]=uu%10;
  186.   
  187.   
  188.           if(h==1)
  189.                    {
  190.                      h=2;
  191.                             write_com(0x80+15-k-4);
  192.                          write_date(0x2d);
  193.                    }
  194.           if(r==0)
  195.                  write_com(0x80+15);
  196.           if(r==1)
  197.                  write_com(0xc0+15);
  198.           write_com(0x04);
  199.          for (i=0;i<k+4;i++)
  200.                  {  
  201.                   
  202.                             if(i==3)
  203.                            {
  204.                            write_date(0x2e);
  205.                            i++;
  206.                            }        
  207.                            write_date(temp[temp2[i]]);
  208.                            delayms(5);
  209.                  }         
  210. }      
  211. void panduan()
  212. {
  213.    
  214.     if(n==1&num==0)
  215.      {
  216.       write_com(0x01);
  217.           write_com(0x80+15);
  218.           write_date(temp[0]);
  219.           k=0;
  220.           n=0;

  221.      }
  222.         if(num==10)
  223.                  {
  224.                    write_com(0x01);
  225.                    k=0;
  226.                    n=0;
  227.                    r=0;               
  228.                  }
  229.         if(n==1&num>=1&num<10)
  230.                  {
  231.                    write_com(0x01);
  232.                    k=1;
  233.                    n=0;
  234.                    r=0;
  235.                  }  
  236.    if(num<10&k==1)
  237.          {
  238.                sum=num;
  239.                mm[0]=num;
  240.                if(num==0)
  241.                k=0;
  242.          }
  243.    if(num<10&k==2)
  244.              {
  245.                sum=mm[0]*10+num;
  246.                mm[1]=num;         
  247.              }  
  248.    if(num<10&k==3)
  249.              {
  250.                sum=mm[0]*100+mm[1]*10+num;
  251.                mm[2]=num;
  252.              }
  253.    if(num<10&k==4)
  254.              {
  255.                sum=mm[0]*1000+mm[1]*100+mm[2]*10+num;
  256.                mm[3]=num;
  257.              }
  258.    if(num<10&k==5)
  259.              {
  260.                   
  261.                         num=10;
  262.              }
  263.    
  264.    if (num>=12&num<16)
  265.          {
  266.                   
  267.                   r=1;
  268.                k=0;
  269.                q=sum;
  270.                     
  271.                    if(num==12)
  272.                      {
  273.                           write_com(0xc0);
  274.                           write_date(0x2b);
  275.                          }
  276.                    if(num==13)
  277.                      {
  278.                           write_com(0xc0);
  279.                           write_date(0x2d);
  280.                          }
  281.                    if(num==14)
  282.                      {
  283.                           write_com(0xc0);
  284.                           write_date(0x2a);
  285.                          }
  286.                    if(num==15)
  287.                      {
  288.                           write_com(0xc0);
  289.                           write_date(0xfd);
  290.                          }
  291.                     num1=num;
  292.                         n=0;
  293.        }

  294.    if(num==11&w==0)
  295.         {
  296.           w=1;
  297.           n=1;
  298.           r=0;         
  299.           num=16;  
  300.           write_com(0x01);
  301.           if(num1==12)            
  302.                 sum=q+sum;
  303.           if(num1==13)                 
  304.              sum=q-sum;         
  305.           if(num1==14)
  306.                 sum=q*sum;
  307.           if(num1==15)
  308.             sum=q/sum;           
  309.          
  310.           if(sum>=0)
  311.             h=0;
  312.           else
  313.            {
  314.            h=1;
  315.            sum=-sum;
  316.            d=1;
  317.            }
  318.       if(sum<100000000)
  319.                  k=8;
  320.           if(sum<10000000)
  321.                  k=7;
  322.           if(sum<1000000)
  323.                  k=6;
  324.           if(sum<100000)
  325.                  k=5;
  326.           if(sum<10000)
  327.                  k=4;
  328.           if(sum<1000)
  329.                  k=3;
  330.           if(sum<100)
  331.                  k=2;  
  332.           if(sum<10)
  333.                  k=1;
  334.         
  335.         if(sum!=(long)(sum))
  336.           {
  337.                   uu=sum*1000;
  338.          
  339.             display2();
  340.                  
  341.           }

  342.   }   
  343. if(sum==(long)(sum))
  344.           display1();         
  345.                           
  346. }                 
  347.         
  348.                  void main()
  349. {  
  350.    init();
  351.    while(1)
  352.    {
  353.     shaomiao();
  354.         panduan();        
  355.    }
  356.   
  357. }
复制代码

所有资料51hei提供下载:
http://www.51hei.com/bbs/dpj-142615-1.html


回复

使用道具 举报

ID:793700 发表于 2020-7-1 08:55 | 显示全部楼层
诶作者在吗有个问题想请教一下
回复

使用道具 举报

ID:863934 发表于 2020-12-20 14:37 | 显示全部楼层
有个问题想请教一下
回复

使用道具 举报

ID:939070 发表于 2021-6-17 08:09 | 显示全部楼层
有个问题想请教一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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