標(biāo)題: 用單片機(jī)按鍵去控制流水燈的開關(guān),求大神指點(diǎn)程序設(shè)計(jì)思路 [打印本頁]
作者: 我愛單片機(jī)@ 時(shí)間: 2019-2-21 10:42
標(biāo)題: 用單片機(jī)按鍵去控制流水燈的開關(guān),求大神指點(diǎn)程序設(shè)計(jì)思路
用按鍵去控制流水燈的開關(guān)。主要有以下功能: 一個(gè)按鍵表示左移,另一個(gè)按鍵表示右移,當(dāng)按下相應(yīng)的按鍵時(shí),流水燈會(huì)往指定方向流動(dòng)。
作者: bucker 時(shí)間: 2019-2-21 21:12
分別各做一個(gè)左移和右移的函數(shù)或子程序,設(shè)計(jì)一個(gè)狀態(tài)機(jī),按下相應(yīng)的鍵就改變并保持狀態(tài),再根據(jù)狀態(tài)調(diào)用各自的函數(shù)。
作者: wulin 時(shí)間: 2019-2-21 21:28
給你寫一個(gè)簡單的按鍵控制流水燈方向的程序參考
#include <reg52.h>
#include <intrins.h>//此頭文件包含循環(huán)左/右移函數(shù)
sbit s1=P3^3;
sbit s2=P3^4;
void delay(unsigned int k)
{
unsigned int i,j;
for(i=k;i>0;i--)
for(j=115;j>0;j--);
}
void main()
{
unsigned char num=0;
//P1驅(qū)動(dòng)8個(gè)LED
P1=0xfe;
while(1)
{
if(s1==0)
num=1;
if(s2==0)
num=2;
if(num==1)
P1=_crol_(P1,1);//循環(huán)左移一位
if(num==2)
P1=_cror_(P1,1);//循環(huán)右移一位
delay(500);//延時(shí)0.5秒
}
}
作者: iofree 時(shí)間: 2019-2-22 09:01
本帖最后由 iofree 于 2019-2-22 10:08 編輯
你這按鍵沒有消抖處理吧?
作者: wulin 時(shí)間: 2019-2-22 11:38
多數(shù)情況下按鍵是需要消抖,但不是全部,根據(jù)應(yīng)用環(huán)境選擇按鍵是否需要消抖和判斷松手。在這個(gè)程序中消抖和判斷松手就是多余的贅句。
作者: yzwzfyz 時(shí)間: 2019-2-22 12:47
所謂向左向右取決于你的顯示排列方案,給人的感覺上是向左或向右。
預(yù)先做一套向左的顯示方案,再做一套向左的方案。
跟根據(jù)按鍵決定采用哪個(gè)方案就可以了。
作者: iofree 時(shí)間: 2019-2-22 14:20
你說得也有道理,這個(gè)場景確實(shí)不需要消抖,不過大多數(shù)按鍵應(yīng)用都還是需要消抖,給新人建議時(shí)順便幫他們建立起這個(gè)概念還是有必要的,以后也許能少走不少彎路
作者: wulin 時(shí)間: 2019-2-22 16:33
你說得有道理,給新人建議時(shí)更應(yīng)該規(guī)范些。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |