找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机计算器程序+实物 实现加减乘除运算1602显示

  [复制链接]
跳转到指定楼层
楼主
可以实现加减乘除运算,目前写了六位数以下的,由1602显示,由于是在开发板上进行调试的,没有仿真图,所需要的模块我已经原理图中截图下来,附上自己的程序,供大家参考。

实物图:


原理图:


单片机源程序如下:
  1. #include<reg52.h>
  2. #include<stdlib.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define lcd P0
  6. #define key P3
  7. void write_com(uchar com);
  8. void write_dat(uchar dat);
  9. void delay(uchar z);
  10. void Init_lcd();
  11. void keyscan1();
  12. void keyscan2();
  13. void keyscan3();
  14. void keyscan4();
  15. void count_add();
  16. void count_sub();
  17. void count_mul();
  18. void count_div();
  19. void show_int();
  20. void show_float();
  21. sbit RS=P1^0;
  22. sbit RW=P1^1;
  23. sbit E=P2^5;
  24. uchar temp,i=0,a=0,b=0,c=0,d=0,e=0,f=0,g=0;
  25. long num,num1,num2,num3,value,value1;
  26. uchar table[10];
  27. uchar table2[10];
  28. uchar table3[10];
  29. uchar table4[10];
  30. uchar code table1[]="0123456789";

  31. void main()
  32. {
  33.         Init_lcd();
  34.         while(1)
  35.         {
  36.           keyscan1();
  37.           keyscan2();
  38.           keyscan3();
  39.           keyscan4();
  40.         }
  41. }

  42. void keyscan1()
  43. {
  44.   key=0xfe;
  45.         temp=key;
  46.         temp=temp&0xf0;
  47.         if(temp!=0xf0)
  48.         {       
  49.                 delay(10);
  50.                 temp=key;
  51.           temp=temp&0xf0;
  52.                 if(temp!=0xf0)
  53.                 {
  54.                         switch(temp)
  55.                     {
  56.           case 0xe0:
  57.                                                         if(f==0)
  58.                                                                                 {
  59.                                                           if(e==0)
  60.                                                             table[i]='1';
  61.                                                     if(e==1)
  62.                                                             table2[i]='1';
  63.                                                                            }
  64.                                                                                 if(f==1)
  65.                                                           table3[i]='1';
  66.                                                                                 if(f==2)
  67.                                                           table4[i]='1';
  68.                                                                                  write_dat('1');
  69.                                                   break;
  70.                                         case 0xd0:
  71.                                                         if(f==0)
  72.                                                                                 {
  73.                                                           if(e==0)
  74.                                                              table[i]='2';
  75.                                                     if(e==1)
  76.                                                              table2[i]='2';
  77.                                                                           }
  78.                                                                                 if(f==1)
  79.                                                           table3[i]='2';
  80.                                                                                 if(f==2)
  81.                                                           table4[i]='2';
  82.                                                   write_dat('2');
  83.                                                   break;
  84.                                         case 0xb0:
  85.                                                         if(f==0)
  86.                                                                                 {
  87.                                                           if(e==0)
  88.                                                             table[i]='3';
  89.                                                     if(e==1)
  90.                                                             table2[i]='3';
  91.                                                                           }
  92.                                                                                 if(f==1)
  93.                                                           table3[i]='3';
  94.                                                                                 if(f==2)
  95.                                                           table4[i]='3';
  96.                                                   write_dat('3');
  97.                                                   break;
  98.                                         case 0x70:
  99.                                                         if(f==0)
  100.                                                                                 {
  101.                                                           if(e==0)
  102.                                                              table[i]='4';
  103.                                                     if(e==1)
  104.                                                              table2[i]='4';
  105.                                                                           }
  106.                                                                                 if(f==1)
  107.                                                           table3[i]='4';
  108.                                                                                 if(f==2)
  109.                                                           table4[i]='4';
  110.                                                   write_dat('4');
  111.                                                   break;
  112.         }
  113.                                 i++;
  114.                                 while(temp!=0xf0)
  115.                                 {
  116.                                         temp=key;
  117.                 temp=temp&0xf0;
  118.         }
  119.                 }
  120.         }
  121. }

  122. void keyscan2()
  123. {
  124.   key=0xfd;
  125.         temp=key;
  126.         temp=temp&0xf0;
  127.         if(temp!=0xf0)
  128.         {       
  129.                 delay(10);
  130.                 temp=key;
  131.           temp=temp&0xf0;
  132.                 if(temp!=0xf0)
  133.                 {
  134.                         switch(temp)
  135.                     {
  136.           case 0xe0:
  137.                                                         if(f==0)
  138.                                                                                 {
  139.                                                           if(e==0)
  140.                                                              table[i]='5';
  141.                                                     if(e==1)
  142.                                                              table2[i]='5';
  143.                                                                           }
  144.                                                                                 if(f==1)
  145.                                                           table3[i]='5';
  146.                                                                                 if(f==2)
  147.                                                           table4[i]='5';
  148.                                                   write_dat('5');
  149.                                                   break;
  150.                                         case 0xd0:
  151.                                                         if(f==0)
  152.                                                                                 {
  153.                                                           if(e==0)
  154.                                                              table[i]='6';
  155.                                                     if(e==1)
  156.                                                              table2[i]='6';
  157.                                                                           }
  158.                                                                                 if(f==1)
  159.                                                           table3[i]='6';
  160.                                                                                 if(f==2)
  161.                                                           table4[i]='6';
  162.                                                   write_dat('6');
  163.                                                   break;
  164.                                         case 0xb0:
  165.                                                         if(f==0)
  166.                                                                                 {
  167.                                                           if(e==0)
  168.                                                              table[i]='7';
  169.                                                     if(e==1)
  170.                                                              table2[i]='7';
  171.                                                                           }
  172.                                                                                 if(f==1)
  173.                                                           table3[i]='7';
  174.                                                                                 if(f==2)
  175.                                                           table4[i]='7';
  176.                                                   write_dat('7');
  177.                                                   break;
  178.                                         case 0x70:
  179.                                                         if(f==0)
  180.                                                                                 {
  181.                                                           if(e==0)
  182.                                                              table[i]='8';
  183.                                                     if(e==1)
  184.                                                              table2[i]='8';
  185.                                                                           }
  186.                                                                                 if(f==1)
  187.                                                           table3[i]='8';
  188.                                                                                 if(f==2)
  189.                                                           table4[i]='8';
  190.                                                   write_dat('8');
  191.                                                   break;
  192.         }
  193.                                 i++;
  194.                                 while(temp!=0xf0)
  195.                                 {
  196.                                         temp=key;
  197.                 temp=temp&0xf0;
  198.         }
  199.                 }
  200.         }
  201. }

  202. void keyscan3()
  203. {
  204.   key=0xfb;
  205.         temp=key;
  206.         temp=temp&0xf0;
  207.         if(temp!=0xf0)
  208.         {       
  209.                 delay(10);
  210.                 temp=key;
  211.           temp=temp&0xf0;
  212.                 if(temp!=0xf0)
  213.                 {
  214.                         switch(temp)
  215.                     {
  216.           case 0xe0:
  217.                                                         if(f==0)
  218.                                                                                 {
  219.                                                           if(e==0)
  220.                                                              table[i]='9';
  221.                                                     if(e==1)
  222.                                                              table2[i]='9';
  223.                                                                           }
  224.                                                                                 if(f==1)
  225.                                                           table3[i]='9';
  226.                                                                                 if(f==2)
  227.                                                           table4[i]='9';
  228.                                                                                 i++;
  229.                                                   write_dat('9');
  230.                                                   break;
  231.                                         case 0xd0:
  232.                                                         if(f==0)
  233.                                                                                 {
  234.                                                           if(e==0)
  235.                                                              table[i]='0';
  236.                                                     if(e==1)
  237.                                                              table2[i]='0';
  238.                                                                           }
  239.                                                                                 if(f==1)
  240.                                                           table3[i]='0';
  241.                                                                                 if(f==2)
  242.                                                           table4[i]='0';
  243.                                                                                 i++;
  244.                                                   write_dat('0');
  245.                                                   break;
  246.                                         case 0xb0:
  247.                                                          f++;
  248.                                                   g++;
  249.                                                   if(g==2)
  250.                                                                                         f++;
  251.                                                   i=0;
  252.                                                         write_dat('.');
  253.                                                   break;
  254.                                         case 0x70:
  255.                                                         write_dat('=');
  256.                                                         num=atol(table);
  257.                                                   num1=atol(table2);
  258.                                                   num2=atol(table3);
  259.                                                   num3=atol(table4);
  260.                                                   if(a==1)
  261.                                                     count_add();
  262.                                                                                 if(b==1)
  263.                                                     count_sub();
  264.                                                                                 if(c==1)
  265.                                                     count_mul();
  266.                                                                                 if(d==1)
  267.                       count_div();
  268.                                                   break;
  269.         }
  270.                                 while(temp!=0xf0)
  271.                                 {
  272.                                         temp=key;
  273.                 temp=temp&0xf0;
  274.         }
  275.                 }
  276.         }
  277. }

  278. void keyscan4()
  279. {
  280.   key=0xf7;
  281.         temp=key;
  282.         temp=temp&0xf0;
  283.         if(temp!=0xf0)
  284.         {       
  285.                 delay(10);
  286.                 temp=key;
  287.           temp=temp&0xf0;
  288.                 if(temp!=0xf0)
  289.                 {
  290.                         switch(temp)
  291.                     {
  292.           case 0xe0:
  293.                                                         write_dat('+');
  294.                                                   a++;
  295.                                                   break;
  296.                                         case 0xd0:
  297.                                                         write_dat('-');
  298.                                                   b++;
  299.                                                   break;
  300.                                         case 0xb0:
  301.                                                         write_dat('*');
  302.                                                   c++;
  303.                                                   break;
  304.                                         case 0x70:
  305.                                                         write_dat('/');
  306.                                                   d++;
  307.                                                   break;                
  308.         }
  309.                                 i=0;
  310.                                 f=0;
  311.                                 e++;
  312.                                 while(temp!=0xf0)
  313.                                 {
  314.           temp=key;
  315.                 temp=temp&0xf0;
  316.         }
  317.                 }
  318.         }       
  319. }

  320. void Init_lcd()
  321. {
  322.   write_com(0x38);
  323.         write_com(0x0e);
  324.         write_com(0x06);
  325.         write_com(0x01);
  326.         write_com(0x80);
  327. }

  328. void write_com(uchar com)
  329. {
  330.   RS=0;
  331.         RW=0;
  332.         E=1;
  333.         lcd=com;
  334.         delay(10);
  335.         E=0;
  336. }

  337. void write_dat(uchar dat)
  338. {
  339.   RS=1;
  340.         RW=0;
  341.         E=1;
  342.        
  343.         lcd=dat;
  344.         delay(10);
  345.         E=0;
  346. }

  347. void delay(uchar z)
  348. {
  349.   uchar x,y;
  350.         for(x=z;x>0;x--)
  351.             for(y=112;y>0;y--);
  352. }

  353. void count_add()
  354. {
  355.   value=num+num1;
  356.         value1=num2+num3;
  357.         if(value1>=10)
  358.         {
  359.                 value++;
  360.           value1=value1-10;
  361.         }
  362.         write_com(0x80+0x49);
  363.         show_int();
  364.         show_float();
  365.         while(1);
  366. }

  367. void count_sub()
  368. {
  369.   value=num-num1;
  370.         value1=num2-num3;
  371.         if(value1<0)
  372.         {
  373.    value--;
  374.          value1=num2-num3+10;
  375.   }
  376.         write_com(0x80+0x49);
  377.         show_int();
  378.         show_float();
  379.         while(1);
  380. }

  381. void count_mul()
  382. {
  383.   value=num*num1;
  384.         write_com(0x80+0x49);
  385.         show_int();
  386.         while(1);
  387. }

  388. void count_div()
  389. {
  390.   value=num/num1;
  391.         write_com(0x80+0x49);
  392.         show_int();
  393.         while(1);
  394. }

  395. void show_int()
  396. {
  397.   uchar one,two,three,four,five;
  398.         one=value/10000;
  399.         two=value%10000/1000;
  400.         three=value%10000%1000/100;
  401. ……………………

  402. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
计算器.rar (202.51 KB, 下载次数: 249)


评分

参与人数 2黑币 +55 收起 理由
lzp17771832625 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:284187 发表于 2018-2-16 00:29 | 只看该作者
谢谢楼主,不过这个得看板子吧,好多接口标注不太一样

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:310719 发表于 2018-4-18 11:05 | 只看该作者
感谢楼主的分享,改下端口就可以用了
回复

使用道具 举报

地板
ID:313211 发表于 2018-4-21 16:55 | 只看该作者
感觉楼主的程序。
回复

使用道具 举报

5#
ID:304879 发表于 2018-4-22 18:02 | 只看该作者
呵呵。不准确。 没有清零复位按键

评分

参与人数 1黑币 +1 收起 理由
mengsiu + 1

查看全部评分

回复

使用道具 举报

6#
ID:295658 发表于 2018-4-28 10:24 | 只看该作者
请问一下程序中f,e的作用,困扰好长时间了,新手小白,求指导,万分感谢
回复

使用道具 举报

7#
ID:280474 发表于 2018-6-5 20:08 | 只看该作者
我想下载
回复

使用道具 举报

8#
ID:328790 发表于 2018-6-10 14:18 来自手机 | 只看该作者
感谢分享,
回复

使用道具 举报

9#
ID:348901 发表于 2018-6-10 17:53 | 只看该作者
感谢分享
回复

使用道具 举报

10#
ID:353262 发表于 2018-6-17 23:39 | 只看该作者
赞一个
回复

使用道具 举报

11#
ID:394024 发表于 2018-9-5 14:11 | 只看该作者
谢谢楼主
回复

使用道具 举报

12#
ID:414974 发表于 2018-10-24 23:06 | 只看该作者
有中断程序吗
回复

使用道具 举报

13#
ID:414974 发表于 2018-10-25 10:58 | 只看该作者
哥,没有注释好难受看不懂
回复

使用道具 举报

14#
ID:392342 发表于 2018-10-25 10:58 | 只看该作者
感谢分享
回复

使用道具 举报

15#
ID:510618 发表于 2019-4-12 16:54 | 只看该作者
赞一个
回复

使用道具 举报

16#
ID:536119 发表于 2019-5-12 14:43 | 只看该作者
真的是很6
回复

使用道具 举报

17#
ID:548682 发表于 2019-5-27 19:20 | 只看该作者
weiyunman666 发表于 2018-4-28 10:24
请问一下程序中f,e的作用,困扰好长时间了,新手小白,求指导,万分感谢

同上,特别是那个按键switch那里
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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