门禁源代码.docx

上传人:b****5 文档编号:6766911 上传时间:2023-01-10 格式:DOCX 页数:66 大小:34.88KB
下载 相关 举报
门禁源代码.docx_第1页
第1页 / 共66页
门禁源代码.docx_第2页
第2页 / 共66页
门禁源代码.docx_第3页
第3页 / 共66页
门禁源代码.docx_第4页
第4页 / 共66页
门禁源代码.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

门禁源代码.docx

《门禁源代码.docx》由会员分享,可在线阅读,更多相关《门禁源代码.docx(66页珍藏版)》请在冰豆网上搜索。

门禁源代码.docx

门禁源代码

/******************************************************************************************************************

程序名:

射频卡门禁系统

功能概述:

1、点阵LCD(128*64)显示。

在正常、设置情况下LCD显示系统各个时期的菜单以供选择。

2、射频卡开锁,开锁时用射频卡放在读卡器上(距离<15CM)即可开锁,如果用非法卡连续刷写次数超过3

次则报警(报警功能没有添加),这时系统将关闭刷卡器30分钟,在30分钟后再允许刷卡。

3本系统分为:

1)、1个主机。

2)、2个读卡头(一个在门外供刷卡用、一个在主机旁用于管理操作)

4、本锁开锁时供电,平时断电(12V)。

5、8个按键(AD转换采样取值)(设置、、-、↑、↓、确认、返回、说明)

6、每次按下键、刷卡时有峰鸣器指示

7、LCD背光在有按键按下时、或刷卡时自动点亮,延时30秒关闭

8、门外有人体红外传感器探头,发现2米内有人,自动进入预警状态,如果是在晚上超过7点钟,则点亮门前的灯泡照明,

如果此时有人破坏(比如取下灯泡、剪断灯炮的线、打烂灯泡)也要报警。

否则、连续在门前超过1分钟,就开始报警。

(此功能没有添加)

9、开门时发出“欢迎光临”,并提示关门(此功能没有添加)

10、本机带有门铃,并能记录前10天门铃按下的次数。

(此功能没有添加)

11、LCD显示日期、星期、时间、室内温度、锁的状态、功能设置(菜单显示)等

12、可以查询过去10天内的开门记录并由LCD显示出来(此功能没有添加)

13、可以于电脑通过RS-232接口连接进行通信,监看门的状态、开门记录等,方便打印(此功能没有添加)

14、要求锁误判率小于1PPM

15、系统配有UPS(12V)平时用UPS电能,只有当主机检测到电压低于11.5V时,自动接入火电进行充电。

电瓶充满时(大约5小时)自动断电。

16、电压:

12V

17、电流:

待机时<50MA

射频卡类型:

4001、EM4100和含E2PROM的RF卡。

如E5550。

MCU类型:

ATmega16

晶振频率:

7.3728MHZ

版本:

V0.1

编程:

于军峰

编译日期:

2007-05-01

******************************************************************************************************************/

#include

#include

#include

#include"LCD_12864.H"//LCD头文件

#include"read_card.H"//读卡头文件

#definekey_inc(PINC&(1<

#definekey_dec(PINC&(1<

#defineBAUDRATE9600//波特率

#defineF_CPU7372800//晶振频率

#defineLCD_LAMP60//LCD默认30S后关闭

#defineBATTERY_TIME5//每十分钟检测一次电池电量

#defineADC_PINA00x00//ADC0按键AD单端通道,不放大

#defineADC_PINA10x01//ADC1温度采样

#defineADC_PINA20x02//ADC2电平电量检测

#defineLCD_BACK_ONPORTC&=~(1<

#defineLCD_BACK_OFFPORTC|=(1<

#definebuzzer_onPORTD&=~(1<

#definebuzzer_offPORTD|=(1<

#definecharge_onPORTC&=~(1<

#definecharge_offPORTC|=(1<

 

#defineLOCK_ONPORTC&=~(1<

#defineLOCK_OFFPORTC|=(1<

 

#defineCHARGE_STATUS(PINC&(1<

#definenull0

#definevref5000//AD转换参考电压

#defineOVER_FLOW10//进入菜单设置时,如果在10S内没有按下任何键,则自动退出

#pragmadata:

code

//constucharmanage_card[5]={0x0b,0,0x2d,0x23,0x5f};//住房卡-----当作管理卡

constucharmanage_card[5]={0x33,0,0x7c,0x09,0xb1};//0008128945-----当作管理卡

//*************************************************温度测定查表****************************************************

//******************************************温度范围是:

-30度----99度*********************************************

constuinttemp_1[130]={

4304,4270,4235,4198,4161,4122,4083,4042,4001,3958,

3914,3870,3824,3778,3731,3683,3635,3585,3535,3484,

3433,3381,3329,3276,3223,3169,3116,3062,3008,2953,

2899,2844,2789,2733,2678,2622,2568,2514,2459,2405,

2353,2299,2248,2196,2145,2095,2045,1996,1948,1901,

1854,1808,1763,1719,1676,1599,1590,1549,1508,1468,

1429,1391,1354,1318,1282,1247,1214,1181,1149,1117,

1087,1057,1028,1000,973,946,920,895,870,846,

823,800,777,755,755,713,692,673,654,632,

617,600,583,567,551,536,521,506,491,478,

465,452,440,428,417,405,394,384,373,364,

354,345,335,326,318,310,302,294,286,279,

271,265,258,252,245,239,233,227,222,216,

};

//*****************************************************************************************************************

#pragmadata:

data

ucharcard_data[5][5]={

{0,0,0,0,0},//卡1

{0,0,0,0,0},//卡2

{0,0,0,0,0},//卡3

{0,0,0,0,0},//卡4

{0,0,0,0,0},//卡5

};

uchartem[7]={7,5,1,8,0,0,6};//日期、时间、星期数组

//年/月/日/H/M/S/W

//********************************************目录结构体定义*******************************************************

structmenu_item

{

shortmenu_count;

char*display_string;

void(*subs)();

structmenu_item*children_menus;

structmenu_item*parent_menus;

};

//**********************************************结构数组声明*******************************************************

structmenu_itemmain_menu[4];

structmenu_itemalarm_menu[2];

structmenu_iteminfrared_menu[2];

structmenu_itemlamp_menu[2];

structmenu_item(*menu_point)=main_menu;

structmenu_itemcard_main_menu[4];

structmenu_itemcard_inc_menu[2];

structmenu_itemcard_dec_menu[2];

structmenu_item(*menu_card)=card_main_menu;

ucharuser_choose=0;

ucharmax_items=0;

uinttemp_value=0;//温度检测AD值

//********************************************变量定义*************************************************************

ucharsecond_temp=0;//秒变量

ucharscan_en=0;//主屏扫描标志位

ucharkey=0;//按键变量

ucharkk=0;//按键按下标志位

ucharauto_return=0;//菜单自动返回变量

ucharreturn_en=0;//菜单自动返回标志位

ucharleft_right=0;//左右键变量

ucharchoose_temp=0;//子菜单标题变量

ucharreturn_temp=0;//返回临时变量

ucharset_time_temp=0;//设置时间时菜单变量,如果=1表示屏显在设置时间菜单

uchartwinkling_addr=0x91;//设置时间时闪动显示位置变量

ucharinc_card_en=0;//添加新卡允许变量

ucharmanage_card_inc_en=0;//管理卡

ucharcold=0;//温度正负极标志位

uchartemp0=0;//温度值变量

ucharxx=88;//温度更新变量,开机赋一个比较大的数,目的是开机就显示温度

ucharclose_read=0;

lcd_back_en=0;//LCD背光计时变量允许

lcd_back_time=0;//LCD背光计时变量

//*****************************************************************************************************************

voiddelay_ms(unsignedintm);//延时

voidread_adc(void);//按键ADC处理

voiddate_time_display(void);//时间日期显示

voidroot_directory(void);//引导主画面

voidset_menu(void);//设置菜单

voidclear_screen(void);//清屏

voidclear_gdram(void);//清全部GDRAM

voidselect_menu(uchardata1);//选择菜单时,标志

voidtime_set_display(void);//时间、日期设置显示

uintadc_sampling(ucharadc_input);//ADC采样

ucharget_degree(void);//温度查表

uchartemperature_check(void);//室温检测

ucharcharge_tem=0;//每十分钟,检测一次电池电量,此变量主要是计时

uintbattery_temp=0;//电平电压变量

//************************************************函数声明区***************************************************

voidmain_menu_initial(void);//主菜单初始化

voidalarm_menu_initial(void);//报警菜单初始化

voidinfrared_menu_initial(void);

voidlamp_menu_initial(void);

voidmenu_initial(void);

voidcard_main_menu_initial(void);

voidcard_inc_menu_initial(void);

voidcard_dec_menu_initial(void);

voidshow_menu(void);

voiddate_time_set(void);

voidalarm_set(void);

voidinfrared_set(void);

voidlamp_set(void);

voidnullsubs(void);

voidtwinkling_addr_pro(void);

voidlcd_week_pro(void);

voidkey_inc_dec(void);

voidlcd_menu_set(void);

voidcard_pro(void);

voidbuzzer_pro(ucharp);

//*****************************************************************************************************************

voidinc_new_card(void);//添加新卡的处理函数

voidquery_card(void);//查询卡函数

voidsave_card(void);//保存卡时处理函数

voidno_save_card(void);//取消保存卡时处理函数

voidclear_card(void);//删除全部卡

voidno_clear_card(void);//取消删除卡

voidcard_menu_show(void);//管理卡菜单显示

voidcard_menu_pro(void);//管理卡菜单处理

voidchar_twinkling(uchardata_1);//字符消隐

//*****************************************************************************************************************

voideeprom_write(uinteeprom_address,uchareeprom_data);//写----EEPROM操作

uchareeprom_read(uinteeprom_address);//读----EEPROM操作

//*************************************************主程序**********************************************************

voidmain(void)

{

PORTA=0XF8;//PA0---按键AD;PA1---室内温度AD;PA2---电平电量检测

PORTB=0XFF;

PORTC=0XFF;

PORTD=0XFF;

DDRA=0XF8;//AD转换时要设为输入、且端口要清0

DDRB=0XFF;

DDRC=0b11111000;

DDRD=0b11110010;//INT0、INT1、RXD设成输入;TXD设成输出

TIMSK=(1<

TCCR1A=0;

TCCR1B=0X0D;//CTC模式,1024分频

OCR1A=7200;//定时1S

GICR=(1<

MCUCR=(1<

ADCSRA=(1<

WDTCR=0x0f;//(1<

write_com(0x01);//清除显示,并且设定地址指针为00H

menu_initial();//菜单数组初始化

send_initial();//串口初始化

WDR();//喂狗

card_pro();//读EEPROM,到RAM中

lcd_reset();//LCD初始化

write_com(0x90);

buzzer_on;

LCD_BACK_ON;//打开LCD背光

han_zi_display("系统正在启动");

write_com(0x88);

han_zi_display("请稍后......");

delay_ms(500);

clear_gdram();//清除GDRAM--绘图RAM

clear_screen();//清屏

buzzer_off;//峰鸣器指示

lcd_back_en=0xaa;//打开计时变量

lcd_back_time=0;//计时变量清0

SEI();//使能全局中断

while

(1)

{

WDR();//喂狗

if(scan_en==0)//只有在scan_en=0的时候扫描主屏,平时只更新时间

{

scan_en=~scan_en;

clear_screen();

temp0=temperature_check();//温度检测

root_directory();

}

if(second_temp!

=tem[5])//每秒钟扫描一次

{

second_temp=tem[5];

date_time_display();

}

if(close_read==1)

{

if(xx>=5)

{

xx=0;

close_read=0;

second_temp=0;

GICR=((1<

}

}

if(kk)//=1表示有按键按下

{

kk=0;

read_adc();//AD转换,取得键值

buzzer_pro

(1);//峰鸣器指示

LCD_BACK_ON;//打开LCD背光

lcd_back_en=0xaa;//打开计时变量

lcd_back_time=0;//计时变量清0

if(key==1)

{

GICR&=~(1<

lcd_menu_set();//LCD菜单设置

GICR=((1<

}

elseif(key==8)

{

GICR&=~((1<

key=0;

clear_screen();//清屏

write_com(0x80);

han_zi_display("警告");

write_com(0x88);

han_zi_display("版权归于军峰所有");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1