《智能门禁系统(1).doc》由会员分享,可在线阅读,更多相关《智能门禁系统(1).doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、智能门禁系统 QQ:820897443 智能门禁系统实训报告姓名:戚振勇、王丹丹、翟欣欣、何西涛、刘裕鹏学号:201032010116、201032010121、201032010129、201032010105、201032010114班级:10级应用电子一班指导老师:金桂梅2012年6月目 录一、 摘要3二、 总体设计方案4.2.1 硬件方案42.2 软件方案5三、 硬件模块设计53.1 单片机最小系统.53.2 语音芯片模块73.3 声光信号处理模块93.4 红外信号处理电路9四、 程序设计 10 4.1 ISD4002-120P录音程序.104.2 项目综合C语言程序10.五、 系统测
2、试与结论 11六、 参考文献11.七、 附录12附录1:ISD4002-120P录音程序12附录2:项目综合C语言程序23 一、摘要 智能门禁系统以STC89C52单片机为控制核心,采用热释电传感器,利用压电陶瓷将温度变化转换为电压输出的变化,并将其结果送入到12864液晶显示屏显示,并控制ISD4002-120P语音芯片播报当前状态。并利用DS1307时钟芯片 本项目主要以学习使用单片机控制热释电传感器和ISD4002系列语音芯片、DS1307时钟芯片以及12864点阵液晶模块来实现不同功能为目的。通过热释电传感器以及光敏二极管来将温度、声音、光这些模拟量直接转换成数字信号送至STC89C5
3、2单片机进行处理。语音芯片接收单片机处理后的数据后,进行处理转化为模拟量传给扬声器,读出数据。系统设计框图如下:STC89C5224C0212864ISD4002报警灯电路DS1307矩阵按键电路功率放大电路红外感应电路声音感应电路光线感应电路系统设计框图二、总体设计方案2.1 硬件连接方案 产品的主要特色是体现语音功能和红外感应,本意是制作智能门禁系统,来解决无人看守时,外人进入的问题,但由于红外感应需要单独电源供电,存在一定干扰的问题,感应灵敏度不够。但是对于方案的总体进行并无太大影响,所以仍然使用该方案。在硬件连接方面,我们没有焊成一个成品,而是用导线将各模块连接起来,主要是基于下面考虑
4、,本次实训项目主要是促使同学们学习相关专业知识,而非设计某种产品,既然实现了既定目标,就不必连接在一起,避免浪费。各个模块在拆开后还可以多次应用,便于学习。语音模块采用了ISD4002-120P,录放时间长达120秒,足以满足我们的需要。该芯片对我们学习电路的时序很有帮助。2.2 软件设计方案由单片机将各部分电路的信号进行处理,并将处理好的数字信号传送给12864液晶显示芯片,驱动液晶显示屏的动态显示,ISD4002语音芯片则将数据处理并通过功放电路进行语音播报。使用C52语言进行编程三、硬件模块设计3.1 STC89C52单片机 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有
5、8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切
6、工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。单片机最小系统3.2 ISD4002-120P语音芯片ISD4002系列工作电压3V,单片录放时间2分钟至四分钟,音质好,适用于移动电话及其他便携式电子产品中。操作指令可通过串行通信接口(SPI或Microwire)送入。能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。采样频率可为4.0,5.3,6.4,8.0Hz,频率越低,录放时间越长,而音质有所下降,片内信息存于闪烁存贮器中,可在断电的情况下保存100年反复录音10万次。ISD4002120P设
7、计电路图:录音模块电路设计图:3.3 声光信号处理模块3.4 红外信号处理电路红外信号处理电路采用红外热释电处理芯片BISS0001,它是一款高性能的传感信号处理集成电路。静态电流小,配以热释电红外传感器和少量外围元器件即可构成被动式的热释电红外传感器。广泛应用与安防、自控等领域。其主要特点如下:1、CMOS工艺2、数模混合3、具有独立的高输入阻抗运算放大器4、内部的双向鉴幅器可有效抑制干扰5、内设延迟时间定时器和封锁时间定时器6、采用16脚DIP封装红外信号处理电路图:四、程序设计4.1 ISD4002-120P录音程序见附录14.2 项目综合C语言程序 见附录2五、系统测试与结论由于开始我
8、们的经验相对缺乏,所以调试用了较多时间。主要研究语音芯片的的使用。调试时,软件部分问题不大,但由于硬件热释电部分的电源出现干扰的问题,导致热释电传感器的感应不太精确。在查阅了大量资料后,经过仔细调试,最终克服了这个问题。但可能是因为软件部分过多而导致“欢迎光临”只能出现“光临”两个字的问题。不过经过最终的努力,所有的部分均能正常工作,我们的作品基本符合我们的预期。六、参考文献 【1】新概念51单片机C语言教程.入门、提高、开发郭天祥著【2】AVR单片机嵌入式系统原理与应用实践马潮著【3】 网友文章玩转12864液晶【4】智能语音数字温度计技术报告七、附录附录1:ISD4002-120P录音程序
9、#includesbit SS = P10; /片 选 sbit SCLK = P11; /ISD4003时 钟 sbit MOSI = P12; /数 据输入 sbit MISO = P13; /数 据输出 sbit LED = P17; /指 示 灯 sbit ISD_INT= P32; /中 断 sbit AN = P16; /执 行 sbit STOP = P15; /复 位 sbit PR = P14; /PR=1录 音? PR=0放 音 unsigned char count1=0,count2=0; void delay(unsigned int time) /延 迟n微 秒 w
10、hile(time!=0) time- ; void delayms(unsigned int time) /延 迟 n毫 秒 TMOD=0x01; for(time;time0;time-) TH0=0xfc; TL0=0x18; TR0=1; while(TF0!=1); TF0=0; TR0=0; /* /ISD4002 spi串 行 发 送 子 程 序 ,8位数据 /* void spi_send(unsigned char isdx) unsigned char isx_counter; SS=0; /ss=0,打 开 spi通信端 SCLK=0; for(isx_counter=0
11、;isx_counter1; SCLK=1; delay(2); SCLK=0; delay(2); /* /发 送 stop指 令 /* void isd_stop(void) delay(10); spi_send(0x30); SS=1; delayms(50); /* / 发 送 上 电指令 , 并 延 迟 50ms /* void isd_pu(void) delay(10); SS=0; spi_send(0x20); SS=1; delayms(50); /* / 发 送 掉 电指令 , 并 延 迟 50ms /* void isd_pd(void) delay(10); spi
12、_send(0x10); SS=1; delayms(50); /* /发 送play指 令 /* void isd_play(void) LED=0; spi_send(0xf0); SS=1; /* /发 送 rec指 令 /* void isd_rec(void) LED=0; spi_send(0xb0); SS=1; /* /发 送 setplay指 令 /* void isd_setplay(unsigned char adl,unsigned char adh) spi_send(adl); /发 送 放 音起始 地 址 低 位 adh=adh|0xe0; spi_send(ad
13、h); /发 送 放音起 始 地 址 高 位 SS=1; /* /发 送 setrec指 令 /* void isd_setrec(unsigned char adl,unsigned char adh) spi_send(adl); /发 送 放 音起始 地 址 低 位 adh=adh|0xa0; spi_send(adh); /发 送 放音起 始 地 址 高 位 SS=1; /* /芯 片 溢 出 ,LED闪 烁 提 醒 停 止 录 音 /* void isd_overflow(void) while(AN=0) LED=1; delayms(300); LED=0; delayms(30
14、0); /* /检 查 芯 片是否 溢 出(读 O VF,并 返 回 OVF值) /* unsigned char chk_isdovf(void) SS=0; delay(2); SCLK=0; delay(2); SCLK=1; SCLK=0; delay(2); if (MISO=1) SCLK=0; SS =1; / 关 闭 spi 通 信 端 isd_stop(); /发 送 stop指 令 return 1; /OVF 为 1 , 返 回 1 else SCLK=0; SS =1; / 关 闭 spi 通 信 端 isd_stop(); /发 送 stop指 令 return 0;
15、 /OVF 为 0 , 返 回 0 /*void main(void) unsigned char ovflog; while(1) P0=P1=P2=P3=0xff; /初始化 while (AN=1) /等 待 A N键 按 下 if (AN=0) /按 键 防 抖 动 delayms(20); isd_pu(); / A N键 按 下 ,ISD上 电并延 迟 50ms isd_pd(); isd_pu(); if (PR=1) /如 果 PR=1则转 入 录 音 部 分 delayms(500); /延 迟 录 音 isd_setrec(0x00,0x00); /发 送 0x0000h地
16、 址 的 setplay指 令 do isd_setrec(0x00+16*count1,0x00); count1+; isd_rec(); /发 送 rec指 令 delay(20); while(AN=0) /等 待 录音完 毕 if (ISD_INT=0) / 如 果芯片 溢 出 , 进 行 LED 闪 烁 /提 示 , isd_overflow(); /如 果 取消录 音 ( 松 开 A N键 ) /则 停 止 录 音 , 芯 片 复 位 if (ISD_INT=0) break; LED=1; /录音 完 毕 ,LED熄 灭 isd_stop(); / 发 送 停 止 命 令 wh
17、ile(AN=1) /如 果 A N再 次 按 下 , 开 始 录 制 下 一 /段 语 音 if(STOP=0) / 如 果 按 下STOP按 键 , 则 芯 片 复 位 break; if (AN=0) delayms(500); while(AN=0); else /如 果 PR=0则 转入放 音 部 分 while(AN=0); isd_setplay(0x00,0x00); /发 送 setplay指令 , 从 0x0000地 /址 开 始放音 do isd_setplay(0x00+16*count2,0x00); count2+; isd_play(); /发 送 放 音 指 令
18、 delay(20); while(ISD_INT=1); /等待放音完毕的EOM中断信号 LED=1; isd_stop(); /放 音 完 毕 , 发 送 stop指 令 if (ovflog=chk_isdovf() /检查芯片是否溢出,如溢出则停止/放音,芯片复位 break; while(AN=1) /等 待 A N键 再 次 按 下 if (STOP=0) delayms(20); if (STOP=0) break; if(AN=0) delayms(20); LED=0; while(AN=0); / A N 键 再 次 按 下 , 播 放 下 一 段 语 音 isd_stop
19、(); isd_pd(); 附录2:项目综合C语言程序#include#define uchar unsigned char#define uint unsigned intsbit lcd_en=P22;sbit lcd_rw=P21;sbit lcd_rs=P20;sbit lcd_psb=P23;sbit lcd_beiguang=P24;/液晶背光sbit ss=P30;sbit sclk=P31;sbit mosi=P32;sbit miso=P33;sbit isd_int=P34;sbit beep=P35;/蜂鸣器sbit hongwai=P27;/热释电传感器sbit gua
20、ngmin=P26;/光敏电阻传感器sbit sheng=P25;/声敏元件uchar miao1,eat,keya,keyf,aa,bb,cc,dd,ee,ff;int miao2;uchar code table=0123456789;uchar dis1=请输入密码;uchar dis2=身份确认!;uchar dis3=密码错误!;uchar code dis4=欢迎光临;uchar code dis5=欢迎使用振勇电子;uchar code dis6=已上锁;uchar code dis7=夜间上锁模式;uchar code dis8=白天上锁模式;uchar code dis9=请
21、注意 ;uchar code dis10=初始化中 %;uchar code dis11=初始化完成已上锁;uchar code dis12=时间;void delay_ms(uint z)uint i,j;for(i=z;i0;i-)for(j=121;j0;j-);void delay(uint z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delayms(uchar x)uchar i,j;for(i=x;i0;i-)for(j=121;j0;j-); void spi_send(uchar isdx) /串行发送子程序uchar i;s
22、s=0;sclk=0;for(i=0;i1;sclk=1;delay(2);sclk=0;delay(2);void isd_setplay(uchar adl,uchar adh)/发送STEPLAY指令spi_send(adl);adh=adh|0xe0;spi_send(adh);ss=1;void isd_play()/发送PLAY指令ss=0;spi_send(0xf0);ss=1;void write_com(uchar com)lcd_en=0;lcd_rw=0;lcd_rs=0;P0=com;delay_ms(3);lcd_en=1;delay_ms(3);lcd_en=0;v
23、oid write_dat(uchar dat)lcd_en=0;lcd_rs=1;lcd_rw=0;P0=dat;delay_ms(3);lcd_en=1;delay_ms(3);lcd_en=0;void lcd_init()lcd_psb=1;write_com(0x30);delay_ms(3);write_com(0x0c);delay_ms(3);write_com(0x01); delay_ms(3);void baojing()uchar j;lcd_init();write_com(0x93);write_dat(b);for(j=0;j3;j+)isd_setplay(0x
24、40,0x00);isd_play();delayms(200);while(isd_int=1);delay_ms(500);void panduan()uchar i,j,u;if(aa=1&bb=2&cc=3&dd=4&ee=5&ff=6)lcd_init();u=0;/计数器清零write_com(0x92);keya=0;for(i=0;i11;i+)write_dat(dis2i);isd_setplay(0x30,0x00);isd_play();delayms(200);while(isd_int=1);eat=2;/开锁状态elselcd_init();write_com(0
25、x92);for(i=0;i10;i+)write_dat(dis3i);isd_setplay(0x20,0x00);isd_play();delayms(200);while(isd_int=1);delay_ms(100);lcd_init();keya=0;write_com(0x80);for(j=0;j2)u=0;baojing(); void keyscan2()uchar i;P1=0xf7;i=P1&0xf0;if(i!=0xf0)while(P1&0xf0)!=0xf0);switch(i)case 0xb0:keyf=1;break;case 0xd0:keyf=2;br
26、eak;case 0xe0:keyf=3;break;P1=0xfb;i=P1&0xf0;if(i!=0xf0)while(P1&0xf0)!=0xf0);switch(i)case 0xb0:keyf=4;break;case 0xd0:keyf=5;break;case 0xe0:keyf=6;break;P1=0xfd;i=P1&0xf0;if(i!=0xf0)while(P1&0xf0)!=0xf0);switch(i)case 0xb0:keyf=7;break;case 0xd0:keyf=8;break;case 0xe0:keyf=9;break;P1=0xfe;i=P1&0x
27、f0;if(i!=0xf0)while(P1&0xf0)!=0xf0);switch(i)case 0xb0:keyf=10;break;case 0xd0:keyf=0;break;case 0xe0:keyf=11;break;if(keyf!=11)write_com(0x91+keya);write_dat(*);keya+;if(keya6)keya=0;if(keyf=11)panduan();miao2=5;switch(keya)case 1:aa=keyf;break;case 2:bb=keyf;break;case 3:cc=keyf;break;case 4:dd=ke
28、yf;break;case 5:ee=keyf;break;case 6:ff=keyf;break;void keyscan()P1=0xf0;if(P1!=0xf0)delay_ms(10);if(P1!=0xf0)keyscan2();void jiancha1() /开锁检查有人否 uchar i,con;if(hongwai=0)con+;if(con=20)con=0;if(hongwai=0)write_com(0x01);delay_ms(3);write_com(0x90);while(dis4i!=0)write_dat(dis4i);i+;i=0;beep=0;delay
29、_ms(1000);write_com(0x01);delay_ms(3);write_com(0x90);while(dis12i!=0)write_dat(dis12i);i+;i=0;beep=1; void jiancha2()/上锁检查有人 天黑uchar i,con,son;if(hongwai=0)con+;if(con=20)con=0;eat=0;if(guangmin=0)son+;if(son=20)son=0;beep=0;i=0;write_com(0x01);write_com(0x80);while(dis7i!=0)write_dat(dis7i);i+;del
30、ay_ms(1000);i=0;eat=0x03;/夜间上锁模式lcd_beiguang=0; beep=1;delay_ms(2000);jiancha3()/夜间上锁检查有人、天亮、有声uchar i,son,con;if(guangmin=1)delay_ms(10);if(guangmin=1)beep=0;i=0;write_com(0x01);write_com(0x80);while(dis8i!=0)write_dat(dis8i);i+;i=0;eat=0x04;lcd_beiguang=1;beep=1;if(hongwai=0)con+;if(con=20)con=0;i
31、f(hongwai=0)lcd_beiguang=1;eat=0;if(sheng=0)son+;if(son=20)son=0;if(sheng=0)i=0;lcd_beiguang=1;write_com(0x90);while(dis9i!=0)write_dat(dis9i);i+;i=0;eat=0x05;/蜂鸣器报警5秒void fengmingqi()uchar i;for(i=40;i0;i-)beep=beep;delay_ms(100);write_com(0x01);write_com(0x80);i=0; while(dis8i!=0)write_dat(dis8i);
32、i+;i=0;beep=1;lcd_beiguang=1;delay_ms(500);eat=0x04;void main()uchar i,j;lcd_init();TMOD=0x01;TH0=(65535-5000)/256;TL0=(65535-5000)%256;EA=1;ET0=1;TR0=1;write_com(0x90); /欢迎使用振勇电子while(dis5i!=0)write_dat(dis5i);i+;i=0;delay_ms(1000);i=0;isd_setplay(0x00,0x00);isd_play();delayms(200);while(isd_int=1);write_com(0x88)