找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求注释这个单片机程序

  [复制链接]
跳转到指定楼层
楼主
ID:449881 发表于 2018-12-27 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg52.h"
  2. typedef unsigned int uint;         
  3. typedef unsigned char uchar;

  4. sbit rw=P0^6;
  5. sbit rs=P0^7;
  6. sbit e=P0^5;
  7. uint fuhao,flag,k,i,j,num;
  8. uchar disp[]="rorrE";
  9. uchar wel[]="    Welcome!";
  10. long a,b,c,x;

  11. void delay(long i)  //延时
  12. {
  13.         while(i--);
  14. }
  15. void lcdwrc(uint c) //设置LCD写命令
  16. {
  17.         delay(1000);
  18.         rs=0;
  19.         rw=0;
  20.         e=0;
  21.         P2=c;
  22.         e=1;
  23.         delay(1000);
  24.         e=0;
  25. }
  26. void lcdwrd(uint dat) //设置LCD写数据
  27. {
  28.         delay(1000);
  29.         rs=1;
  30.         rw=0;
  31.         e=0;
  32.         P2=dat;
  33.         e=1;
  34.         delay(1000);
  35.         e=0;
  36.         rs=0;
  37. }
  38. void lcdinit()          //初始化LCD
  39. {
  40.         delay(1500);
  41.         lcdwrc(0x38);
  42.         delay(500);
  43.         lcdwrc(0x38);
  44.         delay(500);
  45.         lcdwrc(0x38);
  46.         delay(500);
  47.         lcdwrc(0x38); //功能设定指令
  48.         lcdwrc(0x08);  
  49.         lcdwrc(0x01); //清屏
  50.         lcdwrc(0x06);  //设置LCD显示
  51.         lcdwrc(0x0c); //显示开关控制指令
  52.     num=0;
  53.         fuhao=0;
  54.         flag=0;
  55.         a=0;
  56.         b=0;
  57.         c=0;
  58.         x=0;
  59.         k=0;
  60.         j=0;
  61. }

  62. void KeyDown()
  63. {
  64.     k=0;
  65.         P3=0x0f;
  66.         if(P3!=0x0f)
  67.         {
  68.                 delay(1000);
  69.                   if(P3!=0x0f)
  70.                 {
  71.                         P3=0x0f;
  72.                         switch(P3)
  73.                         {
  74.                                 case 0x07:
  75.                                 {
  76.                                         P3=0xf0;
  77.                                         switch(P3)
  78.                                        {
  79.                                      case 0x70: k=1; break;
  80.                                      case 0xb0: k=4; break;
  81.                                          case 0xd0: k=7; break;
  82.                                          case 0xe0: k=0; break;
  83.                                 }         
  84.                                     if(fuhao==0)
  85.                                      a=a*10+k;
  86.                                     else
  87.                                       b=b*10+k;        
  88.                              }
  89.                                  lcdwrd(0x30+k);
  90.                              while(P3!=0xf0);break;

  91.                     case 0x0b:
  92.                                          {
  93.                                            P3=0xf0;
  94.                                switch(P3)
  95.                                              {
  96.                                          case 0x70: num=2;k=2; break;
  97.                                      case 0xb0: num=6;k=5; break;
  98.                                      case 0xd0: num=10;k=8; break;
  99.                                          case 0xe0: num=14; break;
  100.                                        }  
  101.                                                  if(num!=14)
  102.                                                 {        
  103.                                              if(fuhao==0)
  104.                                                     a=a*10+k;
  105.                                                  else
  106.                                                    b=b*10+k;        
  107.                                                    lcdwrd(0x30+k);
  108.                                                 }        
  109.                                                  if(num==14)
  110.                                                 {         
  111.                                                   lcdwrc(0x01);        //清屏指令                        
  112.                                                  lcdinit();
  113.                                             }
  114.                                           }
  115.                                           while(P3!=0xf0); break;

  116.                                  case 0x0d:
  117.                                      {
  118.                                                  P3=0xf0;
  119.                                     switch(P3)
  120.                                        {
  121.                                      case 0x70: num=3;  k=3;  break;
  122.                                      case 0xb0: num=7;  k=6;  break;
  123.                                      case 0xd0: num=11; k=9;  break;
  124.                                      case 0xe0: num=15;       break;
  125.                                     }        
  126.                                                 if(num!=15)
  127.                                             {        
  128.                                               if(fuhao==0)
  129.                                                    a=a*10+k;
  130.                                                   else
  131.                                                   b=b*10+k;        
  132.                                                   lcdwrd(0x30+k);
  133.                                              }
  134.                                                  if(num==15)
  135.                                                 {
  136.                                                     switch(flag)
  137.                                                         {
  138.                                                                 case 1:
  139.                                                                 {
  140.                                                                  c=a+b;
  141.                                                                  lcdwrc(0x4f+0x80);
  142.                                                      lcdwrc(0x04);
  143.                                                                  if(c==0)
  144.                                                                  lcdwrd(0x30);
  145.                                                              while(c!=0)         
  146.                                                      {
  147.                                                                    lcdwrd(0x30+c%10);
  148.                                                             c=c/10;
  149.                                                          }
  150.                                                                    lcdwrd(0x3d);
  151.                                                                    }break;

  152.                                                                 case 2:
  153.                                                                 {
  154.                                                                   if(a>b)
  155.                                                                c=a-b;
  156.                                                           else
  157.                                                                c=b-a;

  158.                                                                   lcdwrc(0x4f+0x80);
  159.                                               lcdwrc(0x04);

  160.                                                                   if(c==0)
  161.                                                                    lcdwrd(0x30);

  162.                                                                   while(c!=0)
  163.                                                       {
  164.                                                                    lcdwrd(0x30+c%10);
  165.                                                                    c=c/10;
  166.                                                              }
  167.                                                                if(a<b)
  168.                                                                          lcdwrd(0x2d);

  169.                                                         lcdwrd(0x3d);
  170.                                                                  }break;

  171.                                                              case 3:
  172.                                                             {
  173.                                                                       c=a*b;
  174.                                                                     lcdwrc(0x4f+0x80);
  175.                                                 lcdwrc(0x04);
  176.                                                                         if(c==0)
  177.                                                                         lcdwrd(0x30);
  178.                                                              while(c!=0)         
  179.                                                                         {                                                                     
  180.                                                               lcdwrd(0x30+c%10);
  181.                                                        c=c/10;
  182.                                                             }
  183.                                                                  lcdwrd(0x3d);
  184.                                                                   }    break;

  185.                                                                 case 4:        
  186.                                                                 {        
  187.                                                                     if(b==0)
  188.                                                                         {
  189.                                                                             lcdwrc(0x4f+0x80);
  190.                                                                  lcdwrc(0x04);
  191.                                                                             for(i=0;i<5;i++)
  192.                                                                         lcdwrd(disp[i]);
  193.                                                                   }
  194.                                                                         else
  195.                                                                      {        
  196.                                                                            c=(long)(((float)a/b)*10000);
  197.                                                                    x=c;
  198.                                                                             lcdwrc(0x4f+0x80);
  199.                                                                 lcdwrc(0x04);
  200.                                                                while(c!=0)         //一位一位显示
  201.                                                               {
  202.                                                                     k++;
  203.                                                                     lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置
  204.                                                                       c=c/10;//取前面的结果数据
  205.                                                                          if(x>0&&x<=9)
  206.                                                                     {
  207.                                                                               if(k==1)
  208.                                                                      {        
  209.                                                                                lcdwrd(0x30);
  210.                                                                            lcdwrd(0x30);
  211.                                                                        lcdwrd(0x30);
  212.                                                                            lcdwrd(0x2e);
  213.                                                                              k=0;
  214.                                                                         }
  215.                                                                     }
  216.                                                                      if(x>9&&x<=99)
  217.                                                                    {        
  218.                                                                               if(k==2)
  219.                                                                      {        
  220.                                                                                    lcdwrd(0x30);
  221.                                                                        lcdwrd(0x30);
  222.                                                                             lcdwrd(0x2e);
  223.                                                                            k=0;
  224.                                                                     }
  225.                                                                    }
  226.                                                                     if(x>99&&x<=999)
  227.                                                                    {
  228.                                                                              if(k==3)
  229.                                                                 {
  230.                                                                        lcdwrd(0x30);
  231.                                                                        lcdwrd(0x2e);
  232.                                                                            k=0;
  233.                                                                     }        
  234.                                                                    }
  235.                                                                        else
  236.                                                                   if(k==4)
  237.                                                                   {
  238.                                                                          lcdwrd(0x2e);
  239.                                                                          k=0;
  240.                                                               }               
  241.                                                                 }
  242.                                    if(x<10000)
  243.                                                                                 lcdwrd(0x30);
  244.                                                                 lcdwrd(0x3d);         
  245.                                                      }
  246.                                                    }        break;
  247.                                                    }
  248.                                                 }
  249.                                    }while(P3!=0xf0);break;
  250.                                    case 0x0e:
  251.                                          {        
  252.                                              fuhao=1;
  253.                                                 P3=0xf0;
  254.                                     switch(P3)
  255.                                       {
  256.                                             case 0x70: flag=1;lcdwrd(0x2b);   break;
  257.                                             case 0xb0:flag=2; lcdwrd(0x2d);  break;
  258.                                              case 0xd0: flag=3;lcdwrd(0x2a);  break;
  259.                                             case 0xe0: flag=4; lcdwrd(0x2f); break;
  260.                                     }         
  261.                         }  while(P3!=0xf0);  break;
  262.                         }
  263.                  }
  264.          }
  265. }

  266. void main()
  267. {        
  268.     uint x;
  269.         lcdinit();
  270.         for(x=0;x<12;x++)
  271.         lcdwrd(wel[x]);
  272.         delay(50000);
  273.         lcdwrc(0x01);
  274.         while(1)               
  275.            KeyDown();
  276. }

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

使用道具 举报

沙发
ID:454000 发表于 2018-12-28 15:42 | 只看该作者
这是最基本的,你上网看看LCD1602与矩阵按键的视频,LCD1602就4个函数,判忙(他这儿没有,这个看情况)函数,初始化LCD函数,LCD写命令(确定你要写东西的位置),LCD写数据。KeyDown()矩阵按键函数,别看他又臭又长,他只是判断出0-15共记16个键(4*4键盘).按键按下给个地址,例如lcdwrc(0x4f+0x80);跟着就放数据

评分

参与人数 2黑币 +30 收起 理由
还有谁? + 15
找人PK + 15

查看全部评分

回复

使用道具 举报

板凳
ID:449525 发表于 2018-12-28 16:58 | 只看该作者
网上1602的代码一堆,各种注释都有的,你自己去看下就行了
回复

使用道具 举报

地板
ID:454000 发表于 2018-12-28 18:30 | 只看该作者
先看视频,视频懂了就跟着视频敲几下关键代码。LCD1602有静态与动态显示,动态很重要,另外就是显示汉字,不能急,一步步来!莫听一些无聊之人扯,新手光看代码是看不出什么意义的!

评分

参与人数 2黑币 +50 收起 理由
还有谁? + 15
yoxi + 35

查看全部评分

回复

使用道具 举报

5#
ID:356526 发表于 2018-12-28 19:56 | 只看该作者
外设这种东西,看看使用手册就行了,不想看的话,网上也有很多教学视频什么的,楼主可以去学习一下
回复

使用道具 举报

6#
ID:449881 发表于 2019-2-6 10:43 | 只看该作者
shuisheng 发表于 2018-12-28 18:30
先看视频,视频懂了就跟着视频敲几下关键代码。LCD1602有静态与动态显示,动态很重要,另外就是显示汉字, ...

嗯啊,谢谢
回复

使用道具 举报

7#
ID:460466 发表于 2019-2-6 18:36 | 只看该作者
其实你这个“注释语句”不失为一个初学编程的好办法,可惜没有这样做的,就是不愿捅破这层窗户纸!莫名其妙?
回复

使用道具 举报

8#
ID:474670 发表于 2019-2-7 03:38 | 只看该作者
用心的人一点就通明,整天夸夸其谈之人白费功,多说无益!

评分

参与人数 3黑币 +62 收起 理由
zhengchong60 + 15
钻牛尖滴刘尖尖 + 12
#include51.h + 35

查看全部评分

回复

使用道具 举报

9#
ID:460466 发表于 2019-2-7 12:47 | 只看该作者
站着说话不腰疼 发表于 2019-2-7 03:38
用心的人一点就通明,整天夸夸其谈之人白费功,多说无益!

“一点就通”,说得非常对!!关键就缺这一点。
回复

使用道具 举报

10#
ID:475247 发表于 2019-2-8 04:02 | 只看该作者
海阔天空8 发表于 2019-2-7 12:47
“一点就通”,说得非常对!!关键就缺这一点。

不对呵!关键是少了灵犀,无灵犀(后天不努力务实上进者)点废也点不出结果

评分

参与人数 4黑币 +77 收起 理由
春风十里吹 + 12 赞一个!
站着说话不腰疼 + 15
找人PK + 15
shuisheng60 + 35

查看全部评分

回复

使用道具 举报

11#
ID:474670 发表于 2019-2-8 12:39 | 只看该作者
说的对极了!所谓师傅领进门,修行靠个人 !

评分

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

查看全部评分

回复

使用道具 举报

12#
ID:96682 发表于 2019-2-8 17:24 | 只看该作者
海阔天空8 发表于 2019-2-7 12:47
“一点就通”,说得非常对!!关键就缺这一点。

缺么?缺的是用心的人

zl2168

张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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