3240|2

662

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【R7F0C809】EX04-串口+数码管显示+按键输入 [复制链接]

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,数码管上显示:



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




程序码:
EX04.rar (65.16 KB, 下载次数: 23)





最新回复

不错,图文并茂   详情 回复 发表于 2015-11-17 09:46
点赞 关注

回复
举报

565

帖子

513

TA的资源

裸片初长成(中级)

沙发
 
不错,图文并茂

点评

感谢关注  详情 回复 发表于 2015-11-17 10:09
 
 

回复

662

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
绿茶 发表于 2015-11-17 09:46
不错,图文并茂

感谢关注
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表