EX02 实现了按键输入显示在数码管上的功能,EX03 实现了串口的功能,接下来就是将 EX02 与 EX03 功能整合,将按键的输入数字由串口以字元方式送出,而串口输入的数字字元显示在数码管上。
以 EX03 程序为基础加进了在 EX02 几个需求调用的函数的相关档案,最重要的是修改程序中对于 PORT 端口的初始化设定。
- void R_PORT_Create(void)
- {
- PMC0 &= 0x7f; /* Digital I/O */
- PMC1 &= 0x80;
- POM0 |= 0xfc; /* P02~P05 P-ch open-drain output,
- P06~P07 N-ch open-drain output.*/
- POM1 |= 0x3f; /* P10~P15 N-ch open-drain output */
- PM0 &= 0x01; /* Output mode */
- PM1 &= 0xc0;
- PM4 &= 0xfe;
-
- P0 |= 0xc2; /* COM port:P02~P05 bit set 0,SEG port:P06~P07 bit and P10~P15 bit set 1*/
- P1 |= 0x3f;
- P4 &= 0xfe;
- }
原本在 EX03 主 while 回圈中程序是进入了 HALT 状态,当有串口中断发生时离开 HALT 状态并做后续的判断处理,由于我们要实现的功能还包括了数码管显示与按键扫瞄,因此不容许程序进入 HALT 而必须改变处理方式。我们宣告了一个变量 g_Uart0RxOK ,当接收到串口数据时设定为 1 ,主回圈再做相应的处理,而收到的串口数据会先判断是否是数字 1 到 8 ,是的话将该数字移入显示数字串内并显示。
主 while 回圈:
- /* Main loop */
- while (1U)
- {
-
- // for SEGMENT display & KEYSW input
- if(TMIF00 == 1)
- {
- TMIF00 = 0; /* TAU00 interrupt flag clear*/
-
- LED_Display(); /* Executive the LED_Display function*/
- TS0 |= 0x02; /* TAU01 start*/
- while(TMIF01 != 1);
- TT0 |= 0x02; /* TAU01 stop*/
- TMIF01 = 0; /* TAU01 interrupt flag clear*/
- Key_Scan(); /* Executive the Key_Scan function*/
- }
-
- if(g_KeyNum != 0)
- {
- tmp = g_KeyNum+'0';
- g_Uart0TxEnd = R_UART0_Send(&tmp, 1);
- while (g_Uart0TxEnd == 0);
- g_KeyNum = 0;
- }
-
- // for UART
- if (g_Uart0RxOK)
- {
- g_Uart0RxOK = 0;
- if(g_Uart0RxBuf >= '1' && g_Uart0RxBuf <= '8')
- {
- g_EntKey[3] = g_EntKey[2];
- g_EntKey[2] = g_EntKey[1];
- g_EntKey[1] = g_EntKey[0];
- g_EntKey[0] = g_Uart0RxBuf-'0';
- DS_EntKey(); /* Display Enter key number */
- }
-
- /* Set reception buffer pointer */
- status = R_UART0_Receive(&g_Uart0RxBuf, 1);
- }
- }
运行结果:
使用串口调试程序传送 5 1 6 8 字元给 R7F0C809,数码管上显示:
依序按下板上的 1 - 8 键,串口调试程序所接收到的数据:
程序码:
EX04.rar
(65.16 KB)
(下载次数: 23, 2015-11-17 00:59 上传)