📄 handle.c
字号:
/***************************************************************************************************
*
*文件说明:
*
*
***************************************************************************************************/
/***************************************************************************************************
*
*文件名 :handle.c
*版本 :V0.1
*创建日期 :2006.7.5
*创建者 :程超
*
*最后修改日期 :
*修改者 :
*修改原因及内容 :
*
***************************************************************************************************/
#include "includes.h"
/***************************************************************************************************
*
*功能描述 :系统初始化
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void init(void)
{
RBPU=0; //使能PB口弱上拉
TRISB4=1;
TRISB3=1;
TRISA2=1;
TRISA3=1;
LED_GREEN_DIR=0; //设置绿色LED灯控制脚为输出
LED_GREEN=LED_GREEN_OFF; //关绿色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(); //马达停止
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; //设定INT/RB0在下降沿中断
INTE=1; //使能INT/RB0中断
RBIE=1; //使能RB4~7口电平变化中断
receiveNum=0;
receiveCmd=false;
receiveAck=false;
uartStop();
PEIE=1; //外围中断使能
GIE=1; //全局中断使能
}
/***************************************************************************************************
*
*功能描述 :延时,ms为单位
*输入参数 :timeLong延时长度
*返回值 :无
*
***************************************************************************************************/
void delayMs(uint8 timeLong)
{
uint16 i;
uint8 j;
for(j=0;j<timeLong;j++)
{
for(i=0;i<357;i++)
{
nop();
}
}
}
/***************************************************************************************************
*
*功能描述 :蜂鸣器叫,长声
*输入参数 :onTimes蜂鸣器鸣叫的次数
*返回值 :无
*
***************************************************************************************************/
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);
}
}
/***************************************************************************************************
*
*功能描述 :蜂鸣器叫,短声
*输入参数 :onTimes蜂鸣器鸣叫的次数
*返回值 :无
*
***************************************************************************************************/
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);
}
}
/***************************************************************************************************
*
*功能描述 :关门处理
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void closeHandle(void)
{
LED_GREEN=LED_GREEN_ON; //打开绿色LED指示灯
motorCloseDoor();
while(CLOSE_LIMIT==CLOSE_LIMIT_OFF); //测量多次,为去干扰
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; //关绿色LED指示灯
}
/***************************************************************************************************
*
*功能描述 :开门处理
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void openHandle(void)
{
buzzerOnShort(1);
if(FPMEmptycheck()==false)
{ //当指纹模块没有登录指纹时
if(useCheck()==false) //当指纹验证失败时的处理
{
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;
}
/***************************************************************************************************
*
*功能描述 :指纹注册处理
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
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;
}
}
/***************************************************************************************************
*
*功能描述 :删除指纹处理
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void delHandle(void)
{
buzzerOnShort(1);
buzzerOnLong(1);
if(allUseDel()==true)
{
LED_GREEN=LED_GREEN_ON;
buzzerOnShort(1);
LED_GREEN=LED_GREEN_OFF;
}
}
/***************************************************************************************************
*
*功能描述 :A/D转换模块初始化
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void ADInit(void)
{
ADCS0=0; //设置A/D转换时钟为Fosc/32
ADCS1=1;
CHS0=0; //选择RA0/AN0作为模拟输入通道
CHS1=0;
CHS2=0;
TRISA0=1;
TRISA1=1;
TRISA3=1;
TRISA5=0;
RA5=0;
ADON=0; //关AD模块操作
PCFG0=1; //配置所有模拟口为数个接口
PCFG1=1;
PCFG2=1;
}
/***************************************************************************************************
*
*功能描述 :A/D转换模块初始化
*输入参数 :无
*返回值 :AD0通道AD转换的结果
*
***************************************************************************************************/
uint8 AD0Convert(void)
{
uint8 returnValue;
PCFG0=1; //配置所有RA0,RA1作为模拟输入口,RA3作为参考电压输入口
PCFG1=0;
PCFG2=1;
RA5=1;
ADON=1; //打开AD转换模块
delayMs(2); //等待电压稳定
ADIF=0;
ADGO=1; //启动AD转换
while(ADIF==0); //等待AD转换完成
returnValue=ADRES; //读AD转换结果
ADIF=0;
ADON=0;
RA5=0;
PCFG0=1; //配置所有模拟口为数个接口
PCFG1=1;
PCFG2=1;
return(returnValue);
}
/***************************************************************************************************
*
*功能描述 :电池电压检测处理
*输入参数 :无
*返回值 :无
*
***************************************************************************************************/
void cellDetect(void)
{
if(handleState!=NOP_STATE)
{
if(AD0Convert()<AD_COMP_VALUE) //电池电量不足处理
{
buzzerOnLong(2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -