當前位置:編程學習大全網 - 源碼下載 - 51單片機中如何按下按鍵時數碼管正常顯示而不閃爍,並且實現長按連續

51單片機中如何按下按鍵時數碼管正常顯示而不閃爍,並且實現長按連續

妳好,我也遇到這樣的問題,經過壹周的研究,問之前的前輩得出結果,希望對妳有幫助

char scan_k(char k)

{

int i=0;//定義壹個變量用來累計長按的時間

if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)//如果有按鍵按下

{

while(!KEY1)//如果按鍵1按下

{

xianshi(neirong);//執行顯示

delay_ms(1);//延時

i++;//每次i自加1

if(i>=1000)

{

k=11;//按鍵1長按

}

else

{

k=1;//按鍵1短按

}

}

i=0;

while(!KEY2)//如果按鍵2按下

{

xianshi(neirong);//執行顯示

delay_ms(1);//延時

i++;//每次i自加1

if(i>=1000)

{

k=21;//按鍵2長按

}

else

{

k=2;//按鍵2短按

}

}

i=0;//在下壹個按鍵按下之前清空i的值

while(!KEY3)//如果按鍵3按下

{

xianshi(neirong);//執行顯示

delay_ms(1);//延時

i++;//每次i自加1

if(i>=1000)

{

k=31;//按鍵3長按

}

else

{

k=3;//按鍵3短按

}

}

i=0;

while(!KEY4)//如果按鍵4按下

{

xianshi(neirong);//執行顯示

delay_ms(1);//延時

i++;//每次i自加1

if(i>=1000)

{

k=41;//按鍵4長按

}

else

{

k=4;//按鍵4短按

}

}

i=0;

while(!KEY5)//如果按鍵5按下

{

xianshi(neirong);//執行顯示

delay_ms(1);//延時

i++;//每次i自加1

if(i>=1000)

{

k=51;//按鍵5長按

}

else

{

k=5;//按鍵5短按

}

}

i=0;

while(!KEY6)//如果按鍵6按下

{

xianshi(neirong);//執行顯示

delay_ms(1);//延時

i++;//每次i自加1

if(i>=1000)

{

k=61;//按鍵6長按

}

else

{

k=6;//按鍵6短按

}

}

i=0;

}

return k;//返回按鍵的值

}

以上代碼,不帶操作系統,不包含中斷,請根據實際情況調整妳想要的長按時間,按鍵按下的時候,如果妳的消抖時間太長,數碼管會有明顯的閃爍或者變暗,請根據自己的需求進行調整

  • 上一篇:C語言:用C來定義表示幾何對象圓Circle。達人幫忙填下!!!
  • 下一篇:小遊戲十滴水的java源代碼,急
  • copyright 2024編程學習大全網