|
|
发表于 2015-2-23 06:19:42
|
显示全部楼层
本帖最后由 vblearn 于 2015-2-23 06:32 编辑
你现在的写法,是按键等5个10MS之后就亮灯。判断按钮时,需要以按钮放开的时间为准。
还是请看看套件提供的例子,如何处理按键。
附上一个上次参照例程做的程序,希望有帮助。那个是按键后数码管依次从0显示到9。
- byte p_switch=4; //4 port is switch
- byte p_ledbegin=5; //5,6,7,8,9,10,11 ports are link to LED
- byte a[10][7]={
- { 1,1,1,1,1,1,0 } ,
- { 0,1,1,0,0,0,0 } ,
- { 1,1,0,1,1,0,1 } ,
- { 1,1,1,1,0,0,1 } ,
- { 0,1,1,0,0,1,1 } ,
- { 1,0,1,1,0,1,1 } ,
- { 1,0,1,1,1,1,1 } ,
- { 1,1,1,0,0,0,0 } ,
- { 1,1,1,1,1,1,1 } ,
- { 1,1,1,1,0,1,1 }
- };
- byte m_buttonstate=LOW; //保存当前按钮的状态
- //long m_lasttime=0;
- int delaytime = 10; //10ms 用于去抖
- int m_p = 0;
- void setup() {
- // initialize the digital pin as an output.
- pinMode(p_switch, INPUT); //
- for (int i=0;i<7;i++)
- {
- pinMode(p_ledbegin+i,OUTPUT); //OUTPUT
- }
- }
- void loop() {
- int i,j;
- int p=0;
- int bAdd = 0;
- //check button
- byte reading = digitalRead(p_switch);
- if (reading != m_buttonstate) { //如果按键状态发生了变化
- delay(delaytime);
- if (reading != m_buttonstate) { //如果在一定时间后仍发生变化(已去抖动)
- m_buttonstate=reading; //记录新状态
- if (reading==LOW) //如果当前是LOW,即放开键,则确认为一次按键
- {
- bAdd=1;
- }
- }
- }
- if (bAdd==1) //数码管显示增加1
- {
- m_p++;
- if (m_p>=10) m_p=0;
- }
- //控制数码管输出
- for (j=0;j<7;j++)
- {
- if (a[m_p][j]==1)
- {
- digitalWrite(p_ledbegin+j, LOW);
- }
- else
- {
- digitalWrite(p_ledbegin+j, HIGH);
- }
- }
- delay(2);
- }
复制代码
|
|