1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/rao-jiechang-Lock-STC12C5A60S2

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
main.c 3.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
dumpling Отправлено 20.02.2022 18:13 45a98ae
#include "stc12c5a60s2.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
#include "key.h"
#include "rc522.h"
#include "eeprom.h"
#include "int0.h"
#include "uart.h"
#include "others.h"
#include "intrins.h"
#include "fingerprint.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
extern unsigned int code addr;//EEPROM扇区1地址(第一个字节)
extern u8 ole_pwd[6];
extern u8 pwd_error;//密码错误次数
extern u8 rc522_error;//RC522刷卡错误次数
extern u8 as608_error;//AS608指纹错误次数
u8 time = 0;
u8 time_pwderr = 0;
u8 time_rc522err = 0;
u8 time_as608err = 0;
u8 time_LCD1602_A = 15; //背光时间15s
//定时器0初始化程序---1T模式
void Timer0Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
EA = 1;
}
/************************主函数**************************/
void main(void)
{
u8 i;
//背光初始化
time_LCD1602_A = 15;
LCD1602_A = 0; //灭
LCD1602_A = 1; //亮
//蜂鸣器初始化
beep = 1;
beep = 0;
//继电器初始化
relay = 0;//关
//液晶显示屏初始化
LcdInit();
//外部中断0初始化
INT0_Init();
Uart1_Init();
//串口2初始化
// Uart2_Init(); //调试
Delay1000ms();
Device_Check(); //等待验证成功
Delay1000ms();
//定时器0初始化
Timer0Init();
/*忘记密码时使用:取消注释*/
//// IapEraseSector(addr); //擦除扇区1,地址:0000H
//// for(i=0;i<6;i++)
//// {
//// IapProgramByte(addr+i,ole_pwd[i]);//初始密码:111 111
//// }
/*忘记密码时使用:取消注释*/
//读入EEPROM存储的密码
for(i=0;i<16;i++)
{
ole_pwd[i] = IapReadByte(addr+i);
}
//键盘初始化
GPIO_KEY = 0xFF;
//RC522初始化
RC522_Init();
Delay1000ms();
//初始化界面显示
Lcd_Show_Data(1,1," Dumpling-Lock ",16);
Lcd_Show_Data(2,1,"input: ",16);
while(1)
{
if(pwd_error<3)
{
KEY_Pros(); //键盘处理主程序
}
if(rc522_error<3)
{
RC522_Pros();
}
}
}
/************************中断服务函数**************************/
//外部中断0中断服务函数
void Int0(void) interrupt 0 //指纹中断
{
if(as608_error<3)
{
//显示重置
LCD1602_A = 1; //开背光
time_LCD1602_A = 15; //背光时间重置为15s
FPM10A_Find_Fingerprint(); //按压用力
}
}
//定时器0中断服务函数
void Timer0Interrupt() interrupt 1
{
TL0 = 0x00; //设置定时初值(重装载)
TH0 = 0x28; //设置定时初值(重装载)
time++;//5ms
if(time >= 200) //1s = 5ms * 200
{
/*****1s*****/
time = 0;
if(pwd_error >= 3) //键盘输入错误次数达到3次
{
time_pwderr++;
if(time_pwderr >= 15) //关闭键盘功能时间到达15s,再次开启键盘输入
{
time_pwderr = 0;
pwd_error = 0;
}
}
if(rc522_error >= 3) //RC522刷卡错误次数达到3次
{
time_rc522err++;
if(time_rc522err >= 15) //关闭刷卡功能时间到达15s,再次开启刷卡输入
{
time_rc522err = 0;
rc522_error = 0;
}
}
if(as608_error >= 3) //AS608指纹错误次数达到3次
{
time_as608err++;
if(time_as608err >= 15) //关闭指纹功能时间到达15s,再次开启指纹输入
{
time_as608err = 0;
as608_error = 0;
}
}
time_LCD1602_A--; //背光时间减1s
if(time_LCD1602_A == 0) //背光时间为0
{
LCD1602_A = 0; //关闭背光
}
/*****1s*****/
}
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/rao-jiechang-Lock-STC12C5A60S2.git
git@api.gitlife.ru:oschina-mirror/rao-jiechang-Lock-STC12C5A60S2.git
oschina-mirror
rao-jiechang-Lock-STC12C5A60S2
rao-jiechang-Lock-STC12C5A60S2
master