⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handle.c

📁 通过调试的保险柜程序,包含通讯,中断,蜂鸣器,RS232通讯.
💻 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 + -