电子密码锁单片机设计完整程序电路.doc

上传人:飞****2 文档编号:60145682 上传时间:2022-11-13 格式:DOC 页数:31 大小:1.95MB
返回 下载 相关 举报
电子密码锁单片机设计完整程序电路.doc_第1页
第1页 / 共31页
电子密码锁单片机设计完整程序电路.doc_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《电子密码锁单片机设计完整程序电路.doc》由会员分享,可在线阅读,更多相关《电子密码锁单片机设计完整程序电路.doc(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机课程设计1 系统的总体设计和主要元器件介绍(1)设计要求 以STC89C516单片机为核心器件,结合按键电路、LCD1602显示电路、报警指示电路和开锁机构,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性通过软件程序来控制整个系统实现电子密码锁的以下基本功能: (1)输入密码时显示所输入“*”,具有一定防偷看功能。 (2)密码通过键盘输入,若密码正确,则显示灯发光,将锁打开 (3)密码输入错误,蜂鸣器将报警提示。密码输错四次,则蜂鸣器报警15秒,显示灯亮。 (4)用户可以自由设定密码 本密码锁具有设计方法合理,简单易行成本低,安全实用等特点,具有一定的推广价值。(2)系统的

2、总体思路设计以STC89C516单片机为主控制单元,键盘为主要输入单元,结合开锁装置、报警器和显示器完成整个系统设计。 系统的运行过程大致如下: 假设初始状态为闭锁,此时整个系统只等待按键输入,显示屏显示“Input password Press key A”。按下A后,每按下一个数据键(即每输入一个密码),lcd1602显示一个“*”,当密码全部输入完成后,需按下确认键“#”,此时系统判断密码是否正确,正确则开锁,错误则报警。若按下密码重置键“*”,则需先输入原密码,正确后请输入新密码,还要确认一遍新密码。按下删除键可以删除输错的密码。(3)主要元器件介绍1、stc89C52介绍图一 stc

3、89C52引脚图本次课程设计选用的是AT89C52,AT89C52是一种带8K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器。AT89C52单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。振荡器特性: XTA

4、L1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。(2)LCD1602显示器接口信号说明:1602型LCD的接口信号说明如表2-2所示。表2-2 LCD1602接口信号说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数

5、据15BLA背光源正极8D1数据16BLK背光源负极1602型LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm1602型LCD基本操作程序如下表所示:表2-3 LCD1602基本操作程序读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无(3) AT24C02 1. 概述AT24C02是一

6、个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 2. 管脚配置管脚封装如右图1所示。 图1 管脚封装 DIP:双列直插式封装,是最简单的一种封装技术。 3. 极限参数工作温度工业级-55 +125 商业级0 +75 贮存温度-65 +150 各管脚承受电压-2.0 Vcc+2.0V Vcc管脚承受电压-2.0 +7.0V 封装功率损耗(Ta=25) 1.0W 焊接温度(10 秒) 300 输出短路电流100mA 表1

7、可靠性参数 符号 参数 最小 最大 单位 参考测试模式 NEND 耐久性 1,000,000 周期/字节 MIL-STD-883 测试方法1033 TDR 数据保存时间 100 年 MIL-STD-883 测试方法1008 VZAP ESD 2000 V MIL-STD-883 测试方法3015 ILTH 上拉电流 100 mA JEDEC 标准17 4.特性:1.数据线上的看门狗定时器 2.可编程复位门栏电平 3.高数据传送速率为400KHz和1C总线兼容 4.2.7V至7V的工作电压 5.低功耗CMOS工艺 6.16字节页写缓冲区 7.片内防误擦除写保护 8.高低电平复位信号输出 9.10

8、0万次擦写周期 10.数据保存可达100年 11.商业级、工业级和汽车温度范围 5. 功能描述AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。 6. 管脚描述表2 管脚描述 管脚名称 功能 A0 A1 A2 器件地址选择 SDA 串行数据/地址 SCL 串行时钟 WP 写保护 Vcc +1.

9、8V 6.0V 工作电压 Vss 地 SCL 串行时钟 AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。 SDA 串行数据/地址 AT24C02 双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR)。 A0、A1、A2 器件地址输入端 这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。当使用AT24C02 时最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2 )可悬空或连接到Vss,如果只有一个AT24C02被总

10、线寻址这三个地址输入脚(A0、A1、A2 )必须连接到Vss。 WP 写保护 如果WP管脚连接到Vcc,所有的内容都被写保护只能读。当WP管脚连接到Vss 或悬空允许器件进行正常的读/写操作2、 硬件电路设计(1) 设计原理本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与AT24C02中保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,

11、当然也可以用继电器的常开触点去控制电磁铁吸合线圈。stc89C52键盘输入复位电路AT24C02密码存储电路晶振电路电源输入显示电路报警电路开锁电路图二(2) 电路总体构成图三(3) 单片机主控制模块(含晶振、复位基本工作电路)图四(4)键盘电路设计按键模块采用44行列矩阵结构,由4条行线和4条列线构成。行线和列线共有16个交叉点每个交叉点可以放置一个按键,这样共可以放置16个按键。按键电路如图五所示。图五KEYL0KEYL3为行线,分别接单片机的P1.0P1.3;KEYR0KEYR3为列线,分别接单片机的P1.4P1.7。软件编程采用行扫描法,程序编写比较复杂,但是理解较容易切。图中顺序前十

12、个按键为09,最后3个按键分别为修改密码键、确认键和关机键。(5)显示电路设计显示电路由LCD1602构成。其结构图如图六所示。图六(6) 报警电路设计报警电路主要由PNP三极管和蜂鸣器构成。报警电路图如图七所示。图七LS1为一个5V的压电蜂鸣器,当对其1、2号引脚施加5V电压时,便会鸣叫。由图七可知,当P3.7输出低电平时蜂鸣器鸣叫;当P3.7输出高电平时,蜂鸣器停止鸣叫。通过控制P3.7输出低电平的时间长短来控制蜂鸣器长叫或短叫。(7) 电子锁控制电路电子锁控制电路主要由继电器、三极管和发光二极管构成。电子锁控制电路图如图5所示。图八继电器线圈的一个引脚接电源正极,另一端接NPN三极管的集

13、电极。三极管的基极通过一个电阻接单片机的引脚。当LOCKCON输出高电平时,三极管导通,继电器线圈得电,触点闭合,发光二极管发光,相当于电子锁闭锁;当LOCKCON输出低电平时,三极管截止,继电器线圈失电,触点释放,发光二极管熄灭,相当于电子锁开锁。图中普通二极管是继电器线圈的续流二极管,为感应电动势提供回路,以免损坏三极管。(8) 密码存储电路AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。其电

14、路原理如图九所示。图九图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在AT89S51上它们都能接地,第5脚和第8脚分别为正、负电源。AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取。 图十 本电路中的应用图(9) 复位电路 单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC0000H,使单片机从第个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。在复位期间(即RST为高电平期间),P0口为高组态,P1P3口输

15、出高电平;外部程序存储器读选通信号PSEN无效。地址锁存信号ALE也为高电平。根据实际情况选择如图十所示的复位电路。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C1通过R5放电。当电容C1放电结束后,RST端的电位由R11与R15分压比决定。由于R11R15 因

16、此RST为高电平,CPU处于复位状态,松手后,电容C1充电,RST端电位下降,CPU脱离复位状态。R11的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电 。图十 一复位电路原理图(10) 单片机电路及PCB图单片机电路主要由单片机、振荡电路和复位电路构成。单片机电路图如图十一所示。图十二AT89C52单片机的P0口用于输出LCD显示。P1口用于构成行列矩阵键盘。P3.7用于控制蜂鸣器的鸣叫。P3.3用于控制电子锁的开闭。P3.1 P3.0控制储存芯片的sda、sck。P3.4 控制lcd显示的E P3.5 控制rs P3.6控制rw。 1、 软件设计 软件设计主要是对

17、键盘进行扫描,根据按键控制报警电路、电子锁电路,并将结果显示。因此整个软件分为按键子程序、显示子程序、储存子程序,电子锁控制子程序及主程序。主函数按键子程序unsigned char keyscan()unsigned char temp,key;key = 0xff;JPJK = 0xfe; temp = JPJK;/temp &= 0xf0;/ temp = temp & 0xf0 if(temp != 0xf0)delay_ms(10);temp = JPJK;temp &= 0xf0; if(temp != 0xf0)temp = JPJK;baoj1();switch(temp)ca

18、se 0xee: key = 1;break;case 0xde: key = 2;break;case 0xbe: key = 3;break;case 0x7e: key = 0x0a;break;while(temp != 0xf0)temp = JPJK;temp &= 0xf0;JPJK = 0xfd;temp = JPJK; temp &= 0xf0;/ temp = temp & 0xf0if(temp != 0xf0)delay_ms(10);temp = JPJK;temp &= 0xf0; if(temp != 0xf0)temp = JPJK;baoj1();switch

19、(temp)case 0xed: key = 4;break;case 0xdd: key = 5;break;case 0xbd: key = 6;break;case 0x7d: key = 0x0b;break;while(temp != 0xf0)temp = JPJK;temp &= 0xf0;JPJK = 0xfb; temp = JPJK;temp &= 0xf0;if(temp != 0xf0)delay_ms(10);temp = JPJK;temp &= 0xf0; if(temp != 0xf0)temp = JPJK; baoj1();switch(temp)case

20、0xeb: key = 7;break;case 0xdb: key = 8;break;case 0xbb: key = 9;break;case 0x7b: key = 0x0c;break;while(temp != 0xf0)temp = JPJK;temp &= 0xf0;JPJK = 0xf7;temp = JPJK;temp &= 0xf0temp = temp & 0xf0if(temp != 0xf0)delay_ms(10);temp = JPJK;temp &= 0xf0; if(temp != 0xf0)temp = JPJK;baoj1();switch(temp)c

21、ase 0xe7: key = 0;break;case 0xd7: key = 0x0e;break;case 0xb7: key = 0x0f;break;case 0x77: key = 0x0d;break;while(temp != 0xf0)temp = JPJK;temp &= 0xf0; return key; 显示程序bit lcd_busy() bit result; lcdrs = 0; lcdwr = 1; lcden = 1; _nop_(); _nop_(); result = (bit)(DATA&0x80); lcden = 0; return result;

22、void write_com(unsigned char com) while(lcd_busy(); lcdwr = 0; lcdrs = 0; lcden = 0; DATA = com;delay_ms(5); lcden = 1;delay_ms(5); lcden = 0;void write_data(unsigned char date)while(lcd_busy(); lcdwr = 0; lcdrs = 1; lcden = 0; DATA = date;delay_ms(5); lcden = 1;delay_ms(5); lcden = 0; void write_1_

23、char(unsigned char zifu)write_data(zifu);void write_n_char(unsigned char zifu)unsigned char count;for(count=0; ;count+)write_1_char(zifucount);if(zifucount+1=0)break;void lcd_pos(unsigned char x,unsigned char y) unsigned char pos;if(x = 0)x = 0x80;else if(x = 1)x = 0x80 + 0x40;pos = x + y;write_com(

24、pos);void yjinit() dula = 0; wela = 1; lcden = 0;write_com(0x38); write_com(0x0c);write_com(0x06); write_com(0x01); 存储子程序void delay() ;void i2cinit()SDA = 1;delay();SCL = 1;delay();void start()SDA = 1;SCL = 1;delay();SDA = 0;delay();void stop()SDA = 0;delay();SCL = 1;delay();SDA = 1;delay();void res

25、pons()unsigned char i = 0;SCL = 1;delay();while(SDA = 1 & i 255)i+;SCL = 0;delay();void writebyte(unsigned char date)unsigned char i,temp;temp = date;for(i = 0; i 8; i+)temp = 1;SCL = 0;delay();SDA = CY;delay();SCL = 1;delay();SCL = 0;delay();SDA = 1;delay();unsigned char readbyte()unsigned char i,k

26、;SCL = 0;delay();SDA = 1;for(i = 0; i 8; i+)SCL = 1;delay();k = (k 1) | SDA; SCL = 0;delay();delay();return k;void write_add(unsigned char address,unsigned char date)start();writebyte(0xa0);respons();writebyte(address);respons();writebyte(date);respons();stop();unsigned char read_add(unsigned char a

27、ddress)unsigned char date;start();writebyte(0xa0);respons();writebyte(address);respons();start();writebyte(0xa1);/respons();date = readbyte();stop();return date;void write_n_add(unsigned char * p,unsigned char address,unsigned char n)unsigned char i;for(i = 0; i n; i+)write_add(address + i),*(p + i)

28、;delay_ms(30);void read_n_add(unsigned char * p,unsigned char address,unsigned char n)unsigned char i;for(i = 0; i n; i+)*(p + i) = read_add(address + i);密码处理及主函数bit mimaduibi(unsigned char *string1,unsigned char *string2)unsigned char count;for(count = 0; count 6; count+)if(string1count != string2c

29、ount)return 0;return 1;unsigned char step_choose(void)uchar key;key = 0xff;write_com(0x06);write_com(0x01);lcd_pos(0,0);write_n_char( Input password );lcd_pos(1,0);write_n_char( Press key A );while(key != A) & (key != B)key = keyscan();return key;bit input_mima(uchar * mima)unsigned char count,key;l

30、cd_pos(1,0);for(count = 0; count 7; count+)delay_ms(100);if(count 0) lcd_pos(1,-count);write_data( );mimacount = lcd_pos(1,count);count-;if(key = enter)lcd_pos(0,0);return(0);if(key = clear) if(count 0)count=0;write_com(0x01);write_com(0x0f); lcd_pos(0,0); write_n_char( press password );lcd_pos(1,co

31、unt);count-; if(count=6)dokey = keyscan();while(key != backspace)&(key != enter);if(key = backspace)lcd_pos(1,-count);write_data( );mimacount= ;lcd_pos(1,count);count-;if(key = enter)return(1);void baoj1()int i;for(i = 0;i 10; i+)baojing = 0;delay_ms(6);baojing = 1;delay_ms(6);void baoj()uchar i;for

32、(i = 0; i 10; i+)baoj1();void baoj2()uchar i;for(i = 0; i 20; i+)baoj1();void mimachuli() uchar key,i;uchar idata mima_16= , , , , , ;uchar idata mima_26= , , , , , ;uchar idata mima_36= , , , , , ;key = step_choose();if(key = A)read_n_add(mima_1,0x00,6);write_com(0x06);write_com(0x01);write_com(0x0

33、f);lcd_pos(0,0);write_n_char( press password );if(input_mima(mima_2)if(mimaduibi(mima_2,mima_1) lcd_pos(0,0);write_com(0x0c); write_com(0x06); write_com(0x01);write_n_char( Password right );lcd_pos(1,0);write_n_char(welcome to home);aa = 0; lock = 1; baojing = 0; delay_ms(1000);baojing = 1;TR0 = 1;f

34、lag_t0 = 1;while(key != D & flag_t0) key = keyscan();TR0 = 0;lock = 0;Elselcd_pos(0,0);write_com(0x0c); write_com(0x06);write_com(0x01);write_n_char( password wrong);delay_ms(1000);aa+;if(aa = 3)lcd_pos(0,0); write_com(0x0c); write_com(0x06); write_com(0x01);write_n_char( Password wrong);lcd_pos(1,0

35、);write_n_char( you are thief);aa = 0; i = 20; while(i-) baoj();else lcd_pos(0,0);write_com(0x0c); write_com(0x06); write_com(0x01);/write_n_char( password wrong);delay_ms(1000);aa+;if(aa = 3)lcd_pos(0,0);write_com(0x0c); write_com(0x06); write_com(0x01);write_n_char( Password wrong);lcd_pos(1,0);wr

36、ite_n_char( you are thief);aa = 0; i = 20; while(i-) baoj();if(key = B)/Bread_n_add(mima_1,0x00,6);write_com(0x06);write_com(0x01);write_com(0x0f);lcd_pos(0,0);write_n_char( input password);write_com(0x0f);if(input_mima(mima_2)if(mimaduibi(mima_2,mima_1) lcd_pos(0,0);write_com(0x0c); write_com(0x06)

37、; write_com(0x01);write_n_char( password right );aa = 0; delay_ms(1500);flag_change = 1;while(flag_change) write_com(0x06);write_com(0x01);write_com(0x0f);lcd_pos(0,0);write_n_char( In new password);delay_ms(1500);if(input_mima(mima_2)lcd_pos(0,0);write_com(0x0c); write_com(0x06); write_com(0x01);write_n_char( Input new pass ); lcd_pos(1,0);write_n_char( word again);delay_ms(2000);lcd_pos(0,0);write_com(0x0f); write_com(0x06); write_com(0x01);write_n_char(In new password);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁