找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5479|回复: 11
收起左侧

基于51单片机的12864液晶显示计算器仿真+代码

  [复制链接]
ID:66276 发表于 2017-9-14 09:00 | 显示全部楼层 |阅读模式
kiel文件和protues仿真文件在最后放出供下载,
51单片机和12864液晶屏组成计算器仿真原理图如下
捕获.PNG

0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<zm.h>
  4. sbit en=P3^0;
  5. sbit rw=P3^1;
  6. sbit rs=P3^2;
  7. sbit cs2=P3^3;
  8. sbit cs1=P3^4;
  9. sbit rst=P3^5;
  10. uchar key,wei=4,hang=0,k=0;
  11. unsigned long a1=0,a2=0,count=0;
  12. void wc(uchar cmd)
  13. {
  14.         _nop_();
  15.         rs=0;
  16.         rw=0;
  17.         en=1;
  18.         P2=cmd;
  19.         _nop_();
  20.         en=0;
  21. }
  22. void wd(uchar dat)
  23. {
  24.         _nop_();
  25.         rs=1;
  26.         rw=0;
  27.         en=1;
  28.         P2=dat;
  29.         _nop_();
  30.         en=0;
  31. }
  32. void delay(uchar ms)
  33. {
  34.         uchar i,j;
  35.         for(i=ms;i>0;i--)
  36.                 for(j=113;j>0;j--);
  37. }
  38. void set(uchar line,uchar col)
  39. {
  40.         line=line|0xb8;
  41.         col=col|0x40;
  42.         wc(col);
  43.         wc(line);
  44. }
  45. void clean()
  46. {
  47.         uchar i,j,k=0;
  48.         rst=0;
  49.         delay(10);
  50.         rst=1;
  51.         wc(0xc0);//设置显示起始行11xxxxxx
  52.         wc(0x3f);//00111111显示开,00111110显示关
  53.         cs1=0,cs2=0;
  54.         set(0,0);
  55.         for(i=0;i<8;i++)
  56.                 {for(j=0;j<64;j++)
  57.                         wd(0x00);
  58.                         k++;
  59.                         set(k,0);
  60.                         }
  61.         a1=0;a2=0;count=0;k=0;
  62.         wei=4;
  63.         hang=0;
  64. }
  65. void write(uchar zi)
  66. {
  67.         uchar i;
  68.         if(wei<63)
  69.         {
  70.         cs1=0,cs2=1;
  71.         set(hang,wei);
  72.         for(i=0;i<6;i++)
  73.                 wd(nAsciiDot[zi++]);
  74.         wei=wei+6;
  75.         if(wei>59)
  76.         {cs1=1;
  77.         cs2=0;}
  78.         if(hang>7)
  79.         hang=0;
  80.         }
  81.         else
  82.         {
  83.         set(hang,wei-64);
  84.         for(i=0;i<6;i++)
  85.                 wd(nAsciiDot[zi++]);
  86.         wei=wei+6;
  87.         if(wei>123)
  88.         {wei=4;
  89.         hang++;
  90.         cs1=0;
  91.         cs2=1;}
  92.         if(hang>7)
  93.         hang=0;
  94.         }
  95. }
  96. void jis()
  97. {
  98.         switch(k)
  99.         {
  100.                 case 0:
  101.                         break;
  102.                 case 1:
  103.                         count=a2*a1;a1=count;break;
  104.                 case 2:
  105.                         count=a2+a1;a1=count;break;       
  106.                 case 3:
  107.                         count=a2-a1;a1=count;break;
  108.                 case 4:
  109.                         count=a2/a1;a1=count;break;
  110.                 default:
  111.                         break;
  112.         }
  113. }
  114.                        
  115. void rel()
  116. {       
  117.         uchar a=P1;
  118.         write(key);
  119.         while((a&0x0f)!=0x0f)
  120.         {
  121.                 a=P1;
  122.         }       
  123.         switch(key/6)
  124.         {
  125.                 case 0:
  126.                 case 1:
  127.                 case 2:
  128.                 case 3:
  129.                 case 4:
  130.                 case 5:
  131.                 case 6:
  132.                 case 7:
  133.                 case 8:
  134.                 case 9:
  135.                         a1=a1*10+key/6;break;
  136.                 case 10:
  137.                         jis();a2=a1;a1=0;k=1;break;
  138.                 case 11:
  139.                         jis();a2=a1;a1=0;k=2;break;
  140.                 case 12:
  141.                         jis();a2=a1;a1=0;k=3;break;
  142.                 case 13:
  143.                         jis();,                                                                                                                        a2=a1;a1=0;k=4;break;
  144.                 case 14:
  145.                         {
  146.                                 switch(k)
  147.                                 {
  148.                                         case 1:
  149.                                                 count=a2*a1;break;
  150.                                         case 2:
  151.                                                 count=a2+a1;break;       
  152.                                         case 3:
  153.                                                 count=a2-a1;break;
  154.                                         case 4:
  155.                                                 count=a2/a1;break;
  156.                                         default:
  157.                                                 break;
  158.                                 }
  159.                                 if(count>999999999)
  160.                                         write(90);
  161.                                 else
  162.                                         if(count>99999999)
  163.                                                 {
  164.                                                  write(count/100000000*6);
  165.                                                  write(count%100000000/10000000*6);
  166.                                                  write(count%10000000/1000000*6);
  167.                                                  write(count%1000000/100000*6);
  168.                                                  write(count%100000/10000*6);
  169.                                                  write(count%10000/1000*6);
  170.                                                  write(count%1000/100*6);
  171.                                                  write(count%100/10*6);
  172.                                                  write(count%10*6);
  173.                                                  }
  174.                                         else
  175.                                         if(count>9999999)
  176.                                                 {
  177.                                                  write(count%100000000/10000000*6);
  178.                                                  write(count%10000000/1000000*6);
  179.                                                  write(count%1000000/100000*6);
  180.                                                  write(count%100000/10000*6);
  181.                                                  write(count%10000/1000*6);
  182.                                                  write(count%1000/100*6);
  183.                                                  write(count%100/10*6);
  184.                                                  write(count%10*6);
  185.                                                  }
  186.                                                  else
  187.                                         if(count>999999)
  188.                                                 {
  189.                                                  write(count%10000000/1000000*6);
  190.                                                  write(count%1000000/100000*6);
  191.                                                  write(count%100000/10000*6);
  192.                                                  write(count%10000/1000*6);
  193.                                                  write(count%1000/100*6);
  194.                                                  write(count%100/10*6);
  195.                                                  write(count%10*6);
  196.                                                  }
  197.                                                  else
  198.                                         if(count>99999)
  199.                                                 {
  200.                                                  write(count%1000000/100000*6);
  201.                                                  write(count%100000/10000*6);
  202.                                                  write(count%10000/1000*6);
  203.                                                  write(count%1000/100*6);
  204.                                                  write(count%100/10*6);
  205.                                                  write(count%10*6);
  206.                                                  }
  207.                                                  else
  208.                                         if(count>9999)
  209.                                                 {

  210.                                                  write(count%100000/10000*6);
  211.                                                  write(count%10000/1000*6);
  212.                                                  write(count%1000/100*6);
  213.                                                  write(count%100/10*6);
  214.                                                  write(count%10*6);
  215.                                                  }
  216.                                                  else
  217.                                         if(count>999)
  218.                                                 {
  219.                                                  write(count%10000/1000*6);
  220.                                                  write(count%1000/100*6);
  221.                                                  write(count%100/10*6);
  222.                                                  write(count%10*6);
  223.                                                  }
  224.                                                  else
  225.                                         if(count>99)
  226.                                                 {
  227.                                                  write(count%1000/100*6);
  228.                                                  write(count%100/10*6);
  229.                                                  write(count%10*6);
  230.                                                  }
  231.                                                  else
  232.                                         if(count>9)
  233.                                                 {
  234.                                                  write(count%100/10*6);
  235.                                                  write(count%10*6);
  236.                                                  }
  237.                                                  else
  238.                                                 {
  239.                                                  write(count%10*6);
  240.                                                  }
  241.                                         a1=count;k=0;
  242.                         }break;                       
  243.                 default:
  244.                         break;
  245.         }
  246. }

  247. void keyscan()
  248. {
  249.         uchar a;
  250.         P1=0xef;
  251.         a=P1;
  252.         a=a&0x0f;
  253.         switch(a)
  254.         {case 7:
  255.                 key=90;clean();break;
  256.         case 11:
  257.                 key=0;rel();break;
  258.         case 13:
  259.                 key=84;rel();break;
  260.         case 14:
  261.                 key=66;rel();break;
  262.         default:
  263.                 break;}
  264.        
  265.         P1=0xdf;
  266.         a=P1;
  267.         a=a&0x0f;
  268.         switch(a)
  269.         {case 7:
  270.                 key=6;rel();break;
  271.         case 11:
  272.                 key=12;rel();break;
  273.         case 13:
  274.                 key=18;rel();break;
  275.         case 14:
  276.                 key=72;rel();break;
  277.         default:
  278.                 break;}
  279.        
  280.         P1=0xbf;
  281.         a=P1;
  282.         a=a&0x0f;
  283.         switch(a)
  284.         {case 7:
  285.                 key=24;rel();break;
  286.         case 11:
  287. ……………………

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

所有资料51hei提供下载:
computer.rar (61.12 KB, 下载次数: 164)

评分

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

查看全部评分

回复

使用道具 举报

ID:234222 发表于 2017-9-19 21:59 | 显示全部楼层
好好好
回复

使用道具 举报

ID:87193 发表于 2017-9-25 15:22 | 显示全部楼层
kiel文件文件夹怎么是空的
回复

使用道具 举报

ID:235516 发表于 2017-9-25 15:52 | 显示全部楼层
非常需要,谢谢楼主
回复

使用道具 举报

ID:369770 发表于 2018-7-11 21:24 | 显示全部楼层
666 谢谢
回复

使用道具 举报

ID:169899 发表于 2018-12-9 14:54 | 显示全部楼层
感谢分享啊
回复

使用道具 举报

ID:444834 发表于 2018-12-12 15:13 | 显示全部楼层
最近学习中,需要借鉴一下
回复

使用道具 举报

ID:444834 发表于 2018-12-12 15:24 | 显示全部楼层
非常需要它
回复

使用道具 举报

ID:515634 发表于 2019-4-18 17:28 | 显示全部楼层
非常需要它,谢谢
回复

使用道具 举报

ID:518790 发表于 2019-4-24 10:37 | 显示全部楼层
源代码报错
回复

使用道具 举报

ID:520474 发表于 2019-4-24 14:54 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

ID:417092 发表于 2019-4-24 15:57 | 显示全部楼层
这个程序,有按键消抖功能吗。。。
消抖使用的是,定时中断,还是延时。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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