找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口控制灯没反应,程序和电路应该没问题 求指导

[复制链接]
回帖奖励 6 黑币 回复本帖可获得 6 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
程序和电路应该没问题但为何没反应

单片机源程序如下:
  1. #include "reg52.h"
  2. #include "uart.h"
  3. void LED_OFF(u8 char_num) //关闭LED
  4. {
  5.         switch(char_num)//对象码
  6.         {
  7.                  case '1':               
  8.                          P1|=1<<0;
  9.                          UART_SendStr("LED1_OFF \r\n");
  10.                  break;
  11.                  case '2':               
  12.                          P1|=1<<1;
  13.                          UART_SendStr("LED2_OFF \r\n");
  14.                  break;
  15.                  case '3':               
  16.                          P1|=1<<2;
  17.                          UART_SendStr("LED3_OFF \r\n");
  18.                  break;
  19.                  case '4':               
  20.                          P1|=1<<3;
  21.                          UART_SendStr("LED4_OFF \r\n");
  22.                  break;
  23.                  case '5':               
  24.                          P1|=1<<4;
  25.                          UART_SendStr("LED5_OFF \r\n");
  26.                  break;
  27.                  case '6':               
  28.                          P1|=1<<5;
  29.                          UART_SendStr("LED6_OFF \r\n");
  30.                  break;
  31.                  case '7':               
  32.                          P1|=1<<6;
  33.                          UART_SendStr("LED7_OFF \r\n");
  34.                  break;
  35.                  case '8':               
  36.                          P1|=1<<7;
  37.                          UART_SendStr("LED8_OFF \r\n");
  38.                  break;               
  39.   }
  40. }
  41. void LED_ON(u8 char_num) //打开LED
  42. {
  43.         switch(char_num)//对象码
  44.         {
  45.                  case '1':               
  46.                          P1&=~(1<<0);
  47.                          UART_SendStr("LED1_ON \r\n");
  48.                  break;
  49.                  case '2':               
  50.                          P1&=~(1<<1);
  51.                          UART_SendStr("LED2_ON \r\n");
  52.                  break;
  53.                  case '3':               
  54.                          P1&=~(1<<2);
  55.                          UART_SendStr("LED3_ON \r\n");
  56.                  break;
  57.                  case '4':               
  58.                          P1&=~(1<<3);
  59.                          UART_SendStr("LED4_ON \r\n");
  60.                  break;
  61.                  case '5':               
  62.                          P1&=~(1<<4);
  63.                          UART_SendStr("LED5_ON \r\n");
  64.                  break;
  65.                  case '6':               
  66.                          P1&=~(1<<5);
  67.                          UART_SendStr("LED6_ON \r\n");
  68.                  break;
  69.                  case '7':               
  70.                          P1&=~(1<<6);
  71.                          UART_SendStr("LED7_ON \r\n");
  72.                  break;
  73.                  case '8':               
  74.                          P1&=~(1<<7);
  75.                          UART_SendStr("LED8/ON \r\n");
  76.                  break;               
  77.   }
  78. }

  79. /*指令说明:
  80. *发送 001  关闭LED  (001表示:分类码='0',功能码='0',对象码='1' ,分类码='0'表示LED控制类,功能码'0'表示关闭LED,对象码'1'表示第1个LED)
  81. *发送 011  打开LED  (011表示:分类码='0',功能码='1',对象码='1' ,分类码='0'表示LED控制类,功能码'1'表示打开LED,对象码'1'表示第1个LED)

  82. *无结束符,适用于固定长度的指令,本工程设计为固定长度为2个字符的指令
  83. *第一个字符表示类别码,即是什么分类
  84. *第二个字符代表功能码,即是什么功能
  85. *第三个字符代表对象码,即是什么对象
  86. *可以修改长度来增减指令长度,获得更多嵌套层数功能控制。
  87. */
  88. void main(void) //主函数扫描方式
  89. {
  90.   UART_Configure(9600);//配置9600波特率(默认无奇偶校验,1位停止位,8位数据位)
  91.         while(1)
  92.         {
  93.                 if(Uart.RX_COUNT>=3) //判断串口是否接收到3个以上数据,修改此处的数据可改变指令长度
  94.                 {
  95.                          switch(Uart.RX_BUFF[0]) //类别码
  96.                          {
  97.                                  case '0': //LED控制类
  98.                                          switch(Uart.RX_BUFF[1]) //功能码
  99.                                          {
  100.                                                  case '0':  //功能码0 :关闭LED
  101.                                                                         LED_OFF(Uart.RX_BUFF[2]);//将对象码输入函数中
  102.                                                  break;               
  103.                                                  case '1':  //功能码1 :打开LED  
  104.                                                                         LED_ON(Uart.RX_BUFF[2]);//将对象码输入函数中
  105.                                                  break;                                         
  106.                                          }
  107.                                  break;
  108.                                  case '1': //其他类

  109.                                  break;
  110.                                  case '2': //其他类

  111.                                  break;                                  
  112.                          }                                 
  113.                          
  114.                          //清除数据必须在处理代码后面
  115.                          Uart.RX_COUNT=0;  //缓存计数清0
  116.                          UART_RX_BUFF_Clear();//清除接收缓存
  117.                 }
  118.         }
  119. }
复制代码

51hei图片20200416125512.jpg (309.61 KB, 下载次数: 105)

51hei图片20200416125512.jpg

新建 ZIP 压缩文件.zip

39.5 KB, 下载次数: 5

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

使用道具 举报

沙发
ID:311846 发表于 2020-4-14 17:49 | 只看该作者
串口之间怎么通信的?你这个是字符,看看通信直接以什么方式的,还有你的图片好难看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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