[DemoCode下载]

ML51通过串口控制灯

[复制链接]
508|9
手机看帖
扫描二维码
随时随地手机跟帖
小明的同学|  楼主 | 2020-7-27 23:36 | 显示全部楼层 |阅读模式
根据论坛大神帖子修改的


#include "ML51.h"




void main (void)
{
        unsigned char my[10];
        unsigned char i=0;

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

/**
  UART0 loop test
  UART0 TXD send data received by RXD pin. Connect TXD pin and RXD pin check result.
*/  
        while(1)
        {
                unsigned char temp;
                temp = UART_Receive_Data(UART0);
                UART_Send_Data(UART0,temp);
               
                my[i++]=temp;
                if(i>=10)
                {
                        i=0;
                        ENABLE_UART0_PRINTF;
                        printf ("\nHello\n");
                        DISABLE_UART0_PRINTF;
                        if(my[0]=='O')
                                if(my[1]=='N')
                                        P03 ^=1;
                }
        }

}





使用特权

评论回复
小明的同学|  楼主 | 2020-7-27 23:36 | 显示全部楼层
例如发送ON12345678
只要是ON开头就会切换次P03的LED状态。

使用特权

评论回复
小明的同学|  楼主 | 2020-7-27 23:38 | 显示全部楼层
这个程序有个问题,就是如果你不是10个的字符的话,那就失效了,因为这样字符串的前两个字符就不是ON了,不知道ON跑哪个位置了。

使用特权

评论回复
小明的同学|  楼主 | 2020-7-27 23:43 | 显示全部楼层
然后我就增加了查找ON的位置


#include "ML51.h"




void main (void)
{
        unsigned char my[10];
        unsigned char i=0;

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

/**
  UART0 loop test
  UART0 TXD send data received by RXD pin. Connect TXD pin and RXD pin check result.
*/  
        while(1)
        {
                unsigned char temp;
                temp = UART_Receive_Data(UART0);
                UART_Send_Data(UART0,temp);
               
                my[i++]=temp;
                if(i>=10)
                {

                        ENABLE_UART0_PRINTF;
                        printf ("\nHello\n");
                        DISABLE_UART0_PRINTF;
                        for(i=0;i<10;i++)
                                {
                                        if(my[i]=='O')
                                                if(my[i+1]=='N')
                                                        P03 ^=1;                               
                                }
                        i=0;
                }
        }

}



使用特权

评论回复
小明的同学|  楼主 | 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 | 显示全部楼层
支持下楼主,确实是慢慢改进的,楼主的钻研精神值得我们学习。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

1340

帖子

2

粉丝