[DemoCode下载] ML51通过串口控制灯

[复制链接]
950|9
 楼主| 小明的同学 发表于 2020-7-27 23:36 | 显示全部楼层 |阅读模式
根据论坛大神帖子修改的


  1. #include "ML51.h"




  2. void main (void)
  3. {
  4.         unsigned char my[10];
  5.         unsigned char i=0;

  6.         MFP_P03_GPIO;
  7.         P03_PUSHPULL_MODE;
  8. /**
  9. For UART0 P0.5 asTXD output setting
  10. * include uart.c in Common Setting for UART0
  11. */
  12.         MFP_P31_UART0_TXD;                              /* set P3.1 and P3.0 as Quasi mode for UART0 trasnfer */
  13.         MFP_P30_UART0_RXD;
  14.         P31_QUASI_MODE;                                 
  15.         P30_QUASI_MODE;
  16.         UART_Open(24000000,UART0_Timer1,115200);      // Open UART0 use timer1 as baudrate generate and baud rate = 115200
  17.         ENABLE_UART0_PRINTF;

  18. /**
  19.   UART0 loop test
  20.   UART0 TXD send data received by RXD pin. Connect TXD pin and RXD pin check result.
  21. */  
  22.         while(1)
  23.         {
  24.                 unsigned char temp;
  25.                 temp = UART_Receive_Data(UART0);
  26.                 UART_Send_Data(UART0,temp);
  27.                
  28.                 my[i++]=temp;
  29.                 if(i>=10)
  30.                 {
  31.                         i=0;
  32.                         ENABLE_UART0_PRINTF;
  33.                         printf ("\nHello\n");
  34.                         DISABLE_UART0_PRINTF;
  35.                         if(my[0]=='O')
  36.                                 if(my[1]=='N')
  37.                                         P03 ^=1;
  38.                 }
  39.         }

  40. }





 楼主| 小明的同学 发表于 2020-7-27 23:36 | 显示全部楼层
例如发送ON12345678
只要是ON开头就会切换次P03的LED状态。
 楼主| 小明的同学 发表于 2020-7-27 23:38 | 显示全部楼层
这个程序有个问题,就是如果你不是10个的字符的话,那就失效了,因为这样字符串的前两个字符就不是ON了,不知道ON跑哪个位置了。
 楼主| 小明的同学 发表于 2020-7-27 23:43 | 显示全部楼层
然后我就增加了查找ON的位置


  1. #include "ML51.h"




  2. void main (void)
  3. {
  4.         unsigned char my[10];
  5.         unsigned char i=0;

  6.         MFP_P03_GPIO;
  7.         P03_PUSHPULL_MODE;
  8. /**
  9. For UART0 P0.5 asTXD output setting
  10. * include uart.c in Common Setting for UART0
  11. */
  12.         MFP_P31_UART0_TXD;                              /* set P3.1 and P3.0 as Quasi mode for UART0 trasnfer */
  13.         MFP_P30_UART0_RXD;
  14.         P31_QUASI_MODE;                                 
  15.         P30_QUASI_MODE;
  16.         UART_Open(24000000,UART0_Timer1,115200);      // Open UART0 use timer1 as baudrate generate and baud rate = 115200
  17.         ENABLE_UART0_PRINTF;

  18. /**
  19.   UART0 loop test
  20.   UART0 TXD send data received by RXD pin. Connect TXD pin and RXD pin check result.
  21. */  
  22.         while(1)
  23.         {
  24.                 unsigned char temp;
  25.                 temp = UART_Receive_Data(UART0);
  26.                 UART_Send_Data(UART0,temp);
  27.                
  28.                 my[i++]=temp;
  29.                 if(i>=10)
  30.                 {

  31.                         ENABLE_UART0_PRINTF;
  32.                         printf ("\nHello\n");
  33.                         DISABLE_UART0_PRINTF;
  34.                         for(i=0;i<10;i++)
  35.                                 {
  36.                                         if(my[i]=='O')
  37.                                                 if(my[i+1]=='N')
  38.                                                         P03 ^=1;                               
  39.                                 }
  40.                         i=0;
  41.                 }
  42.         }

  43. }



 楼主| 小明的同学 发表于 2020-7-27 23:43 | 显示全部楼层
这下解决了,不过仔细推测,发现如果O在9的位置时候,这个时候其实应该判断N在不在0的位置,而不是10
 楼主| 小明的同学 发表于 2020-7-27 23:53 | 显示全部楼层
发现还是有一点点问题,后面慢慢研究
幸福小强 发表于 2020-7-28 11:43 | 显示全部楼层
可以可以,如果加个无线模块就可以无线控制了。
piteqiu 发表于 2020-7-28 12:05 | 显示全部楼层
连着两个if语句,不加大括号,不好理解吧,比较晦涩,建议都加上大括号。
monitoring 发表于 2020-7-28 20:21 | 显示全部楼层
很不错 逐渐完善逻辑
电子xiaocainiao 发表于 2020-7-28 21:16 | 显示全部楼层
支持下楼主,确实是慢慢改进的,楼主的钻研精神值得我们学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

159

主题

1640

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部