[原创] 【R7F0C809】EX04-串口+数码管显示+按键输入

slotg   2015-11-17 01:00 楼主
EX02 实现了按键输入显示在数码管上的功能,EX03 实现了串口的功能,接下来就是将 EX02 与 EX03 功能整合,将按键的输入数字由串口以字元方式送出,而串口输入的数字字元显示在数码管上。

以 EX03 程序为基础加进了在 EX02 几个需求调用的函数的相关档案,最重要的是修改程序中对于 PORT 端口的初始化设定。
  1. void R_PORT_Create(void)
  2. {
  3.     PMC0 &= 0x7f;       /* Digital I/O */
  4.     PMC1 &= 0x80;
  5.     POM0 |= 0xfc;       /* P02~P05 P-ch open-drain output,
  6.                            P06~P07 N-ch open-drain output.*/
  7.     POM1 |= 0x3f;       /* P10~P15 N-ch open-drain output */

  8.     PM0 &= 0x01;        /* Output mode */
  9.     PM1 &= 0xc0;
  10.     PM4 &= 0xfe;
  11.    
  12.     P0 |= 0xc2;         /* COM port:P02~P05 bit set 0,SEG port:P06~P07 bit and P10~P15 bit set 1*/
  13.     P1 |= 0x3f;
  14.     P4 &= 0xfe;
  15. }

原本在 EX03 主 while 回圈中程序是进入了 HALT 状态,当有串口中断发生时离开 HALT 状态并做后续的判断处理,由于我们要实现的功能还包括了数码管显示与按键扫瞄,因此不容许程序进入 HALT 而必须改变处理方式。我们宣告了一个变量 g_Uart0RxOK ,当接收到串口数据时设定为 1 ,主回圈再做相应的处理,而收到的串口数据会先判断是否是数字 1 到 8 ,是的话将该数字移入显示数字串内并显示。

主 while 回圈:

  1.     /* Main loop */
  2.     while (1U)
  3.     {
  4.      
  5.         // for SEGMENT display & KEYSW input   
  6.         if(TMIF00 == 1)
  7.         {
  8.             TMIF00 = 0;                     /* TAU00 interrupt flag clear*/
  9.         
  10.             LED_Display();                  /* Executive the LED_Display function*/

  11.             TS0 |= 0x02;                    /* TAU01 start*/
  12.             while(TMIF01 != 1);
  13.             TT0 |= 0x02;                    /* TAU01 stop*/
  14.             TMIF01 = 0;                     /* TAU01 interrupt flag clear*/

  15.             Key_Scan();                     /* Executive the Key_Scan function*/
  16.         }
  17.         
  18.         if(g_KeyNum != 0)
  19.         {
  20.             tmp = g_KeyNum+'0';
  21.             g_Uart0TxEnd = R_UART0_Send(&tmp, 1);
  22.             while (g_Uart0TxEnd == 0);

  23.             g_KeyNum = 0;            
  24.         }
  25.    
  26.         // for UART
  27.         if (g_Uart0RxOK)
  28.         {   
  29.             g_Uart0RxOK = 0;

  30.             if(g_Uart0RxBuf >= '1' && g_Uart0RxBuf <= '8')
  31.             {
  32.                 g_EntKey[3] = g_EntKey[2];
  33.                 g_EntKey[2] = g_EntKey[1];
  34.                 g_EntKey[1] = g_EntKey[0];
  35.                 g_EntKey[0] = g_Uart0RxBuf-'0';

  36.                 DS_EntKey();            /* Display Enter key number */              
  37.             }
  38.             
  39.             /* Set reception buffer pointer */
  40.             status = R_UART0_Receive(&g_Uart0RxBuf, 1);     
  41.         }

  42.     }



运行结果:

使用串口调试程序传送 5 1 6 8 字元给 R7F0C809,数码管上显示:

DSC01732.JPG

依序按下板上的 1 - 8 键,串口调试程序所接收到的数据:

P01.JPG


程序码:
EX04.rar (65.16 KB)
(下载次数: 23, 2015-11-17 00:59 上传)






回复评论 (2)

不错,图文并茂
点赞  2015-11-17 09:46
引用: 绿茶 发表于 2015-11-17 09:46
不错,图文并茂

感谢关注
点赞  2015-11-17 10:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复