门禁系统论文(7)

2019-04-16 15:51

北京化工大学北方学院毕业设计(论文)

当程序运行时,会一直判断是否有按键被按下,当有按键被按下时,系统会确定键值,关将键值存入到密码数组里,然后将输入的密码与本身的密码做比较,若相同,则执行开门和显示正确信息的操作;若不相同,则执行报警和显示错误信息的操作

[16][17]

密码子程序核心程序代码如下所示:

P1=0x0f;

if(P1!=0x0f) compare(P1); for(n=0;n<10;n++)

if(input[n]!=password[n]) break; if(n==10)

{ if(m<10) continue; WriteLcdCom(0x01);

//清屏

WriteLcdCom(0x80); //第一行数据指针地址 for(s=0;s<16;s++) WriteLcdDat(str2[s]); LEDG=0; BUZ=0;

delay_10ms(20); LEDG=1; BUZ=1;

WriteLcdCom(0x01);

input[0]=\ \ } else if((n<10)&&(P1==0xbd)) { WriteLcdCom(0x01);

//清屏

WriteLcdCom(0x80); //第一行数据指针地址 for(s=0;s<16;s++)

WriteLcdDat(str4[s]); LEDR=0;

for(s=0;s<5;s++) { BUZ=0;

27

北京化工大学北方学院毕业设计(论文)

delay_10ms(20); BUZ=1;

delay_10ms(20); } LEDR=1; }

4.3.2数据采集子程序

执行程序之前,首先要设置串口波特率等相关串口参数,然后上位机通过串口向下位机发送命令,并进入串口中断。下位机根据接收SBUF的值做相应的处理。

数据采集子程序核心程序代码如下所示: uchar uart_process(void) {uchar cmd; uchar cstatus; cmd = g_crecebuf[1]; switch(cmd)

{case 0x20: // 寻卡,防冲突,选择卡返回卡系列号(4 bytes) cstatus =IicSendHY502(g_cReceBuf); // 发送寻卡命令 cstatus =IicReadHY502(cp);

// 读取卡号并存入到cP

if((cstatus==SUCCESS)&&(cp[1]==CARD_SN)) {memcpy(&g_crecebuf[0],&cp[2],4);

eeprom();}}//将读取到的卡序列号与E2PROM里存储的进行比较 return cstatus;}

4.3.3显示子程序

显示子程序的主要功能是对当前的门控状态进行显示,显示函数首先判断是写命令操作还是写数据操作,若是写命令操作,则根据命令进行相应的操作,如清屏、设置显示模式等;若是写数据操作,则在显示器上显示相应数据。

显示程序核心程序代码如下所示: void LcdShowError()

{ WriteLcdCom(0x38); //显示模式设置

WriteLcdCom(0x0c); //开显示,无光标,光标不闪烁 WriteLcdCom(0x06); //读写字符后地址指针加一设置

28

北京化工大学北方学院毕业设计(论文)

WriteLcdCom(0x80); //第一行数据指针地址 for(k=0;k<16;k++) {WriteLcdDat(str3[k]); delay(20); }

WriteLcdCom(0xc0); //第二行数据指针地址 for(k=0;k<16;k++) { WriteLcdDat(str4[k]); delay(20);}

WriteLcdCom(0x01); } void WriteLcdCom(unsigned char c) { LCDRW =00; LCDRS=0; P0=c; LCDE=1; LCDE=0; for(a=0;a<20;a++);}

void WriteLcdDat(unsigned char d) { LCDRW =00; LCDRS=1; P0=d; LCDE=1; LCDE=0;

for(a=0;a<20;a++);}

//切换到写数据

//切换到写命令

4.3.4存储子程序

本设计中数据的存储芯片选用的是AT24C04,该芯片是串行的E2PROM,支持I2C总线数据传送协议。

存储程序核心程序代码如下所示: void eeprom() {write_byte(0,0x1e);

write_byte(1,0xda); write_byte(2,0x62); write_byte(3,0xb6);

29

北京化工大学北方学院毕业设计(论文)

write_byte(4,0x25); write_byte(5,0xee); write_byte(6,0xde); write_byte(7,0xb6); write_byte(8,0x05); write_byte(9,0xc8); write_byte(10,0x43);write_byte(11,0xb8);write_byte(12,0x3a); write_byte(13,0x04);write_byte(14,0x5d);write_byte(15,0xb6);} bit shout(uchar write_data)// 从MCU移出数据到AT24C04 {uchar i; bit ack_bit;

for(i = 0; i < 8; i++) // 循环移入8个位 {SDA1 = (bit)(write_data & 0x80); _nop_(); SCL1 = 1; delayNOP(); SCL1 = 0;

write_data <<= 1; }

SDA1 = 1; // 读取应答 delayNOP(); SCL1 = 1; delayNOP(); ack_bit = SDA1; SCL1 = 0;

return ack_bit; // 返回AT24C04应答位 }

void write_byte(uchar addr, uchar write_data) // 在指定地址addr

处写入数据write_data

{start();

shout(OP_WRITE); shout(addr); shout(write_data); stop();

delay_10ms(1); }

4.3.5模块子程序编译调试

30

北京化工大学北方学院毕业设计(论文)

Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各个仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(UVision)将这些部分组合在一起,本文中调试用的是Keil UVision2版本。

(1)建立工程项目

运行Keil UVision2程序后,点击Project->New Project菜单,输入工程名称,这里为RC500.uv2,在弹出的对话框中选择目标CPU(即你所用的CPU型号),Keil支持的芯片很多,这里我们选择Atmel公司的AT89C52芯片,确定后可以发现工程窗口出现“Target1” 和下一层“Source group1”的文件层次,我们只要Source group1下添加我们编写的程序[16][17][18]。见图4.3。

图4.3 建立工程RC500

(2)子程序的编译

31


门禁系统论文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Python 解析配置模块之ConfigParser详解文档

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: