欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 狀態(tài)機(jī)寫的一個(gè)單片機(jī)按鍵掃描程序新鮮出爐的 [打印本頁(yè)]

作者: jizhongbiao    時(shí)間: 2018-10-9 01:04
標(biāo)題: 狀態(tài)機(jī)寫的一個(gè)單片機(jī)按鍵掃描程序新鮮出爐的
2018年10月9日 01:04:29新鮮出爐
/*----------------------------------------
文件描述:處理一些簡(jiǎn)單邏輯或配置并封裝成函數(shù)
功能:1,設(shè)置IO口模式
      2,上電開機(jī)
                        3,處理2個(gè)按鍵的復(fù)用 比如單擊雙擊長(zhǎng)按等
------------------------------------------*/
#include "STC15Fxxxx.h"
#include "uart.h"
#include "delay.h"
#include "Getserialnumber.h"
#include "other.h"

unsigned char ptt_key_val=PTT_KEY_IDLE ;//初始化定義聲明一個(gè)全局變量 空閑狀態(tài)


///*----------------------------------------
//功能:1,設(shè)置IO口模式
//入口參數(shù):選擇某一組IO口 選擇某一個(gè)引腳  選擇某一種模式(0,準(zhǔn)雙向口 1,推挽 2,高阻  3,開漏 )
//2018年9月28日 15:44:11
//特殊說明:本函數(shù)尚未完善,暫時(shí)只支持P1口的推挽設(shè)置
//------------------------------------------*/
//void GPIO_MOD(unsigned char Px, unsigned char pinx,unsigned char mod)
//{
//  

//}

void PIN14_PP()
{
        P1M1=P1M1&(~(0x01<<4));
        P1M0=P1M0|(0X01<<4);//設(shè)置P1.4推挽
}
/*-----------------------------------------------------
void TURN_ON(void)
系統(tǒng)開機(jī)函數(shù)
增加的延時(shí)是為了防止重復(fù)檢測(cè)到P_KEY_DOWN信號(hào)造成誤操作
------------------------------------------------------*/
void TURN_ON(void)
{
        PIN14_PP();//設(shè)置P1.4推挽
        POWER_ON;
        while(P_KEY_DOWN);        
        delay_ms(50);
        while(P_KEY_DOWN);        
        delay_ms(50);
        while(P_KEY_DOWN);        
        delay_ms(50);
        while(P_KEY_DOWN);        
        delay_ms(50);
        while(P_KEY_DOWN);        
        delay_ms(50);
        while(P_KEY_DOWN);        
}//------------void TURN_ON(void)在此結(jié)束--------------------

/*-----------------------------------------------------------
void PTT_KEY_CHECK(void)
對(duì)講按鍵復(fù)用函數(shù)
采用狀態(tài)機(jī)的方式
檢測(cè)按鍵的 單擊 雙擊 及 長(zhǎng)按
不返回函數(shù)值  采用全局變量ptt_key_val進(jìn)行鍵值的傳遞
------------------------------------------------------*/
void PTT_KEY_CHECK(void)
{
        static unsigned char ptt_key_sta=0;//初始狀態(tài) 定于一個(gè)局部靜態(tài)變量記錄當(dāng)前函數(shù)掃面的狀態(tài)機(jī)狀態(tài)
        static unsigned char count=0;//延時(shí)計(jì)數(shù)緩存 char 型小于256
        switch (ptt_key_sta)
                {
      case 0:
                                {
                                        if(PTT_KEY_DOWN)
                                                {
                                                        ptt_key_sta=1;//有按鍵按下進(jìn)入到下一狀態(tài)
                                                        count=0;//開始新一輪計(jì)數(shù)
                                                }
                                        ptt_key_val=PTT_KEY_IDLE;//返回空閑鍵值 0
                                }
                        break ;//case 0結(jié)束
                                
                        case 1:
                                {
                                                delay_ms(10);
                                          count++;
                                          if(count>80)
                                                        {
                                                                ptt_key_val=PTT_KEY_LONG;//返回長(zhǎng)按鍵值 3
                                                                UART1_SendString("current key status : PTT_KEY_LONG ");//調(diào)試用
                                                                ptt_key_sta=0;//返回初始狀態(tài)
                                                                while(PTT_KEY_DOWN);
                                                                delay_ms(10);
                                                                while(PTT_KEY_DOWN);
                                                                delay_ms(10);
                                                                while(PTT_KEY_DOWN);
                                                                delay_ms(10);
                                                        }
                                                else if(PTT_KEY_UP)
                                                        {
                                                                ptt_key_sta=2;//進(jìn)入狀態(tài)2  將在狀態(tài)2中區(qū)分是雙擊還是單擊
                                                        }
                                }
                        break ;//case 1結(jié)束
                                
                        case 2:
                                {
                                          if(PTT_KEY_UP)
                                                        {
                                                                delay_ms(10);
                                              count++;
                                                        }                                          
                                          if(count>40)
                                                        {
                                                                ptt_key_val=PTT_KEY_SINGLE;//返回單擊鍵值 2
                                                                UART1_SendString("current key status : PTT_KEY_SINGLE ");//調(diào)試用
                                                                ptt_key_sta=0;//返回初始狀態(tài)
                                                        }
                                                 if(PTT_KEY_DOWN&&count>41)
                                                        {
                                                                ptt_key_val=PTT_KEY_DOUBLE;//返回單擊鍵值 2
                                                                UART1_SendString("current key status : PTT_KEY_DOUBLE ");//調(diào)試用
                                                                ptt_key_sta=0;//返回初始狀態(tài)
                                                                while(PTT_KEY_DOWN);
                                                        }
                                }
                        break ;//case 2結(jié)束
                        
                        default :
                        break;
                }//switch (ptt_key_sta) 語(yǔ)句結(jié)束
}//PTT_KEY_CHECK(void)函數(shù)構(gòu)造結(jié)束


#ifndef        __other_H
#define        __other_H


#dfine author={"承接單片機(jī)項(xiàng)目 微信mcu6666  QQ184164353 備注51hei"};


sbit P_ONorOFF=P1^4;
sbit Power_check=P3^2;
sbit PTT_KEY=P3^3;


#define P_KEY_DOWN         Power_check==0
#define P_KEY_UP                 Power_check==1//此宏定義定義按鍵1(電源按鍵) 按下及釋放



#define PTT_KEY_DOWN          PTT_KEY==0
#define PTT_KEY_UP                  PTT_KEY==1  //此宏定義定義按鍵2(對(duì)講按鍵) 按下及釋放
#define PTT_KEY_IDLE                 0
#define PTT_KEY_SINGLE         1
#define PTT_KEY_DOUBLE         2
#define PTT_KEY_LONG                 3//按鍵鍵值宏定義 空閑  單擊 雙擊  長(zhǎng)按
void PTT_KEY_CHECK(void);




#define POWER_ON   P_ONorOFF=0
#define POWER_OFF  P_ONorOFF=1//總開關(guān)機(jī)宏定義

void PIN14_PP();
void TURN_ON();

#endif



作者: admin    時(shí)間: 2018-10-10 01:47
好資料,51黑有你更精彩!!!
作者: jizhongbiao    時(shí)間: 2018-10-10 11:59
勘誤:當(dāng)天晚上寫完蒙圈了寫錯(cuò)了一行代碼,沒仔細(xì)檢查。if(PTT_KEY_DOWN&&count>41)修改為if(PTT_KEY_DOWN&&count<41),本程序已實(shí)際調(diào)試完畢可用。
作者: a89588038    時(shí)間: 2019-9-25 09:50

好資料,51黑有你更精彩!!!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1