门禁源代码Word格式.docx

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

门禁源代码Word格式.docx

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

门禁源代码Word格式.docx

ATmega16

晶振频率:

7.3728MHZ

版本:

V0.1

编程:

于军峰

编译日期:

2007-05-01

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

#include<

iom16v.h>

macros.h>

stdio.h>

#include"

LCD_12864.H"

//LCD头文件

read_card.H"

//读卡头文件

#definekey_inc(PINC&

(1<

<

PC0))//按键,选择日期、时间时用

#definekey_dec(PINC&

PC1))//按键-,选择日期、时间时用

#defineBAUDRATE9600//波特率

#defineF_CPU7372800//晶振频率

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

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

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

#defineADC_PINA10x01//ADC1温度采样

#defineADC_PINA20x02//ADC2电平电量检测

#defineLCD_BACK_ONPORTC&

=~(1<

PC5)

#defineLCD_BACK_OFFPORTC|=(1<

#definebuzzer_onPORTD&

PD7)

#definebuzzer_offPORTD|=(1<

#definecharge_onPORTC&

PC6)

#definecharge_offPORTC|=(1<

 

#defineLOCK_ONPORTC&

PC3)

#defineLOCK_OFFPORTC|=(1<

#defineCHARGE_STATUS(PINC&

PC2))

#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,

};

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

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<

OCIE1A);

//输出比较A匹配中断使能

TCCR1A=0;

TCCR1B=0X0D;

//CTC模式,1024分频

OCR1A=7200;

//定时1S

GICR=(1<

INT1)|(1<

INT0);

//打开外部中断0、1

MCUCR=(1<

ISC00);

//INT0引脚上任意的逻辑电平变化都将引发中断

ADCSRA=(1<

ADEN)|0x06;

//使能ADC,时钟64分频125KHz@8MHzsystemclock

WDTCR=0x0f;

//(1<

WDE)|(1<

WDP2)|(1<

WDP1);

//打开看门狗,溢出时间为2.1S

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);

请稍后......"

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<

INT0));

//开外部中断0、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&

//关闭读卡外部中断0

lcd_menu_set();

//LCD菜单设置

elseif(key==8)

=~((1<

//关闭部中断0、1

key=0;

clear_screen();

//清屏

write_com(0x80);

han_zi_display("

警告"

write_com(0x88);

版权归于军峰所有"

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

当前位置:首页 > 成人教育 > 自考

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

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