?? handle.c
字號(hào):
/***************************************************************************************************
*
*文件說(shuō)明:
*
*
***************************************************************************************************/
/***************************************************************************************************
*
*文件名 :handle.c
*版本 :V0.1
*創(chuàng)建日期 :2006.7.5
*創(chuàng)建者 :程超
*
*最后修改日期 :
*修改者 :
*修改原因及內(nèi)容 :
*
***************************************************************************************************/
#include "includes.h"
/***************************************************************************************************
*
*功能描述 :系統(tǒng)初始化
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void init(void)
{
RBPU=0; //使能PB口弱上拉
TRISB4=1;
TRISB3=1;
TRISA2=1;
TRISA3=1;
LED_GREEN_DIR=0; //設(shè)置綠色LED燈控制腳為輸出
LED_GREEN=LED_GREEN_OFF; //關(guān)綠色LED燈
LED_RED_DIR=0;
LED_RED=LED_RED_OFF;
BUZZER_DIR=0;
BUZZER=BUZZER_OFF;
POWER_TURN_DIR=0;
POWER_TURN=POWER_TURN_OFF;
MOTOR_A_DIR=0;
MOTOR_B_DIR=0;
motorStop(); //馬達(dá)停止
LOGIN_KEY_DIR=1;
DEL_KEY_DIR=1;
OPEN_KEY_DIR=1;
CLOSE_KEY_DIR=1;
OPEN_LIMIT_DIR=1;
CLOSE_LIMIT_DIR=1;
ADInit();
INTEDG=1; //設(shè)定INT/RB0在下降沿中斷
INTE=1; //使能INT/RB0中斷
RBIE=1; //使能RB4~7口電平變化中斷
receiveNum=0;
receiveCmd=false;
receiveAck=false;
uartStop();
PEIE=1; //外圍中斷使能
GIE=1; //全局中斷使能
}
/***************************************************************************************************
*
*功能描述 :延時(shí),ms為單位
*輸入?yún)?shù) :timeLong延時(shí)長(zhǎng)度
*返回值 :無(wú)
*
***************************************************************************************************/
void delayMs(uint8 timeLong)
{
uint16 i;
uint8 j;
for(j=0;j<timeLong;j++)
{
for(i=0;i<357;i++)
{
nop();
}
}
}
/***************************************************************************************************
*
*功能描述 :蜂鳴器叫,長(zhǎng)聲
*輸入?yún)?shù) :onTimes蜂鳴器鳴叫的次數(shù)
*返回值 :無(wú)
*
***************************************************************************************************/
void buzzerOnLong(uint8 onTimes)
{
uint8 i;
for(i=0;i<onTimes;i++)
{
BUZZER=BUZZER_ON;
delayMs(250);
delayMs(250);
delayMs(200);
BUZZER=BUZZER_OFF;
delayMs(250);
delayMs(250);
delayMs(200);
}
}
/***************************************************************************************************
*
*功能描述 :蜂鳴器叫,短聲
*輸入?yún)?shù) :onTimes蜂鳴器鳴叫的次數(shù)
*返回值 :無(wú)
*
***************************************************************************************************/
void buzzerOnShort(uint8 onTimes)
{
uint8 i;
for(i=0;i<onTimes;i++)
{
BUZZER=BUZZER_ON;
delayMs(250);
delayMs(50);
BUZZER=BUZZER_OFF;
delayMs(250);
delayMs(50);
}
}
/***************************************************************************************************
*
*功能描述 :關(guān)門(mén)處理
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void closeHandle(void)
{
LED_GREEN=LED_GREEN_ON; //打開(kāi)綠色LED指示燈
motorCloseDoor();
while(CLOSE_LIMIT==CLOSE_LIMIT_OFF); //測(cè)量多次,為去干擾
delayMs(1);
while(CLOSE_LIMIT==CLOSE_LIMIT_OFF);
delayMs(1);
while(CLOSE_LIMIT==CLOSE_LIMIT_OFF);
delayMs(1);
while(CLOSE_LIMIT==CLOSE_LIMIT_OFF);
motorStop();
buzzerOnShort(1); //蜂鳴器叫
LED_GREEN=LED_GREEN_OFF; //關(guān)綠色LED指示燈
}
/***************************************************************************************************
*
*功能描述 :開(kāi)門(mén)處理
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void openHandle(void)
{
buzzerOnShort(1);
if(FPMEmptycheck()==false)
{ //當(dāng)指紋模塊沒(méi)有登錄指紋時(shí)
if(useCheck()==false) //當(dāng)指紋驗(yàn)證失敗時(shí)的處理
{
LED_RED=LED_RED_ON;
buzzerOnShort(2);
LED_RED=LED_RED_OFF;
return;
}
}
LED_GREEN=LED_GREEN_ON;
buzzerOnShort(1);
motorOpenDoor();
while(OPEN_LIMIT==OPEN_LIMIT_OFF);
delayMs(1);
while(OPEN_LIMIT==OPEN_LIMIT_OFF);
delayMs(1);
while(OPEN_LIMIT==OPEN_LIMIT_OFF);
delayMs(1);
while(OPEN_LIMIT==OPEN_LIMIT_OFF);
delayMs(1);
motorStop();
buzzerOnShort(1);
LED_GREEN=LED_GREEN_OFF;
}
/***************************************************************************************************
*
*功能描述 :指紋注冊(cè)處理
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void loginHandle(void)
{
buzzerOnShort(1);
buzzerOnLong(1);
if(useLogin()==true)
{ //登錄成功處理
LED_GREEN=LED_GREEN_ON;
buzzerOnShort(1);
LED_GREEN=LED_GREEN_OFF;
}
else
{ //登錄失敗處理
LED_RED=LED_RED_ON;
buzzerOnLong(1);
LED_RED=LED_RED_OFF;
}
}
/***************************************************************************************************
*
*功能描述 :刪除指紋處理
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void delHandle(void)
{
buzzerOnShort(1);
buzzerOnLong(1);
if(allUseDel()==true)
{
LED_GREEN=LED_GREEN_ON;
buzzerOnShort(1);
LED_GREEN=LED_GREEN_OFF;
}
}
/***************************************************************************************************
*
*功能描述 :A/D轉(zhuǎn)換模塊初始化
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void ADInit(void)
{
ADCS0=0; //設(shè)置A/D轉(zhuǎn)換時(shí)鐘為Fosc/32
ADCS1=1;
CHS0=0; //選擇RA0/AN0作為模擬輸入通道
CHS1=0;
CHS2=0;
TRISA0=1;
TRISA1=1;
TRISA3=1;
TRISA5=0;
RA5=0;
ADON=0; //關(guān)AD模塊操作
PCFG0=1; //配置所有模擬口為數(shù)個(gè)接口
PCFG1=1;
PCFG2=1;
}
/***************************************************************************************************
*
*功能描述 :A/D轉(zhuǎn)換模塊初始化
*輸入?yún)?shù) :無(wú)
*返回值 :AD0通道AD轉(zhuǎn)換的結(jié)果
*
***************************************************************************************************/
uint8 AD0Convert(void)
{
uint8 returnValue;
PCFG0=1; //配置所有RA0,RA1作為模擬輸入口,RA3作為參考電壓輸入口
PCFG1=0;
PCFG2=1;
RA5=1;
ADON=1; //打開(kāi)AD轉(zhuǎn)換模塊
delayMs(2); //等待電壓穩(wěn)定
ADGO=1; //啟動(dòng)AD轉(zhuǎn)換
while(ADIF==0); //等待AD轉(zhuǎn)換完成
returnValue=ADRES; //讀AD轉(zhuǎn)換結(jié)果
ADIF=0;
ADON=0;
RA5=0;
PCFG0=1; //配置所有模擬口為數(shù)個(gè)接口
PCFG1=1;
PCFG2=1;
return(returnValue);
}
/***************************************************************************************************
*
*功能描述 :電池電壓檢測(cè)處理
*輸入?yún)?shù) :無(wú)
*返回值 :無(wú)
*
***************************************************************************************************/
void cellDetect(void)
{
if(handleState!=NOP_STATE)
{
if(AD0Convert()<AD_COMP_VALUE) //電池電量不足處理
{
buzzerOnLong(2);
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -