📄 cbase.c
字号:
#include "Include.h"
//进入睡眠
//有开关闭合则耗电约24uA(6.5V)
//没有任何其它耗电约2uA(6.5V)
void EnterSleep(void)
{
//关闭外设
LockStop();
LedOff();
BellOff();
//关闭ADC
//IO设置
DDRA=0xEF;
//DDRB=0xFC;
//DDRC=0xFF;
//打开中断
GICR|=0xC0;
sei();
//进入睡眠
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
}
void TimerOut(void)
{
LedRedAction2();
}
void Succeed(void)
{
//unsigned char i=0;
LedGreenALLOn();
BellOn();
//for(i=0;i<7;i++)
//{
// DelayNmS(BELL_LONG_TIME);
//}
//LedOff();
//BellOff();
}
void Fail(void)
{
LedRedAction1();
}
//硬件连接
//PD5 PD6
void CloseDoorModule(void)
{
ShowKey(NowKey);
LockPositive();//电机关门
Timer=DELAY_DOOR;
while(bit_is_clear(PIND,PD5))
{
if(0==Timer)
{
LockStop();
TimerOut();
return;
}
}
DelayNmS(20);
if(0==bit_is_clear(PIND,PD5))
{
//的确按下键
LockStop();
return;
}
}
void OpenDoorModule(void)
{
LockNegative();//电机关门
Timer=DELAY_DOOR;
while(bit_is_clear(PIND,PD6))
{
if(Timer<(DELAY_DOOR-1))
{
BellOff();
LedOff();
}
if(0==Timer)
{
BellOff();
LedOff();
LockStop();
TimerOut();
return;
}
}
//关灯
BellOff();
LedOff();
DelayNmS(20);
if(0==bit_is_clear(PIND,PD6))
{
//的确按下键
LockStop();
return;
}
}
//设置密码
void SetPassWordModule(void)
{
unsigned char i=7;
unsigned char PassWordNum=0;//输入的密码位数
unsigned char GetPassWord[8]={0,0,0,0,0,0,0,0};//现在输入的密码
//判断是否弱电
LowVolageShow();
//蜂鸣器短叫一声,LED蓝灯组亮
BellOn();
LedGreenALLOn();
DelayNmS(BELL_SHORT_TIME);
BellOff();
LedOff();
while(1)
{
if(0==GetKey())
{
TimerOut();
return;//超时返回
}
switch (NowKey)
{
case KEY_0:
case KEY_1:
case KEY_2:
case KEY_3:
case KEY_4:
case KEY_5:
case KEY_6:
case KEY_7:
case KEY_8:
case KEY_9:
//数字键
if(PassWordNum<8)
{
//在8位之内
PassWordNum++;
ShowKey(NowKey);
for(i=7;i>0;i--)
{
GetPassWord[i]=GetPassWord[i-1];
}
GetPassWord[0]=NowKey;//记下输入
}
break;
case KEY_A:
//确定键
if(PassWordNum>1)
{
//密码>2位
ShowKey(NowKey);
for(i=0;i<8;i++)
{
PassWord[i]=GetPassWord[i];
}
SavePassWord();//保存密码
Succeed();
return;
}
break;
default:
break;
}
}
}
//密码开门
/*
void PassWordOpenModule(void)
{
unsigned char i=7;
unsigned char isOK=1;
unsigned char PassWordNum=0;//输入的密码位数
unsigned char GetPassWord[8]={0,0,0,0,0,0,0,0};//现在输入的密码
PassWordNum++;
ShowKey(NowKey);
for(i=7;i>0;i--)
{
GetPassWord[i]=GetPassWord[i-1];
}
GetPassWord[0]=NowKey;//记下输入
LoadPassWord();//读取密码
while(1)
{
if(0==GetKey())
{
TimerOut();
return;//超时返回
}
switch (NowKey)
{
case KEY_0:
case KEY_1:
case KEY_2:
case KEY_3:
case KEY_4:
case KEY_5:
case KEY_6:
case KEY_7:
case KEY_8:
case KEY_9:
//数字键
if(PassWordNum<8)
{
//在8位之内
PassWordNum++;
ShowKey(NowKey);
for(i=7;i>0;i--)
{
GetPassWord[i]=GetPassWord[i-1];
}
GetPassWord[0]=NowKey;//记下输入
}
break;
case KEY_A:
if(PassWordNum>1)
{
for(i=0;i<8;i++)
{
if(GetPassWord[i]!=PassWord[i])
{
isOK=0;
}
}
if(isOK)
{
Succeed();
OpenDoorModule();
}
else
{
Fail();
}
return;
}
break;
default:
break;
}
}
}
*/
//按1 2 3 开门
void PassWordOpenModule(void)
{
unsigned char i=7;
unsigned char isOK=1;
unsigned char PassWordNum=0;//输入的密码位数
unsigned char GetPassWord[8]={0,0,0,0,0,0,0,0};//现在输入的密码
PassWordNum++;
ShowKey(NowKey);
for(i=7;i>0;i--)
{
GetPassWord[i]=GetPassWord[i-1];
}
GetPassWord[0]=NowKey;//记下输入
//LoadPassWord();//读取密码
for(i=0;i<8;i++)
{
PassWord[i]=0;
}
PassWord[0]=3;
PassWord[1]=2;
PassWord[2]=1;
while(1)
{
if(0==GetKey())
{
TimerOut();
return;//超时返回
}
switch (NowKey)
{
case KEY_0:
case KEY_1:
case KEY_2:
case KEY_3:
case KEY_4:
case KEY_5:
case KEY_6:
case KEY_7:
case KEY_8:
case KEY_9:
//数字键
if(PassWordNum<8)
{
//在8位之内
PassWordNum++;
ShowKey(NowKey);
for(i=7;i>0;i--)
{
GetPassWord[i]=GetPassWord[i-1];
}
GetPassWord[0]=NowKey;//记下输入
}
break;
case KEY_A:
if(PassWordNum>1)
{
for(i=0;i<8;i++)
{
if(GetPassWord[i]!=PassWord[i])
{
isOK=0;
}
}
if(isOK)
{
Succeed();
OpenDoorModule();
}
else
{
Fail();
}
return;
}
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -