[活动专区] 赛元易码魔盒体验——2,串口命令去点灯

[复制链接]
835|3
 楼主| dami 发表于 2020-7-18 22:29 | 显示全部楼层 |阅读模式
本帖最后由 dami 于 2020-7-18 22:42 编辑

赛元易码魔盒体验——2,串口命令去点灯
1,使用串口0 UART0 和P00
2,使用赛元易码魔盒生成代码。 4.PNG
3,使用KEIL 编译。
4,main.c主函数前添加代码
  1. void rx_to_buf(unsigned char x);
  2. #define RXMAX 50
  3. char rx0[RXMAX];
  4. char rx_point=0;
  5. void delayms(int x)
  6. {
  7.         int i,j;
  8.         for(i=0;i<5000;i++)
  9.                 for(j=0;j<x;j++){};
  10. }       

  11. void LED1_ON(void){
  12.         GPIO_WriteLow(GPIO0, GPIO_PIN_0);
  13. }
  14. void led1_off(void)
  15. {
  16.         GPIO_WriteHigh(GPIO0, GPIO_PIN_0);
  17. }
  18. void SC_GPIO_Init(void)
  19. {
  20.        
  21.         GPIO_Init(GPIO0, GPIO_PIN_0,GPIO_MODE_OUT_PP);
  22.         /*GPIO_Init write here*/               
  23. }
  24. void rx_to_buf(unsigned char x)
  25. {
  26.         if(rx_point>=RXMAX)
  27.                 return;
  28.         rx0[rx_point]=x;
  29.         rx_point++;
  30.         if(rx_point>=RXMAX)
  31.                 rx_point =0;
  32. }
  33. void rx_command(void)
  34. {
  35.                  if((rx0[0] =='l')&&(rx0[1] =='e')&&(rx0[2] =='d')&&(rx0[3] =='o')&&(rx0[4] =='n'))
  36.                  {
  37.                                 LED1_ON();
  38.                                 printf("LED1 ON!         \n");
  39.                          rx_point =0;
  40.                          rx0[0] =rx0[1] =rx0[2] =rx0[3] =rx0[4] =rx0[5];
  41.                  }
  42.                  if((rx0[0] =='l')&&(rx0[1] =='e')&&(rx0[2] =='d')&&(rx0[3] =='o')&&(rx0[4] =='f')&&(rx0[5] =='f'))
  43.                  {
  44.                                 led1_off();
  45.                                 printf("LED1 OFF!        \n");
  46.                           rx_point =0;
  47.                          rx_point =0;
  48.                          rx0[0] =rx0[1] =rx0[2] =rx0[3] =rx0[4] =rx0[5];
  49.                  }
  50.                  if(rx_point >=6)
  51.                                 rx_point =0;
  52. }


4,中断 函数中加入代码:
  1. extern void rx_to_buf(unsigned char x);
  1. void UART0Interrupt()                interrupt 4
  2. {
  3.    if(UART0_GetFlagStatus(UART0_FLAG_TI))
  4.   {
  5.      UART0_ClearFlag(UART0_FLAG_TI);                        //Çå³ýTI
  6.      Uart0SendFlag = 1;
  7.   }
  8.   else if(UART0_GetFlagStatus(UART0_FLAG_RI))
  9.   {
  10.      unsigned char x;
  11.      UART0_ClearFlag(UART0_FLAG_RI);                        //Çå³ýRI
  12.      Uart0ReceiveFlag=1;
  13.      x=UART0_ReceiveData8();
  14.      rx_to_buf(x);
  15.   }
  16. }


5,主程序main中调用
  1. void main(void)
  2. {           
  3.         Uart0Init();
  4.         SC_GPIO_Init();
  5.         enableInterrupts();
  6.         printf("Uart0 contrl led\n please send ledon ledoff command to  control led flash");
  7.         while(1)
  8.         {
  9.                 rx_command();
  10.                 delayms(100);
  11.         }
  12. }
6,编译运行
7,运行结果:
1.PNG 2.jpg
3.jpg



CS801380 发表于 2020-7-19 22:03 | 显示全部楼层
好!!!!!!!!!!!!
 楼主| dami 发表于 2020-7-20 08:46 | 显示全部楼层
贴代码那里老是掉代码。希望网站改进一下。
 楼主| dami 发表于 2020-7-20 08:53 | 显示全部楼层
赛元易码魔盒问题:
1,工程里面加东西偶然出现全屏红叉。
2,经常性没法连接流程图里面的东西。
3,有时没法生成代码。
4,设备型号会变。和设置的不一样。
5,好在如果只是配置一下设备和IO口就生产代码。那是没什么问题。
6,能开始这么做,说明赛元是很用心了。
7,加油改进吧。

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

本版积分规则

66

主题

1080

帖子

6

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