久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
狀態機寫的一個單片機按鍵掃描程序新鮮出爐的
[打印本頁]
作者:
jizhongbiao
時間:
2018-10-9 01:04
標題:
狀態機寫的一個單片機按鍵掃描程序新鮮出爐的
2018年10月9日 01:04:29新鮮出爐
/*----------------------------------------
文件描述:處理一些簡單邏輯或配置并封裝成函數
功能:1,設置IO口模式
2,上電開機
3,處理2個按鍵的復用 比如單擊雙擊長按等
------------------------------------------*/
#include "STC15Fxxxx.h"
#include "uart.h"
#include "delay.h"
#include "Getserialnumber.h"
#include "other.h"
unsigned char ptt_key_val=PTT_KEY_IDLE ;//初始化定義聲明一個全局變量 空閑狀態
///*----------------------------------------
//功能:1,設置IO口模式
//入口參數:選擇某一組IO口 選擇某一個引腳 選擇某一種模式(0,準雙向口 1,推挽 2,高阻 3,開漏 )
//2018年9月28日 15:44:11
//特殊說明:本函數尚未完善,暫時只支持P1口的推挽設置
//------------------------------------------*/
//void GPIO_MOD(unsigned char Px, unsigned char pinx,unsigned char mod)
//{
//
//}
void PIN14_PP()
{
P1M1=P1M1&(~(0x01<<4));
P1M0=P1M0|(0X01<<4);//設置P1.4推挽
}
/*-----------------------------------------------------
void TURN_ON(void)
系統開機函數
增加的延時是為了防止重復檢測到P_KEY_DOWN信號造成誤操作
------------------------------------------------------*/
void TURN_ON(void)
{
PIN14_PP();//設置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)在此結束--------------------
/*-----------------------------------------------------------
void PTT_KEY_CHECK(void)
對講按鍵復用函數
采用狀態機的方式
檢測按鍵的 單擊 雙擊 及 長按
不返回函數值 采用全局變量ptt_key_val進行鍵值的傳遞
------------------------------------------------------*/
void PTT_KEY_CHECK(void)
{
static unsigned char ptt_key_sta=0;//初始狀態 定于一個局部靜態變量記錄當前函數掃面的狀態機狀態
static unsigned char count=0;//延時計數緩存 char 型小于256
switch (ptt_key_sta)
{
case 0:
{
if(PTT_KEY_DOWN)
{
ptt_key_sta=1;//有按鍵按下進入到下一狀態
count=0;//開始新一輪計數
}
ptt_key_val=PTT_KEY_IDLE;//返回空閑鍵值 0
}
break ;//case 0結束
case 1:
{
delay_ms(10);
count++;
if(count>80)
{
ptt_key_val=PTT_KEY_LONG;//返回長按鍵值 3
UART1_SendString("current key status : PTT_KEY_LONG ");//調試用
ptt_key_sta=0;//返回初始狀態
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;//進入狀態2 將在狀態2中區分是雙擊還是單擊
}
}
break ;//case 1結束
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 ");//調試用
ptt_key_sta=0;//返回初始狀態
}
if(PTT_KEY_DOWN&&count>41)
{
ptt_key_val=PTT_KEY_DOUBLE;//返回單擊鍵值 2
UART1_SendString("current key status : PTT_KEY_DOUBLE ");//調試用
ptt_key_sta=0;//返回初始狀態
while(PTT_KEY_DOWN);
}
}
break ;//case 2結束
default :
break;
}//switch (ptt_key_sta) 語句結束
}//PTT_KEY_CHECK(void)函數構造結束
#ifndef __other_H
#define __other_H
#dfine author={"承接單片機項目 微信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(對講按鍵) 按下及釋放
#define PTT_KEY_IDLE 0
#define PTT_KEY_SINGLE 1
#define PTT_KEY_DOUBLE 2
#define PTT_KEY_LONG 3//按鍵鍵值宏定義 空閑 單擊 雙擊 長按
void PTT_KEY_CHECK(void);
#define POWER_ON P_ONorOFF=0
#define POWER_OFF P_ONorOFF=1//總開關機宏定義
void PIN14_PP();
void TURN_ON();
#endif
作者:
admin
時間:
2018-10-10 01:47
好資料,51黑有你更精彩!!!
作者:
jizhongbiao
時間:
2018-10-10 11:59
勘誤:當天晚上寫完蒙圈了寫錯了一行代碼,沒仔細檢查。if(PTT_KEY_DOWN&&count>41)修改為if(PTT_KEY_DOWN&&count<41),本程序已實際調試完畢可用。
作者:
a89588038
時間:
2019-9-25 09:50
好資料,51黑有你更精彩!!!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久不卡
|
久久精品av麻豆的观看方式
|
九九热在线免费视频
|
亚洲啪啪
|
免费观看一级毛片
|
玖玖玖在线
|
成人a在线观看
|
中文字幕在线观看国产
|
天天操天天射天天舔
|
国产精品久久久久久52avav
|
全免费a级毛片免费看视频免
|
日韩欧美在线观看
|
韩日精品在线观看
|
亚洲成人综合社区
|
天天干亚洲
|
亚洲精品乱码久久久久久黑人
|
欧美日韩国产精品一区
|
91在线视频播放
|
精国产品一区二区三区四季综
|
日本一区二区三区在线观看
|
日韩av福利在线观看
|
99久久久国产精品
|
国产精品自拍视频网站
|
美国黄色一级片
|
成人国产精品久久
|
羞羞网站在线观看
|
色片在线观看
|
97av在线
|
韩国毛片视频
|
国产成都精品91一区二区三
|
91观看
|
欧美伊人影院
|
一区二区精品
|
欧美日韩精品影院
|
国产日韩一区二区
|
久久久免费少妇高潮毛片
|
亚洲精品视频网站在线观看
|
综合久久一区
|
在线观看一区
|
国产精品美女久久久
|
午夜精品影院
|