![]() |
HC6800-ES-V2.0 發表于 2018-3-2 07:25 感謝你的回答 |
檢測到按鍵松開后再+1 |
wulin 發表于 2018-3-2 20:25 嗯,知道了。還是要感謝你 |
知了2018 發表于 2018-3-2 16:56 不知道為什么程序帖上來會丟符號? ![]() |
wulin 發表于 2018-3-2 13:25 謝謝你的幫助 |
本帖最后由 wulin 于 2018-3-2 13:33 編輯 仿真軟件里的元件都是按理想狀態使用的,有沒有防抖語句無所謂,你按一次出現多次計數是你的程序缺陷。單片機的電源、地、復位及外部晶振都是默認存在,不需要畫出來,你的圖畫錯了,地線標志要放在兩個振蕩電容之間。想要改變晶振頻率只要在單片機屬性里修改即可,不信你試試這個程序。把注釋掉的防抖語句添加回去效果還是一樣的,但在實際電路中必須要防抖。#include <AT89X52.H> #define uint unsigned int //宏定義變量uint為無符號整型數據 #define uchar unsigned char //宏定義變量uchar為無符號字符型數據 sbit key=P3^0; //按鍵端口定義 uchar code table[]={ //共陽數碼管段碼0~F 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; uchar i; //按鍵計數變量 bit key_sign=0; //按鍵有效標志 //uchar count=0; //消抖計數變量 void main() { while(1) { if(key==0) //檢測按鍵如果為0 { // count++; //消抖計數 // if(count>=250) // { if(key_sign==0) { key_sign=1; //按鍵有效標志置1,防止重復計數 i++; if(i>=16) i=0; } // } } else //按鍵抬起 { key_sign=0; //按鍵有效標志清0 // count=0; //消抖計數清0 } P2=table; } } ![]() |
給個例子你看看 if(K1==0) //檢測按鍵K1是否按下 { Delay10ms(); //消除抖動 if(K1==0) { j=_cror_(j,1); while((i<50)&&(K1==0)) //檢測按鍵是否松開 { Delay10ms(); i++; } i=0; } } |