找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求注释单片机程序,我好一句一句研究、修改、测试、吃透!

[复制链接]
跳转到指定楼层
楼主
ID:477733 发表于 2019-2-18 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
半路出家,刚接触单片机程序,感觉改程序就像打游戏,不通关睡不着觉,就想让继电器按我的设想去工作,不想直接问小白问题,哪位大神帮我把这段程序加下注释,我好一句一句研究、修改、测试、吃透!跪谢!!

  1. /********************************************************************/

  2. #include<STC12C5A60S2.h>   //库文件
  3. #include<Init_IO.h>             //库文件
  4. #define uchar unsigned char//宏定义无符号字符型
  5. #define uint unsigned int  //宏定义无符号整型

  6. typedef unsigned char BYTE;
  7. typedef unsigned int WORD;

  8. uchar dat[4];
  9. uchar cnt,cnt1;
  10. bit start=0,start1=0;

  11. bit ON1=0;
  12. bit ON2=0;
  13. bit ON3=0;
  14. bit ON4=0;
  15. bit ON5=0;
  16. bit ON6=0;
  17. bit ON7=0;
  18. bit ON8=0;

  19. /*------------------------------------------------
  20.                    函数声明
  21. ------------------------------------------------*/
  22. void Send(uchar da);
  23. void Delay(WORD n);

  24. /*------------------------------------------------
  25.                    串口初始化
  26. ------------------------------------------------*/

  27. void init ()
  28. {
  29.         TMOD = 0x20;                          //定时器1产生波特率
  30.         SCON = 0x50;                         //方式1,8位数据,波特率可变
  31.         TH1=TL1 = 0xF7;                 //串口1波特率 38400      
  32.         S2CON = 0x50;                         //方式1,八位数据,可变波特率
  33.         BRT=0xFD;                                  //串口2波特率9600
  34.         TR1=1;                                          //启动定时器产生串口2波特率      
  35.         AUXR = AUXR|0x10;        //允许独立波特率发生器运行
  36.         AUXR = AUXR|0x40;
  37.         IP=0x00;                                 //优先级默认
  38.           EA=1;                                      //开总中断
  39.         IE2=0x01;                                 //开串口2中断
  40. }
  41. /*--------------------------------------
  42.           延时函数
  43. --------------------------------------*/
  44. void Delay(WORD n)
  45. {
  46.     WORD x;

  47.     while (n--)
  48.      {
  49.         x = 500;
  50.         while (x--);
  51.           }
  52. }

  53. /*--------------------------------------
  54.           串口函数
  55. --------------------------------------*/
  56. void clbuf()
  57. {
  58.         dat[0] = 0;
  59.         dat[1] = 0;
  60.         dat[2] = 0;
  61.         dat[3] = 0;
  62. }

  63. void Send(uchar da)
  64. {
  65.      SBUF = da;
  66.      while(!TI);
  67.      TI = 0;
  68. }

  69. void scan()
  70.         {                     
  71.         /********************************************************************
  72.                                     接收数据判断函数
  73.         *********************************************************************/
  74.         if(dat[0]=='p' && dat[1]=='1'&&dat[2]=='0'&&dat[3]=='1')
  75.         {
  76.         clbuf();
  77.         K09 = 0;Delay(3);K09=1;
  78.         }
  79.         if(dat[0]=='p' && dat[1]=='1'&&dat[2]=='0'&&dat[3]=='2')
  80.         {
  81.         clbuf();
  82.         K10 = 0;Delay(3);K10=1;
  83.         }
  84.         if(dat[0]=='p' && dat[1]=='1'&&dat[2]=='0'&&dat[3]=='3')
  85.         {
  86.         clbuf();
  87.         K11 = 0;Delay(3);K11=1;
  88.         }
  89.         if(dat[0]=='p' && dat[1]=='1'&&dat[2]=='0'&&dat[3]=='4')
  90.         {
  91.         clbuf();
  92.         K12 = 0;Delay(3);K12=1;
  93.         }
  94. }

  95. /*--------------------------------------
  96.           主函数
  97. --------------------------------------*/
  98. void main()
  99. {
  100.    P4SW|=0x20;                   //配置P4.5为IO口
  101.    P4M0|=0x10;                   //配置P4.4为IO口
  102.    P4M1|=0x10;
  103.    P0=P1=P2=P3=0xff;
  104.    P4|=0x30;
  105.    init();//串口初始化

  106.    Send(0X67);Send(0X6F);Send(0X6F);Send(0X64);

  107.    while(1)
  108.    {
  109.             scan();

  110.           if(!IN01||!IN02||!IN03||!IN04||!IN05||!IN06||!IN07||!IN08){Delay(1);

  111.                  if(!IN01&&!ON1){ON1=1;Send(0X02);Send(0X03);Send(0X01);Send(0X03);K01=0;}
  112.                  if(!IN02&&!ON2){ON2=1;Send(0X02);Send(0X03);Send(0X02);Send(0X03);K02=0;}
  113.                  if(!IN03&&!ON3){ON3=1;Send(0X02);Send(0X03);Send(0X03);Send(0X03);K03=0;}
  114.                  if(!IN04&&!ON4){ON4=1;Send(0X02);Send(0X03);Send(0X04);Send(0X03);K04=0;}
  115.                  if(!IN05&&!ON5){ON5=1;Send(0X02);Send(0X03);Send(0X01);Send(0X03);K05=0;}
  116.                  if(!IN06&&!ON6){ON6=1;Send(0X02);Send(0X03);Send(0X02);Send(0X03);K06=0;}
  117.                  if(!IN07&&!ON7){ON7=1;Send(0X02);Send(0X03);Send(0X03);Send(0X03);K07=0;}
  118.                  if(!IN08&&!ON8){ON8=1;Send(0X02);Send(0X03);Send(0X04);Send(0X03);K08=0;}

  119.                  if(!K01||!K02||!K03||!K04){Delay(5);K01=1;K02=1;K03=1;K04=1;}
  120.                  if(!K05||!K06||!K07||!K08){Delay(9);K05=1;K06=1;K07=1;K08=1;}
  121.                                  
  122.                  if(IN01&&ON1){ON1=0;}
  123.                  if(IN02&&ON2){ON2=0;}
  124.                  if(IN03&&ON3){ON3=0;}
  125.                  if(IN04&&ON4){ON4=0;}                                 
  126.                  if(IN05&&ON5){ON5=0;}
  127.                  if(IN06&&ON6){ON6=0;}
  128.                  if(IN07&&ON7){ON7=0;}
  129.                  if(IN08&&ON8){ON8=0;}

  130.        }

  131.           if(!IN09){Send(0X02);Send(0X03);Send(0X05);Send(0X03);while(!IN09);}
  132.           if(!IN10){Send(0X02);Send(0X03);Send(0X06);Send(0X03);while(!IN10);}
  133.           if(!IN11){Send(0X02);Send(0X03);Send(0X07);Send(0X03);while(!IN11);}
  134.           if(!IN12){Send(0X02);Send(0X03);Send(0X08);Send(0X03);while(!IN12);}
  135.    }
  136. }
  137.       
  138. /*--------------------------------------
  139.       串口二接收中断函数
  140. --------------------------------------*/
  141. void uart2_isr()  interrupt 8
  142. {
  143.    if( S2CON & 0x01 )
  144.          {
  145.                 S2CON &=~0x01;
  146.                 dat[cnt1] = S2BUF;
  147.                 if((dat[cnt1]>='A'))
  148.                 start1  = 1;
  149.                 if(start1)
  150.                 {
  151.                         cnt1 ++;
  152.                 if(cnt1 > 3)
  153.                 {
  154.                         cnt1 = 0;
  155.                         start1 = 0;      
  156.                 }      
  157.                 }
  158.          }
  159. }
  160. /********************************************************************
  161.                               结束
  162. *********************************************************************/
复制代码




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

使用道具 举报

沙发
ID:319023 发表于 2019-2-18 16:34 | 只看该作者
多学C语言这是基础,找书去看例程代码,百度找学习视频看。
回复

使用道具 举报

板凳
ID:444306 发表于 2019-2-18 17:35 | 只看该作者
感觉改程序就像打游戏,不通关睡不着觉,那就别人不睡着觉你打游戏?

评分

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

查看全部评分

回复

使用道具 举报

地板
ID:477852 发表于 2019-2-18 18:43 | 只看该作者
  支持一下
回复

使用道具 举报

5#
ID:138119 发表于 2019-2-18 18:54 | 只看该作者
小哥哥!如果愿意,一起学习如何?
回复

使用道具 举报

6#
ID:477733 发表于 2019-2-18 19:44 | 只看该作者
areyouok 发表于 2019-2-18 17:35
感觉改程序就像打游戏,不通关睡不着觉,那就别人不睡着觉你打游戏?

每个函数都仔细百度学习过,每个循环都试着反复判断过,但是整个放在一起就没法读懂了,半路出家闭门造车,折磨自己好几天了,没办法只好来这里求助了,可能比喻不恰当,还请谅解。
回复

使用道具 举报

7#
ID:477733 发表于 2019-2-18 19:49 | 只看该作者
areyouok 发表于 2019-2-18 17:35
感觉改程序就像打游戏,不通关睡不着觉,那就别人不睡着觉你打游戏?

换个比喻,这就像一片古文,字,词我都认识了,可是联系了上下文我就理解不了,烦请帮指点下程序设计思路
回复

使用道具 举报

8#
ID:213173 发表于 2019-2-18 21:13 | 只看该作者
你有逐句研究、修改、测试、吃透一个程序的时间,不如找一个视频教程,亦步亦趋,照猫画虎,由简到繁,十天半月就能看懂甚至自己就能写出这样的程序,其实这个程序也是很初级的,只能算入门级的作品。如果买一个有配套视频的开发板,按照例程实战,进步会很快,这时碰巧再接到一个对于你至关重要工程。当你日以继夜的完成任务后,你会发现你很佩服自己。
回复

使用道具 举报

9#
ID:478073 发表于 2019-2-19 14:12 | 只看该作者
自己动手,丰衣足食!
回复

使用道具 举报

10#
ID:478073 发表于 2019-2-19 14:13 | 只看该作者
zgablong001 发表于 2019-2-18 19:44
每个函数都仔细百度学习过,每个循环都试着反复判断过,但是整个放在一起就没法读懂了,半路出家闭门造车 ...

有那么多说话的时间,早就学会了
回复

使用道具 举报

11#
ID:474670 发表于 2019-2-19 14:23 | 只看该作者
zgablong001 发表于 2019-2-18 19:49
换个比喻,这就像一片古文,字,词我都认识了,可是联系了上下文我就理解不了,烦请帮指点下程序设计思路

找一个视频教程,不是百度找解释!方法决定结果

评分

参与人数 1黑币 +10 收起 理由
正规007 + 10 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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