本帖最后由 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
- g_pswd[3] = 5;
- g_pswd[2] = 1;
- g_pswd[1] = 6;
- g_pswd[0] = 8;
复制代码
程序运行之后数码管显示:
输入一位数后显示:
用 0 显示输入的位数,程序中宣告一个 keycnt 变量,当有按键输入时 keycnt 加 1,当 keycnt 等于 4 时做密码判断,密码正确时开启电闸 (P4.0 = 1) 并设定动作 1 秒钟,并由串口送出 Opn 字串,密码错误时由串口送出 Err 字串。
主回圈也设定了一个计时器,每一个按键输入的间隔时间不得大于 2 秒钟,否则程序会清除全部的输入资料并将 keycnt 清零。演示视频的开头就演示了输入 3 位数之后停止输入,在 2 秒钟之后程序自动清除全部输入。
主 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*/
-
- if(tmr1 != 0)
- {
- if(--tmr1 == 0)
- {
- P4.0 = 1; // GATE OFF
- }
- }
-
- if(tmr2 != 0)
- {
- if(--tmr2 == 0)
- {
- for(x=0;x<4;x++)
- {
- g_SegBuf[x] = 0x0a;
- }
- keycnt = 0;
- }
- }
- 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)
- {
- tmr2 = 480; // 2 sec.
- g_EntKey[3] = g_EntKey[2];
- g_EntKey[2] = g_EntKey[1];
- g_EntKey[1] = g_EntKey[0];
- g_EntKey[0] = g_KeyNum;
-
- g_SegBuf[3] = g_SegBuf[2];
- g_SegBuf[2] = g_SegBuf[1];
- g_SegBuf[1] = g_SegBuf[0];
- g_SegBuf[0] = 0;
- if(++keycnt == 4)
- {
- y = 1;
- for(x=0;x<4;x++)
- {
- if(g_EntKey[x] != g_pswd[x])
- {
- y = 0;
- }
- }
- if(y == 1)
- {
- P4.0 = 0; // GATE ON
- tmr1 = 240; // 1 sec.
- g_Uart0TxEnd = R_UART0_Send(msg2, 5);
- while(g_Uart0TxEnd == 0);
- }
- else
- {
- g_Uart0TxEnd = R_UART0_Send(msg1, 5);
- while(g_Uart0TxEnd == 0);
- }
-
- tmr2 = 240; // 1 sec.
- }
- g_KeyNum = 0;
- }
-
- }
复制代码
运行结果:
程序码:
EX05.rar
(66.48 KB, 下载次数: 6)
演示视频:
http://v.youku.com/v_show/id_XMTM5MDQ1MTMwOA==.html