久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: avr單片機mega32基于狀態機的按鍵設計 [打印本頁]

作者: aabbcc    時間: 2014-11-11 22:51
標題: avr單片機mega32基于狀態機的按鍵設計
以前用延時消抖,比較浪費時間,現在用狀態機設計,不占用太多時間,但是需要一個定時器。

1.狀態機按鍵消抖





*****************************************************************
//狀態機按鍵消抖
//CPU:mega32
//編譯器:winavr

#include <avr/io.h>
#include <avr/interrupt.h>
char key_scan(void);
#define PRESS   ( PIND&(1<<3) ) == 0
#define NOT_PRESS  ( PIND&(1<<3) ) != 0
int main(void)
{
DDRC |= (1 << 7);//PC7置為輸出
PORTD |= 1<<3;//按鍵上拉
TIMSK |= 1<<OCIE0;//不屏蔽T0匹配中斷
OCR0 = 0X10;//匹配值 大約10ms
TCCR0 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,1024分頻
sei();//使能全局中斷

while(1);
}
SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中斷服務程序
{
if ( key_scan() == 1 )
  PORTC ^= 1<<7;//PC7取反
}
char key_scan(void)
{
static char state=0;
switch(state)
{
case 0: if ( PRESS )
   {
    state = 1;
    return 0;
   }
   else
   {
    state = 0;
    return 0;
   }
case 1: if ( PRESS )
   {
    state = 2;
    return 1;
   }
   else
   {
    state = 0;
    return 0;
   }
case 2: if ( PRESS )
   {
    state = 2;
    return 0;
   }
   else
   {
    state = 0;
    return 0;
   }
}
return 0;
}

******************************************************************

2.狀態機按鍵檢測連擊





*****************************************************************
//狀態機按鍵消抖
//CPU:mega32
//編譯器:winavr

#include <avr/io.h>
#include <avr/interrupt.h>
char key_scan(void);
#define PRESS   ( PIND&(1<<3) ) == 0
#define NOT_PRESS  ( PIND&(1<<3) ) != 0
int main(void)
{
DDRC |= (1 << 7) | (1 << 6);//PC7 PC6 置為輸出
PORTD |= 1<<3;//PD3按鍵內部上拉
TIMSK |= 1<<OCIE0;//不屏蔽T0匹配中斷
OCR0 = 0X10;//匹配值 大約10ms
TCCR0 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,1024分頻
sei();//使能全局中斷

while(1);
}
SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中斷服務程序
{
char key;
key = key_scan();
if ( key == 1 )
  PORTC ^= 1<<7;//PC7取反
if ( key == 2 ) //連擊
  PORTC ^= 1<<6;//PC6取反
}
char key_scan(void)
{
static char state=0;
char times;
switch(state)
{
case 0: if ( PRESS )
   {
    state = 1;
    return 0;
   }
   else
   {
    state = 0;
    return 0;
   }
case 1: if ( PRESS )
   {
    times = 0;
    state = 2;
    return 1;
   }
   else
   {
    state = 0;
    return 0;
   }
case 2: if ( PRESS )
   {
    state = 2;
    times++;
    if (times > 50)//500ms
    {
     times = 0;
     return 2;
    }
    else
     return 0;
   }
   else
   {
    state = 0;
    return 0;
   }
}
return 0;
}


******************************************************************






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91电影在线播放 | 国产免费又黄又爽又刺激蜜月al | 国产永久免费 | 永久免费在线观看 | 日韩欧美大片 | 九九热精品在线视频 | 成人国产一区二区三区精品麻豆 | 人人擦人人干 | 久久九精品 | 久久久久亚洲精品 | 欧美亚洲综合久久 | 极品的亚洲 | 成人av在线播放 | 午夜av成人| 欧美精品一二三 | 国产精品成人一区二区三区夜夜夜 | 色频 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 羞羞视频免费在线观看 | 国产精品精品久久久久久 | 一区不卡在线观看 | 亚洲成人一级 | 久久99精品久久久久蜜桃tv | 午夜视频在线免费观看 | 成人在线精品视频 | 久草在线| 天天操妹子 | 精品国产一区二区三区性色av | 51ⅴ精品国产91久久久久久 | 亚洲欧美日韩一区二区 | 亚洲精品久久区二区三区蜜桃臀 | 国产日韩视频 | 欧美一级黄色网 | 夜夜久久 | 欧产日产国产精品视频 | 国产日韩欧美 | 国产91视频一区二区 | 国产婷婷在线视频 | 欧美国产日韩成人 | 国产真实精品久久二三区 | 欧美激情精品久久久久久变态 |