2695|0

662

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【R7F0C809】EX05-密码锁基本功能 [复制链接]

本帖最后由 slotg 于 2015-11-20 00:31 编辑

我们先来实现一个密码锁的基本功能,先设定一个固定的密码,当按键输入 5168 之后会启动电闸动作1秒(开门)。 R7F0C809 的管脚扣除了数码管与按键扫描以及串口管脚后可用的就只剩下了 P125 与 P40 这 2 支脚了,而我将电闸的控制信号规划在 P40 管脚。



我在 P40 管脚接上一颗 LED,当 P40 输出 0 时 LED 会亮起,表示电闸打开。



调试的时候碰到问题了,当我将 P40 输出 0 时 LED 并不会发亮,也就是 P40 并不受程序的控制,这个问题我花了很长时间一直没办法解决,后来在 QQ 群上提问,感谢 Freedom 的指导表示 P40 不接仿真器的时候是可以的!我试了一下在程序下载后拔除 EZ-CUBE 只接电源接脚之后程序就可以的正常动作了。为了不想那么麻烦的拔插 EZ-CUBE,我在 RESET 这条连接线上装上了一个开关,当程序下载时将开关 ON 上,下载之后再将开关 OFF 让板子运行。



程序先设定密码为 5168
  1.     g_pswd[3] = 5;
  2.     g_pswd[2] = 1;
  3.     g_pswd[1] = 6;
  4.     g_pswd[0] = 8;
复制代码

程序运行之后数码管显示:



输入一位数后显示:



用 0 显示输入的位数,程序中宣告一个 keycnt 变量,当有按键输入时 keycnt 加 1,当 keycnt 等于 4 时做密码判断,密码正确时开启电闸 (P4.0 = 1) 并设定动作 1 秒钟,并由串口送出 Opn 字串,密码错误时由串口送出 Err 字串。

主回圈也设定了一个计时器,每一个按键输入的间隔时间不得大于 2 秒钟,否则程序会清除全部的输入资料并将 keycnt 清零。演示视频的开头就演示了输入 3 位数之后停止输入,在 2 秒钟之后程序自动清除全部输入。

主 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.             
  12.             if(tmr1 != 0)
  13.             {
  14.                 if(--tmr1 == 0)
  15.                 {
  16.                     P4.0 = 1;           // GATE OFF   
  17.                 }
  18.             }
  19.             
  20.             if(tmr2 != 0)
  21.             {
  22.                 if(--tmr2 == 0)
  23.                 {
  24.                     for(x=0;x<4;x++)
  25.                     {
  26.                         g_SegBuf[x] = 0x0a;
  27.                     }
  28.                     keycnt = 0;                 
  29.                 }
  30.             }

  31.             TS0 |= 0x02;                    /* TAU01 start*/
  32.             while(TMIF01 != 1);
  33.             TT0 |= 0x02;                    /* TAU01 stop*/
  34.             TMIF01 = 0;                     /* TAU01 interrupt flag clear*/
  35.             
  36.             Key_Scan();                     /* Executive the Key_Scan function*/
  37.         }
  38.         
  39.         if(g_KeyNum != 0)
  40.         {
  41.             tmr2 = 480;                 // 2 sec.

  42.             g_EntKey[3] = g_EntKey[2];
  43.             g_EntKey[2] = g_EntKey[1];
  44.             g_EntKey[1] = g_EntKey[0];
  45.             g_EntKey[0] = g_KeyNum;
  46.            
  47.             g_SegBuf[3] = g_SegBuf[2];
  48.             g_SegBuf[2] = g_SegBuf[1];
  49.             g_SegBuf[1] = g_SegBuf[0];
  50.             g_SegBuf[0] = 0;

  51.             if(++keycnt == 4)
  52.             {
  53.                 y = 1;
  54.                 for(x=0;x<4;x++)
  55.                 {
  56.                     if(g_EntKey[x] != g_pswd[x])
  57.                     {
  58.                         y = 0;
  59.                     }
  60.                 }

  61.                 if(y == 1)
  62.                 {
  63.                     P4.0 = 0;           // GATE ON
  64.                     tmr1 = 240;         // 1 sec.
  65.                     g_Uart0TxEnd = R_UART0_Send(msg2, 5);
  66.                     while(g_Uart0TxEnd == 0);
  67.                 }
  68.                 else
  69.                 {
  70.                     g_Uart0TxEnd = R_UART0_Send(msg1, 5);
  71.                     while(g_Uart0TxEnd == 0);
  72.                 }               
  73.             
  74.                 tmr2 = 240;             // 1 sec.
  75.             }

  76.             g_KeyNum = 0;            
  77.         }
  78.    
  79.     }
复制代码

运行结果:



程序码:
EX05.rar (66.48 KB, 下载次数: 6)

演示视频:
http://v.youku.com/v_show/id_XMTM5MDQ1MTMwOA==.html



点赞 关注

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表