以前用延時消抖,比較浪費時間,現在用狀態機設計,不占用太多時間,但是需要一個定時器。
1.狀態機按鍵消抖
*****************************************************************
//狀態機按鍵消抖
//CPU:mega32
//編譯器:winavr
char key_scan(void); #define PRESS ( PIND&(1<<3) ) == 0 int main(void) TIMSK |= 1< SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中斷服務程序 char key_scan(void) case 1: if ( PRESS ) case 2: if ( PRESS ) 2.狀態機按鍵檢測連擊 #include char key_scan(void); #define PRESS ( PIND&(1<<3) ) == 0 int main(void) TIMSK |= 1< SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中斷服務程序 char key_scan(void) case 1: if ( PRESS ) case 2: if ( PRESS ) ******************************************************************
#include
#include
#define NOT_PRESS ( PIND&(1<<3) ) != 0
{
DDRC |= (1 << 7);//PC7置為輸出
PORTD |= 1<<3;//按鍵上拉
TCCR0 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,1024分頻
sei();//使能全局中斷
while(1);
}
{
if ( key_scan() == 1 )
PORTC ^= 1<<7;//PC7取反
}
{
static char state=0;
switch(state)
{
case 0: if ( PRESS )
{
state = 1;
return 0;
}
else
{
state = 0;
return 0;
}
{
state = 2;
return 1;
}
else
{
state = 0;
return 0;
}
{
state = 2;
return 0;
}
else
{
state = 0;
return 0;
}
}
return 0;
}
******************************************************************
*****************************************************************
//狀態機按鍵消抖
//CPU:mega32
//編譯器:winavr
#include
#define NOT_PRESS ( PIND&(1<<3) ) != 0
{
DDRC |= (1 << 7) | (1 << 6);//PC7 PC6 置為輸出
PORTD |= 1<<3;//PD3按鍵內部上拉
TCCR0 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,1024分頻
sei();//使能全局中斷
while(1);
}
{
char key;
key = key_scan();
if ( key == 1 )
PORTC ^= 1<<7;//PC7取反
if ( key == 2 ) //連擊
PORTC ^= 1<<6;//PC6取反
}
{
static char state=0;
char times;
switch(state)
{
case 0: if ( PRESS )
{
state = 1;
return 0;
}
else
{
state = 0;
return 0;
}
{
times = 0;
state = 2;
return 1;
}
else
{
state = 0;
return 0;
}
{
state = 2;
times++;
if (times > 50)//500ms
{
times = 0;
return 2;
}
else
return 0;
}
else
{
state = 0;
return 0;
}
}
return 0;
}
上一篇:ATmega32單片機定時器程序
下一篇:avr單片機USART程序詳解
推薦閱讀
史海拾趣
為了更好地服務全球客戶,Echelon實施了全球化戰略。公司不僅在美國加州設立了總部,還在歐洲和亞洲的多個國家和地區設立了辦事處,包括中國、法國、德國、意大利、香港、日本、韓國、荷蘭及英國等。這些辦事處的建立,使得Echelon能夠更好地了解當地市場需求和客戶需求,并提供更加及時和專業的服務。
盡管碩頡科技在知識產權方面做出了積極努力,但仍難免面臨專利訴訟的挑戰。在某次與凹凸科技的專利侵權訴訟中,公司雖然一度面臨敗訴和永久禁制令的風險,但碩頡科技迅速應訴,積極應對。最終,美國聯邦巡回上訴法院廢除了原判決,公司得以自由銷售被訴產品,不受任何限制。這次訴訟的勝利,不僅展示了碩頡科技在應對法律挑戰方面的決心和能力,也為公司的長遠發展奠定了堅實基礎。
碩頡科技股份有限公司成立于1999年11月,總部設在臺北市。自成立以來,公司一直專注于積體電路的設計、研發與銷售,致力于為客戶提供高質量的電子產品解決方案。在創立初期,碩頡便以其創新的技術和嚴謹的研發態度,迅速在電子行業嶄露頭角。公司資本額為新臺幣三億三仟萬元,為公司的穩健發展提供了堅實的資金基礎。
碩頡科技股份有限公司成立于1999年11月,總部設在臺北市。自成立以來,公司一直專注于積體電路的設計、研發與銷售,致力于為客戶提供高質量的電子產品解決方案。在創立初期,碩頡便以其創新的技術和嚴謹的研發態度,迅速在電子行業嶄露頭角。公司資本額為新臺幣三億三仟萬元,為公司的穩健發展提供了堅實的資金基礎。
盡管碩頡科技在知識產權方面做出了積極努力,但仍難免面臨專利訴訟的挑戰。在某次與凹凸科技的專利侵權訴訟中,公司雖然一度面臨敗訴和永久禁制令的風險,但碩頡科技迅速應訴,積極應對。最終,美國聯邦巡回上訴法院廢除了原判決,公司得以自由銷售被訴產品,不受任何限制。這次訴訟的勝利,不僅展示了碩頡科技在應對法律挑戰方面的決心和能力,也為公司的長遠發展奠定了堅實基礎。
作為一家技術驅動型企業,Excelitas公司深知持續創新的重要性。因此,公司不斷加大研發投入,積極引進和培養高端人才。通過持續的創新和研發,Excelitas不斷推出具有領先技術的產品,滿足了市場的多樣化需求。同時,公司還注重知識產權的保護,積極申請專利,維護了自身的技術優勢和市場競爭力。
據報道,美國波音公司子公司Spectrolab有限公司科學家在最近發表的太陽能電池制造研究論文中稱,他們研制出的太陽能電池超越了具有里程碑意義的40%效率限制(40%效率是所有光電設備所能獲得的最高效率)。其研究成果刊登在最近一期的《應用物理學通 ...… 查看全部問答∨ |
|
現如今國內的3家運營商的3種3G 網絡 的部署都已經基本完成,而且都開始了大規模的試商用和測試 ,而且現在用戶數量并不多,整個系統的負載壓力都非常的小,測試得出的結果應該是相對比較公平的.之前關于技術的爭論實在是太多了,我們不妨停止口水戰,到網 ...… 查看全部問答∨ |
|
從申請開發板到現在,已陸陸續續完成了七八篇文章。將其列在一起方便大家查閱。 申請LM3S8962開發板 主要談申請開發板要實現的項目。 http://bbs.eeworld.com.cn/thread-190959-1-1.html 網絡開發筆記 ...… 查看全部問答∨ |
|
LED越來越多地開始被用于大功率區域照明,如高頂燈、停車庫照明、洗墻燈、街燈、隧道照明等。隨著LED照明技術的不斷演進,應用于大功率LED區域照明應用的驅動方案需要不斷更新、改進,使LED控制達到新高度,實現智能控制,增強節能和延長LED工作壽 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 利用STM32MP1和STM32MP2在嵌入式 Linux 平臺上部署有效的安全保護機制
- 超小但強大:MCU 的小尺寸封裝和集成如何幫助優化空間受限的設計
- 德州儀器推出全球超小型 MCU,助力微型應用創新
- Microchip推出電動兩輪車(E2W)生態系統,加速電動出行創新
- 意法半導體推出STM32U3微控制器,面向遠程、智能和可持續應用,拓展超低功耗系列創新
- (一) ECloudIDE入門STM32-CubeMX工程創建與導入
- (二)ECloudIDE入門STM32-官方寄存器版例程使用
- Simulink STM32F407VGT6實現硬件在環
- openharmony:hilog_lite組件移植