欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
用PIC10F202單片機制作兩路開關(guān)源程序
[打印本頁]
作者:
heicad
時間:
2016-8-15 01:28
標題:
用PIC10F202單片機制作兩路開關(guān)源程序
完整代碼下載:
http://m.raoushi.com/bbs/dpj-53553-1.html
//=======================================用戶配置區(qū),供用戶修改===========================================
#define TIME2 1000 //長按鍵時間設置,單位ms ,1000 = 1s 范圍:1~10s
//=========================================================================================================
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//************************************ 以下為代碼區(qū),請勿改動! *****************************************
//=============================================硬件連接示意===============================================
//
// ___短 _ 長 _______
// |_| |_________| PIC10F200/202
// +---------+
// KEY 長/短按鍵 ---|GP0 GP3|---
// | |
// |GND VDD|
// | | __ ___
// 長按鍵翻轉(zhuǎn)輸出 ---|GP1 GP2|---短按鍵翻轉(zhuǎn)輸出 _| |____| |____
// +---------+
// __________ _____________
// _| |___________| |____
//
//--------------------------------------------------------------------------------------------------------
/*
長/短按鍵IO口電平翻轉(zhuǎn)程序
說明:1.該程序通過檢測GP0管腳的有效按鍵長短,循環(huán)翻轉(zhuǎn)GP2和GP1管腳的輸出電平高低。
每檢測到一個短按鍵,則對GP2管腳輸出電平進行一次翻轉(zhuǎn),每檢測到一個長按鍵,
則對GP1管腳輸出電平進行一次翻轉(zhuǎn)。
2.按鍵是帶有狀態(tài)機的鍵盤掃描程序,可有效對按鍵消抖,抗干擾能力極強。
3.長按鍵的時間可通過程序頂端的參數(shù)進行方便的設置,以滿足現(xiàn)場需求。
4.GP1、GP2在單片機默認狀態(tài)和復位后輸出電平為低。
5.待機功耗為400uA(@5V),長按鍵功耗為500uA(@5V)。
6.已啟用內(nèi)部弱上拉,按鍵可以不加上拉電阻,如果要保證信號可靠,可以加上拉電阻,
建議選擇>=100K的電阻,以降低長時間按下按鍵在電阻上的功耗。
日期:2014/09/04 版本:V2.0
*/
//=========================================================================================================
#include <pic.h> //本代碼可支持單片機型號:PIC10F200/202
#define Key_Read_T 25 //等間隔讀取鍵值,單位ms
#define KEY_IO GP0 //按鍵信號輸入
#define Short_Out GP1 //短按按鍵響應數(shù)出口
bit short_out; //記錄Short_Out當前狀態(tài)
bit short_IF; //短按響應標志
#define Long_Out GP2 //長按按鍵響應數(shù)出口
bit long_out; //記錄Long_Out當前狀態(tài)
bit long_IF; //長按響應標志
unsigned char KEY_State=0; /*按鍵的狀態(tài)變量*/
#define NOKEY 0
#define PUSH_KEY 1
#define LONG_PUSH 2
#define INITIAL_25MS 161 //相對于本系統(tǒng)與定時器時鐘,本數(shù)據(jù)為固定值。定時器增計數(shù),計數(shù)周期為256us,計97個數(shù)約為25mS。256-97+2=161
/****************************************************************************
* 名 稱:Key_ScanIO()
* 功 能:掃描鍵盤IO口并判斷按鍵事件
* 入口參數(shù):Ticklong:長按鍵有效時長,單位ms
* 出口參數(shù):無
* 說 明: 該函數(shù)需要每隔25(Key_Read_T)ms,調(diào)用一次。最好放在定時中斷內(nèi)執(zhí)行。
如果中斷間隔太長,可能丟鍵;間隔太短不能消除抖動。
****************************************************************************/
void Key_ScanIO(int Ticklong)
{
static unsigned int KeyTimerS;
//===============================按鍵========================================
if(KEY_State==PUSH_KEY) KeyTimerS++; /*定時器,時間間隔25ms*/
else KeyTimerS=0;
switch(KEY_State) //根據(jù)按鍵的狀態(tài)決定程序分支
{
case NOKEY: //------------------在未按鍵狀態(tài)下--------------------------
{ //若鍵被按下,按鍵狀態(tài)變?yōu)?quot;短按狀態(tài)"。
if(KEY_IO==0) KEY_State=PUSH_KEY;
break;
}
case PUSH_KEY: //-------------按鍵處于"短按狀態(tài)"時------------------------
{
if(KEY_IO!=0) //若鍵被釋放,認為是一次短按鍵
{
KEY_State=NOKEY; //并回到"未按下狀態(tài)"
short_IF = 0;
long_IF = 0;
}
else if(KeyTimerS>Ticklong) //若按鍵時間超過Ticks毫秒,認為是一次長按鍵,
{
KEY_State=LONG_PUSH; // 按鍵狀態(tài)變?yōu)?quot;長按狀態(tài)"
}
break;
}
case LONG_PUSH: //------------按鍵處于"長按狀態(tài)"時--------------------
{
if(KEY_IO!=0) //若鍵被釋放,回到未按鍵狀態(tài)
{
KEY_State=NOKEY;
short_IF = 0;
long_IF = 0;
}
break;
}
}
}
/****************************************************************************
* 名 稱:Key_Answer()
* 功 能:根據(jù)按鍵狀態(tài)作出響應,控制IO管腳輸出電平翻轉(zhuǎn)
* 入口參數(shù):Ticklong:長按鍵有效時長,單位ms
* 出口參數(shù):無
****************************************************************************/
void Key_Answer(void)
{
if((KEY_State==PUSH_KEY)&&(short_IF == 0))
{
short_out = ~short_out;
Short_Out = short_out;
short_IF = 1;
}
if((KEY_State==LONG_PUSH)&&(long_IF == 0))
{
long_out = ~long_out;
Long_Out = long_out;
long_IF = 1;
}
}
/**************************************************************************************
名 稱:main()
功 能:主程序
入口參數(shù):無
出口參數(shù):無
***************************************************************************************/
void main()
{
//設置時鐘周期Fosc = 4MHz,系統(tǒng)時鐘,無法設置
OPTION = 0x97; //復位值0xFF。TIMER0的時鐘源是Fosc/4,1us。TIMER0 256預分頻,256us
// CMCON0 = 0xE1;
TRISGPIO = 0x09; //GP1、GP2配置為輸出。0為輸出,1為輸入
short_out = 0;
Short_Out = short_out;
long_out = 0;
Long_Out = long_out; //為輸出賦初值
TMR0 = INITIAL_25MS; //增計數(shù),計數(shù)周期為256us,計97個數(shù)約為25mS。256-125+2=97
while(1)
{
#asm
CLRWDT
#endasm
if(TMR0 < INITIAL_25MS) //1ms 進入1次
{
TMR0 = INITIAL_25MS; //增計數(shù),計數(shù)周期為256us,計97個數(shù)約為25mS。256-125+2=97
Key_ScanIO(TIME2/Key_Read_T);//判斷按鍵值
Key_Answer(); //根據(jù)鍵值控制輸出IO電平翻轉(zhuǎn)
}
}
}
//====================================================代碼結(jié)束!=================================================
復制代碼
作者:
amour8008
時間:
2016-12-20 11:54
初學者,學習一下
作者:
13430885511
時間:
2017-12-5 15:51
我司有PIC現(xiàn)貨,另有可替換的單片機,不需要修改程序跟軟件,如有需要請聯(lián)系顏,13430885511
作者:
MCSLGH
時間:
2017-12-12 15:05
學習一下!!!
作者:
lgx1213
時間:
2017-12-15 14:43
能配上電路,更為完善!!!
作者:
desig
時間:
2018-7-12 11:57
功能還能更低嗎,傳說的2uA呢
作者:
pyb93643
時間:
2020-6-2 19:09
謝謝分享,我是來學習的
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1