单片机密码锁设计(汇编语言-)带原理图电路图-
基于单片机的智能密码锁的设计与制作(含pcb图)大学毕设论文

目录摘要 (1)英文摘要 (2)引言 (3)1 概述 (4)2 系统硬件设计 (4)2.1 硬件组成及工作原理 (4)2.2 单片机选型 (5)2.3 时钟电路 (5)2.4 复位电路 (6)2.5 密码存储电路 (7)2.6 矩阵式键盘电路设计 (7)2.7 报警电路 (8)2.8 显示电路 (8)3 系统软件方案 (9)3.1 设计与分析 (9)4 系统调试 (11)4.1 硬件调试 (11)4.2 软件调试 (11)结论与谢辞 (12)参考文献 (13)附件1:元器件清单 (14)附件2:系统软件 (15)附件3:电路图 (22)附件4:PCB图 (23)基于单片机和串行EEPROM的智能密码锁的设计与制作信息工程学院应用电子专业摘要:传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。
随着单片机的问世,出现了带微处理器的密码锁,它除具有电子密码锁的功能外,还引入了智能化、科技化等功能,从而使密码锁具有很高的安全性、可靠性,受到了广大用户的亲睐。
本文介绍一种基于单片机和串行EEPROM的智能密码锁,对系统硬件设计和软件实现进行了详细的描述。
该系统采用STC89C51单片机和AT24C02串行EEPROM,通过STC89C51模拟I2C总线和AT24C02通讯来读取存储的密码,用户通过键盘输入的密码,实现密码锁的功能。
关键词:智能密码锁STC89C51 AT24C02Single-chip EEPROM and serial-based Intelligent Design andlocks the production ofMajor of Applied Electronic Technology Information andEngineering College yingjunqingAbstract :Both traditional locks have a lot of keys, but also worried about the trouble after the loss of keys. With the advent of single-chip, a microprocessor with the password lock, which in addition to the functions of electronic locks, but also the introduction of intelligent, technology and other functions, so that locks with high security, reliability, the majority of users have been pro-gaze.This paper presents a single chip and serial EEPROM-based smart locks on the system hardware design and software implementation described in detail. The system usesSTC89C51 and AT24C02 single-chip serial EEPROM, through the I2C bus and STC89C51 simulation AT24C02 communication to read stored passwords, user password through the keyboard input to achieve the function of locks.Key words: smart locks STC89C51 AT24C02引言随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
单片机电子密码锁设计 -

目录第一章引言 (1)1.1设计背景 (1)1.2课题设计目标 (1)第二章系统方案论证 (2)2.1 主控部分的选择 (2)2.2 密码输入方式的选择 (2)第三章系统总体设计及主要芯片介绍 (3)3.1 系统总体设计 (3)3.2 主要芯片介绍 (4)3.2.1 主控芯片STC12C5A60S2简介 (4)3.2.2 密码存储部分E2PROM (5)3.2.3 LCD1602显示器 (6)第四章单元电路设计 (8)4.1主控电路(CPU) (8)4.2 键盘输入模块 (8)4.3 密码存储 (9)4.4 复位部分 (9)4.5 晶振部分 (10)4.6 显示模块 (10)4.7 报警部分 (11)4.8 开锁部分 (12)第五章系统软件设计 (13)5.1系统主程序 (13)5.2 初始化及按键识别 (15)5.3 改密修改 (15)第六章系统调试与测试 (17)6.1 系统调试 (17)6.1.1密码输入: (17)6.1.2密码修改: (18)6. 2 系统调试过程中出现的错误及改正方法 (19)第七章元器件清单 (20)第八章总结 (21)参考文献 (22)附录 (23)个人总结........................................... 错误!未定义书签。
第一章引言1.1 设计背景随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
而锁自古以来就是把守门的铁将军,人们对它要求甚高,即要求可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。
传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。
另外,如:宾馆、办公大楼、仓库、保险柜等,由于装修施工等人住时也要把原有的锁胆更换,况且钥匙随身携带也诸多便。
随着单片机的问世,出现了带微处理器的密码锁,它除具有电子密码锁的功能外,还引入了智能化、科技化等功能。
从而使密码锁具有很高的安全性、可靠性。
单片机实现电子密码锁功能原理图文

目录摘要..................................................... - 2 - 1. 绪论.................................................. - 3 -1.1 背景及意义........................................ - 3 -1.2 发展趋势.......................................... - 4 -2. 总体设计方案论证....................................... - 6 -2.1 设计要求.......................................... - 6 -2.2方案选定........................................... - 6 -3.硬件设计部分............................................ - 8 -3.1 原理概述.......................................... - 8 -3.2 单片机最小系统.................................... - 9 -3.2.1 AT89C52概述................................. - 9 -3.2.2 晶振电路.................................... - 13 -3.2.3 复位电路.................................... - 14 -3.2.4 排阻电路.................................... - 15 -3.3 AT24C02存储芯片.................................. - 15 -3.4 LCD1602电路...................................... - 17 -3.5 4×4矩阵键盘..................................... - 19 -3.6 声音提示模块..................................... - 21 -3.7 继电器模块....................................... - 23 -4. 软件设计部分.......................................... - 24 -4.1 软件平台简介..................................... - 24 -4.2 主程序设计....................................... - 24 -4.3 键盘扫描程序..................................... - 24 -4.4 密码设置流程图................................... - 25 -4.5 开锁子程序流程图................................. - 26 -5. 运行结果分析.......................................... - 27 -6. 结论................................................. - 30 -摘要在日常的工作和生活中, 住宅与楼宇的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
基于51单片机的电子密码锁系统设计制作,电路图+源程序

基于51单片机的电子密码锁系统设计制作,电路图+源程序这款基于51单片机的电子密码锁系统,单片机用STC89C52RC单片机,电路简单,制作过程中不需要进行调试,支持密码掉电保存功能!密码储存于单片机内部自带的的EEPROM中,不需要外置AT24C01保存密码,是学习电子密码锁比较好的教学试验系统,主要功能如下:1、1602液晶菜单显示。
2、6位密码,密码可重置,重置密码时,先输入原始密密,正确后输入新密码,再交输入新密码,两次输入的密码一致辞时,密码修改成功。
开锁时,密码通过键盘输入,若密码正确,则将锁打开,诺密码不正确时,无法开锁,密码输入错误三次时,蜂鸣器报警并且锁定键盘,10分钟。
3、支持掉电保存密码功能。
单片机中的密码是储存于单片内部的EEPROM中,在密码锁系统断电时,储存在密码锁系统中的密码不会丢失。
4、密码锁系统采用5V继电器模拟开锁过程。
5、输入的正确时,继电器吸合2-3秒,开锁指示灯亮2-3秒,模拟开锁。
6、密码错误报警且有错误提示(显示Error)。
7、密码正确开锁指示。
8、4X4矩阵键盘输入。
9、随时可修改密码存储,支持掉电保存密码功能,功能更为实用。
10、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
源程序如下:1. #include<reg52.h>2. #define uint unsigned int3. #define uchar unsigned char4. void key_scan();5. uchar count0,count1,count3,num,n=0,temp,a,j,count4;6. uchar mima[8]; //初始密码存储区7. uchar tab_key[50]; //输入密码存储区8. uchar code table[]={9. 0x3f,0x06,0x5b,0x4f,10. 0x66,0x6d,0x7d,0x07,11. 0x7f,0x6f,0x77,0x7c,12. 0x39,0x5e,0x79,0x71};13. bit enterflag; //确认键按下与否的标志14. bit mimaflag; //密码正确与否的标志15. bit xiugaiflag; //修改密码标志16. bit enter1flag; //修改密码确认键标志17. sbit red=P3^7;18. sbit bell=P3^6;19. sbit rs=P2^0;20. sbit rw=P2^1;21. sbit lcden=P2^2;22. sbit scl=P3^4;23. sbit sda=P3^5;24. uchar code table1[]="input the passco";25. uchar code table2[]="de: --------";26. uchar code table3[]="*";27. uchar code table4[]="right (^_^) ";28. uchar code table5[]="first error";29. uchar code table6[]="second error";30. uchar code table7[]="third error see ";31. uchar code table8[]="u tomorrow (^_^)";32. uchar code table9[]="define the passc";33. uchar code table10[]="ode: --------";34. uchar code table11[]="code is new";35. //******************************键盘消抖函数*******************************36. void delay1()37. { ;; }38. void delay2(uchar x)39. {40. uchar a,b;41. for(a=x;a>0;a--)42. for(b=100;b>0;b--);43. }44.45. void delay(uint z)46. {47. uint x,y;48. for(x=z;x>0;x--)49. for(y=110;y>0;y--);50. }51.52. //****************************e^2room的初始化*******************************53. void start() //开始信号54. {55. sda=1;56. delay1();57. scl=1;58. delay1();59. sda=0;60. delay1();61. }62.63. void stop() //停止64. {65. sda=0;66. delay1();67. scl=1;68. delay1();69. sda=1;70. delay1();71. }72. //****************************应答信号*************************************73. void respond()74. {75. uchar i;76. scl=1;77. delay1();78. while((sda==1)&&(i<250))i++;79. scl=0;80. delay1();81. }82. //*****************************写字节操作函数**********************************83. void write_byte(uchar date)84. {85. uchar i,temp;86. temp=date;87. for(i=0;i<8;i++)88. {89. temp=temp<<1; //保持最高位,左移到进位CY90. scl=0;91. delay1();92. sda=CY;93. delay1();94. scl=1;95. delay1();96. }97. scl=0;98. delay1();99. sda=1;//总线释放100. delay1();101. }102. //*******************************读字节操作函数***************************** 103. uchar read_byte()104. {105. uchar i,k;106. scl=0;107. delay1();108. sda=1;109. delay1();110. for(i=0;i<8;i++)111. {112. scl=1;113. delay1();114. k=(k<<1)|sda; //或运算,放到最低位115. scl=0;116. delay1();117. }118. return k;119. }120. //**********************************写地址函数****************************** 121. void write_add(uchar address,uchar date)122. {123. start();124. write_byte(0xa0);125. respond();126. write_byte(address);127. respond();128. write_byte(date);129. respond();130. stop();131. }132. //*******************************读地址函数************************************* 133. uchar read_add(uchar address)134. {135. uchar date;136. start();137. write_byte(0xa0);138. respond();139. write_byte(address);140. respond();141. start();142. write_byte(0xa1);143. respond();144. date=read_byte();145. stop();146. return date;147. }148. //****************************LCD1602的初始化******************************* 149. void write_com(uchar com)150. {151. rs=0;152. lcden=0;153. P0=com;154. delay(5);155. lcden=1;156. delay(5);157. lcden=0;158. }159.160. void write_date(uchar date)161. {162. rs=1;163. lcden=0;164. P0=date;165. delay(5);166. lcden=1;167. delay(5);168. lcden=0;169. }170.171. //***************************************密码比较函数******************************** 172. bit mimacmp()173. {174. bit flag;175. uchar i;176. for(i=0;i<8;i++)177. {178. if(mima[i]==tab_key[i])179. flag=1;180. else181. {182. flag=0;183. i=8;184. }185. }186. return(flag); //返回flag187. }188.189. ////**********************************LCD显示函数开始**************************************190. void lcd_display()191. {192. uchar i=0;193. write_com(0x80+0x40+8);194. for(i=0;i<n;i++)195. {196. write_date(table3[0]);197. }198. }199.200. //****************************************键盘功能分配函数群开始****************************201. //** 0 ** 1 **2 ** 3**202. //** 4** 5** 6 **7 **203. //**8** 9** 确认(A) **无效(B)204. //**取消(C)**修改密码键(D)**确认修改键(E)**无效(F)205.206. void key_manage1()207. {208. tab_key[n]=0;209. n++;210. if(xiugaiflag==1)211. {212. mima[count4]=0;213. count4++;214. }215. }216.217. void key_manage2()218. {219.220. tab_key[n]=1;221. n++;222. if(xiugaiflag==1)223. {224. mima[count4]=1;225. count4++;226. }227. }228.229. void key_manage3()230. {231.232. tab_key[n]=2;233. n++;234. if(xiugaiflag==1)235. {236. mima[count4]=2;237. count4++;238. }239. }240.241. void key_manage4() 242. {243. tab_key[n]=3; 244. n++;245. if(xiugaiflag==1) 246. {247. mima[count4]=3; 248. count4++;249. }250. }251.252. void key_manage5() 253. {254. tab_key[n]=4; 255. n++;256. if(xiugaiflag==1) 257. {258. mima[count4]=4; 259. count4++;260. }261. }262.263. void key_manage6() 264. {265. tab_key[n]=5; 266. n++;267. if(xiugaiflag==1) 268. {269. mima[count4]=5; 270. count4++;271. }272. }273. void key_manage7() 274. {275. tab_key[n]=6; 276. n++;277. if(xiugaiflag==1) 278. {279. mima[count4]=6; 280. count4++;281. }282. }283. void key_manage8() 284. {285. tab_key[n]=7; 286. n++;287. if(xiugaiflag==1) 288. {289. mima[count4]=7; 290. count4++;291. }292. }293.294. void key_manage9()295. {296. tab_key[n]=8;297. n++;298. if(xiugaiflag==1)299. {300. mima[count4]=8;301. count4++;302. }303. }304. void key_manage10()305. {306. tab_key[n]=9;307. n++;308. if(xiugaiflag==1)309. {310. mima[count4]=9;311. count4++;312. }313. }314. //**********************************确认键**************************************************************315. void key_manage11()316. {317. enterflag=1; //确认键按下318. if(n==8) //只有输入8个密码后按确认才做比较319. mimaflag=mimacmp();320. else321. mimaflag=0;322. if(enterflag==1)323. {324. enterflag=0;325. n=0;326. //用FFFFFFFF清除已经输入的密码327. for(count3=0;count3<8;count3++)328. {329. delay(5);330. tab_key[count3]=0x0f;331. }332.333. TR1=1; //打开计数器1334. count1=0; //定时器1由50MS累计到1S 所用的计数器335. if(mimaflag==1)336. {337. a=0;338.339. write_com(0x01);340. write_com(0x80);341. for(count3=0;count3<16;count3++)342. {343. write_date(table4[count3]); //密码正确,显示RIGHT,绿灯亮344. delay(5);345. }346. }347.348. else349. {350. n=0;351. red=0;352. bell=0;353. a++;354. if(a==1)355. {356. for(count3=0;count3<8;count3++) //ffffffff清除密码357. {358. delay(5);359. tab_key[count3]=0x0f;360. }361. write_com(0x01); 362. write_com(0x80);363. for(count3=0;count3<16;count3++)364. {365. write_date(table5[count3]); //密码错误,显示 first error,红灯亮366. delay(5);367. }368. TR1=1;369. }370. if(a==2)371. {372. for(count3=0;count3<8;count3++) //ffffffff清除密码373. {374. delay(5);375. tab_key[count3]=0x0f;376. }377. write_com(0x01);378. write_com(0x80);379. for(count3=0;count3<16;count3++)380. {381. write_date(table6[count3]); //密码错误,显示SECOND ERROR,红灯亮382. delay(5);383. }384. TR1=1;385. }386.387. if(a==3)388. {389. for(count3=0;count3<8;count3++) //ffffffff清除密码390. {391. delay(5);392. tab_key[count3]=0x0f;393. }394. write_com(0x01);395. write_com(0x80);396. for(count3=0;count3<16;count3++)397. {398. write_date(table7[count3]); //密码错误,显示third error see,红灯亮399. delay(5);400. }401. write_com(0x80+0x40);402. for(count3=0;count3<16;count3++)403. {404. write_date(table8[count3]);//密码错误,显示 U TOMORROW ,红灯亮405. delay(5);406. }407. TR1=0;408.409. }410.411. }412. }413.414. }415. void key_manage12()416. {417. tab_key[n]=11;418. n++; //密码计数清零419.420. }421. //****************************************************取消键********************************************422. void key_manage13()423. {424.425. n=0; //密码计数清零426. write_com(0x80); //指针所指位置427. for(count3=0;count3<16;count3++)428. {429. write_date(table1[count3]); //第一行显示INPUT THE PASSPORD:430. delay(5);431. }432. write_com(0x80+0x40);433. for(count3=0;count3<16;count3++)434. {435. write_date(table2[count3]); //开机显示--------436. delay(5);437. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码438. }439.440. }441. //*******************************************修改密码键********************************** 442. void key_manage14()443. {444. uchar aa=0;445. n=0;446. xiugaiflag=1;447. write_com(0x01);448. write_com(0x80);449. for(count3=0;count3<16;count3++)450. {451. write_date(table9[count3]); //显示define the password452. delay(5);453. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码454. }455. write_com(0x80+0x40);456. for(count3=0;count3<16;count3++)457. {458. write_date(table10[count3]); //显示--------459. delay(5);460. }461. TR0=1;462.463. }464. //******************************************修改密码键的确认键********************************465. void key_manage15()466. {467. n=0;468. enter1flag=1;469. if(enter1flag==1)470. {471. enter1flag=0;472. count4=0;473. for(count3=0;count3<16;count3++)474. {475. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码476. }477. write_com(0x01);478. write_com(0x80);479. for(count3=0;count3<16;count3++)480. {481. write_date(table11[count3]);482. delay(100);483. }484. TR1=1;485. count1=0;486. }487. }488. void key_manage16()489. {490. tab_key[n]=15;491. n++;492. }493.494. //****************************************定时器1的50MS,共延时1秒*****************************495. void time_1() interrupt 3496. {497.498. TH1=(65536-50000)/256;499. TL1=(65536-50000)%256;500. if(count1<20)501. {502. count1++;503. }504. else //计时到1S505. {506. TR1=0;507. count1=0;508. mimaflag=0;509.510. red=1;511. bell=1;512. //显示FFFFFFFF513. write_com(0x01);514. write_com(0x80);515. for(count3=0;count3<16;count3++)516. {517. write_date(table1[count3]); //显示INPUT THE PASSCODE518. delay(5);519. }520. write_com(0x80+0x40);521. for(count3=0;count3<16;count3++)522. {523. write_date(table2[count3]); //开机显示FFFFFFFF524. delay(5);525. }526. }527.528. }529. //***********************************************定时0**********************************************530. void time_0() interrupt 1531. {532.533. TH0=(65536-50000)/256;534. TL0=(65536-50000)%256;535. if(count4<8)536. {537. key_scan();538. }539. else540. {541. TR0=0;542. count4=0;543. }544. }545.546. //初始化函数547. void init()548. {549.550. uchar i;551. lcden=0;552. write_com(0x38); //打开显示模式设置553. write_com(0x0c); //打开显示,光标等等设置未零554. write_com(0x06); //当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,555. write_com(0x01); //清零指令556. write_com(0x80); //指针所指位置557.558. //定时器初始化559. TMOD=0x11; //T0,T1工作方式1560. TH0=(65536-2000)/256;561. TL0=(65536-2000)%256; //T0初始化2MS563. TH1=(65536-50000)/256;564. TL1=(65536-50000)%256; //T1初始化50MS565.566. TR1=0;567. ET1=1;568. EA=1;569. TR0=0;570. ET0=1;571.572. count0=0; //初始没有密码输入,故为零573. enterflag=0; //没有确认键按下574. mimaflag=0; //密码正确与否键先置零575.576. red=1; //红灯不亮577. //************密码存入EPROM中**********************************578. sda=1;579. delay(5);580. scl=1;581. delay(5);582. for(i=0;i<8;i++)583. {584. write_add(i,8);585. delay2(100);586. }587. for(i=0;i<8;i++)588. {589. mima[i]=read_add(i);590. delay(5);591. }592.593. }594. void main()595. { rw=0;596. init();597. write_com(0x80); //指针所指位置598. for(count3=0;count3<16;count3++)599. {600. write_date(table1[count3]); //第一行显示INPUT THE PASSPORD: 601. delay(5);602. }603. write_com(0x80+0x40);604. for(count3=0;count3<16;count3++)605. {606. write_date(table2[count3]); //开机显示FFFFFFFF607. delay(5);608. }609. while(1)610. {611. key_scan(); //调用键盘扫描函数612. lcd_display();613. }614.615. }616. //**************************************************键盘扫描函数开始********************************619. //**********扫描第一行*********620. P1=0xfe;621. temp=P1;622. temp=temp&0xf0;623. if(temp!=0xf0)624. {625. delay(100);626. if(temp!=0xf0)627. {628. temp=P1;629. switch(temp)630. {631. case 0xee:632. key_manage1();633. break;634.635. case 0xde:636. key_manage2();637. break;638.639. case 0xbe:640. key_manage3();641. break;642.643. case 0x7e:644. key_manage4();645. break;646. }647. while(temp!=0xf0)648. {649. temp=P1;650. temp=temp&0xf0;651. }652. }653. }654. //**************************************************扫描第二行***********************************655. P1=0xfd;656. temp=P1;657. temp=temp&0xf0;658. if(temp!=0xf0)659. {660. delay(100);661. if(temp!=0xf0)662. {663. temp=P1;664. switch(temp)665. {666. case 0xed:667. key_manage5();668. break;669.670. case 0xdd:671. key_manage6();674. case 0xbd:675. key_manage7();676. break;677.678. case 0x7d:679. key_manage8();680. break;681. }682. while(temp!=0xf0)683. {684. temp=P1;685. temp=temp&0xf0;686. }687. }688. }689. //*********************************************扫描第三行***********************************690. P1=0xfb;691. temp=P1;692. temp=temp&0xf0;693. if(temp!=0xf0)694. {695. delay(100);696. if(temp!=0xf0)697. {698. temp=P1;699. switch(temp)700. {701. case 0xeb:702. key_manage9();703. break;704.705. case 0xdb:706. key_manage10();707. break;708.709. case 0xbb:710. key_manage11();711. break;712.713. case 0x7b:714. key_manage12();715. break;716. }717. while(temp!=0xf0)718. {719. temp=P1;720. temp=temp&0xf0;721. }722. }723. }724.725. //***************************************************扫描第四行****************************************727. temp=P1;728. temp=temp&0xf0; 729. if(temp!=0xf0) 730. {731. delay(100);732. if(temp!=0xf0) 733. {734. temp=P1;735. switch(temp) 736. {737. case 0xe7:738. key_manage13(); 739. break;740.741. case 0xd7:742. key_manage14(); 743. break;744.745. case 0xb7:746. key_manage15(); 747. break;748.749. case 0x77:750. key_manage16(); 751. break;752. }753. while(temp!=0xf0) 754. {755. temp=P1;756. temp=temp&0xf0; 757. }758. }759. }760. }复制代码。
单片机密码锁设计(汇编语言 )带原理图电路图(带注释)

单片机密码锁设计(汇编语言)带原理图电路图(带注释)单片机密码锁设计(汇编语言)带原理图电路图(带注释)摘要随着电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。
本文介绍了一种应用AT89S52单片机设计的防盗自动报警电子密码锁系统。
经实验验证该系统具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可作为产品进行开发,应用于住宅、办公室的保险箱及档案柜等需要防盗的场所,所以电子密码锁凭着比较强的实用性、锁密匙量大,又要制造简单;既安全可靠,又成本低廉;既保密性强,又实用性广,在密码锁的巨大市场上占有一席之地。
本文讲述了基于AT89S52单片机的“电子密码锁”的设计与实现,首先在绪论中介绍了此系统的简介、研究本系统的目的和意义。
此后,本文在第二、三、四章论述了系统整体结构框图,系统各模块功能,论述了系统工作原理并对所使用各种芯片的功能与特性进行了介绍、系统硬件设计;在第五章中重点剖析了软件设计开发的过程。
而在最后一章简述了本次设计的总结,个人感受。
此外,通过对系统软硬件的不断调试,进一步完善功能,同时也加深了对单片机、LCD液晶显示器、电路设计等方面知识。
关键词:单片机;AT89S52;电子密码锁;LCD显示目录1绪论 (1)1.1密码锁简介 (1)1.2电子密码锁发展趋势 (1)1.3基本原理 (2)1.4研究的主要内容 (3)2系统总体设计方案 (4)2.1系统的功能介绍 (4)2.2系统的整体框图 (4)2.3系统各单元模块功能 (4)3密码锁的工作原理 (6)3.1系统工作原理简介 (6)3.2AT89S52单片机 (6)3.31602LCD液晶显示模块 (8)3.3.1显示特性 (8)3.3.2物理特性 (9)3.3.3外型尺寸图 (9)3.3.4结构块图 (10)3.3.5模块显示特性详解 (10)3.3.6字符码与字符字模之间的对应关系表 (11)4系统硬件设计 (12)4.1单片机AT89S52中断系统 (12)4.28051单片机的复位电路 (12)4.3光声报警电路 (13)4.4矩阵键盘电路 (13)4.51602LCD显示电路 (14)4.6利用PROTEUS仿真的电路图 (14)4.7硬件实物演示 (15)5系统软件设计 (17)5.1KEIL软件介绍 (17)5.2软件开发 (17)6结束语 (20)附录 (21)参考文献 (25)致谢 (26)1绪论1.1密码锁简介安全问题是现代社会各界普遍关注的焦点之一。
电子密码锁单片机设计完整程序电路

以 STC89C516 单片机为主控制单元,键盘为主要输入单元,结合开锁装置、 报警器和显示器完成整个系统设计。
系统的运行过程大致如下: 假设初始状态为闭锁,此时整个系统只等待按键输入,显示屏 显示“Input password Press key A”。按下 A 后,每按下一个数据键 (即每输入一个密码),lcd1602 显示一个“*”,当密码全部输入完成后, 需按下确认键“#”,此时系统判断密码是否正确,正确则开锁,错误则 报警。若按下密码重置键“*”,则需先输入原密码,正确后请输入新密 码,还要确认一遍新密码。按下删除键可以删除输错的密码。
单片机课程设计
1 系统的总体设计和主要元器件介绍 (1)设计要求
以 STC89C516 单片机为核心器件,结合按键电路、LCD1602 显 示电路、报警指示电路和开锁机构,利用单片机灵活的编程设计和丰富 的 I/O 端口,及其控制的准确性通过软件程序来控制整个系统实现电子 密码锁的以下基本功能:
(2)LCD1602 显示器
接口信号说明:
1602 型 LCD 的接口信号说明如表 2-2 所示。
表 2-2 LCD1602 接口信号说明
2
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资0配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中体2资2配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,卷.编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试写5交、卷重底电保要。气护设管设装备线备置4高敷、调动中设电试作资技气高,料术课中并3试中、件资且卷包管中料拒试含路调试绝验线敷试卷动方槽设技作案、技术,以管术来及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
单片机课程设计电子密码锁设计

单片机课程设计电子密码锁设计目录1 引言...................................... 错误!未定义书签。
2 系统设计分析............................... 错误!未定义书签。
2.1 总体设计框图.......................... 错误!未定义书签。
2.2 硬件电路设计分析...................... 错误!未定义书签。
2.2.1 时钟电路设计.................... 错误!未定义书签。
2.2.2 复位电路设计.................... 错误!未定义书签。
2.2.3 矩阵键盘设计.................... 错误!未定义书签。
2.2.4 报警控制电路.................... 错误!未定义书签。
2.2.5 液晶显示电路.................... 错误!未定义书签。
2.3 系统软件设计.......................... 错误!未定义书签。
2.3.2 初始化及按盘识别程序 ............ 错误!未定义书签。
2.3.3 开锁程序........................ 错误!未定义书签。
2.3.4 修改密码程序.................... 错误!未定义书签。
2.3.5 LCD显示程序..................... 错误!未定义书签。
2.4 仿真测试结果.......................... 错误!未定义书签。
3 总结....................................... 错误!未定义书签。
参考文献..................................... 错误!未定义书签。
附录......................................... 错误!未定义书签。
课程设计:电子密码锁(附原理图及PCB)

课程设计:电子密码锁(附原理图及PCB)电子密码锁摘要:本设计是通过判断输入密码正确与否从而控制相应电路工作,完成开锁、报警、锁定键盘等任务的电子密码锁。
它具有预设密码功能,超时报警功能,键盘锁定功能,错误提示功能等。
预设密码和输入密码是用两个八位的锁存器实现,密码判断是由数值比较器电路组成,超时报警功能是用NE555所构成的单稳态触发器实现,超时次数及密码错误次数由计数电路记录,而键盘锁定功能则是通过电路的逻辑关系巧妙控制锁存器的输出使能端实现的。
关键词:电子锁,密码锁,键盘锁定,报警电路Abstract:This design is to control the corresponding circuit by judging the password correctly or not work, do lock, alarm, lock the keyboard and other electronic combination lock. It has default password function, timeout alarm function, and key lock function, error function, etc. Default password and enter the password is to use two of the eight latch, password is consist of numeric comparator circuit, timeout alarm function is formed by using NE555 monostable trigger, timeout number and password error number recorded by counting circuit, and key lock function is through the logical relationship of the circuit can control the output of the latch makes the server-side implementation.Keywords:Electronic lock ,Combination lock,Keyboard lock, warning circuit.目录1 前言 (1)1.1 设计背景 (1)1.2 设计概述 (1)2 总体方案设计 (3)2.1 程序框图 (3)2.2 电路分析 (4)3 单元模块设计 (5)3.1 密码锁存电路 (5)3.2 密码判断电路 (7)3.3 计数器电路 (8)3.4 计时器电路 (9)3.5电路参数的计算及元器件的选择 (13)3.6 各单元模块的联接 (13)4 系统调试 (14)4.1 仿真电路总图 (14)4.2系统仿真参数设置 (14)4.3 功能调试 (17)4.4 调试结果分析 (23)5 系统功能、指标参数 (25)5.1 系统实现的功能 (25)5.2 系统指标参数测试 (25)6 结论 (26)7 设计总结 (27)7.1 设计的收获体会 (27)7.2 对设计的进一步完善提出意见或建议 (27)8 致谢 (28)9 参考文献 (29)附录1:电子密码锁的仿真总图 (31)附录2:电子密码锁的PCB图 (33)1 前言1.1 设计背景随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机密码锁设计(汇编语言)带原理图电路图什么是密码锁电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
硬件设计基于AT89C51为核心的单片机控制的电子密码锁设计。
本设计能完成开锁,修改密码,密码错误报警,LCD显示密码等基本的密码锁功能。
设计的电路框如图1。
《,图一&电路的功能单元设计1.单片机AT89C51组成基本框图单片机引脚介绍P0:P0口是一个漏极开路的8位双向I/O口。
在访问片外存储器时P0分时提供低8位地址线和8位双向数据线。
当不接片外存储器或不扩展I/O口时,P0可作为一个通用输入/输出口。
P0口作输入口使用时,应先向口锁存器写“1”,P0口作输出口时,需接上拉电阻。
P1:P1口是一个内部提供上拉电阻的8位双向I/O口,因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”。
&P2:P2口也是一个内部提供上拉电阻的8位双向I/O口,在访问片外存储器时,输出高8位地址。
P3:P3口除了一般的准双向通用I/O口外,还有第二功能。
VCC:+5V电源VSS:接地ALE:地址锁存器控制信号。
在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。
此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
/PSEN:外部程序存储器读选通信号。
在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。
/EA:访问程序存储控制信号。
当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;当/EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
RST:复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。
XTAL1和XTAL2:外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
2.单片机外围电路设计&(1)单片机复位电路:采用按键手动复位方式中的电平复位方式,复位电平是通过使RST 端经电阻与VCC电源接通而实现的。
(2)单片机时钟电路:AT89C51内部有时钟电路,需外接石英晶体和微调电容,本设计的晶振频率为。
3.矩阵键盘的设计本设计中用到4*4的键盘。
键盘扫描方式,键盘的列线与P1口的低4位相接,行线与P1口的高3位相接。
首先使为低电平“0”,其余三根列线为高电平“1”,读行线状态。
如果行线都为高电平状态,则这列上没键按下,如果读出的行线不全为高电平状态,则为低电平的行线与相交的键处于闭合状态。
如果上没有键闭合,接着使为低电平,其余列线为高电平,用同样的方法检查这列上有没有按键闭合。
一直到使为低电平扫描完成。
这一过程称为一次扫描过程。
由于按键是利用机械触电的合、断原理,存在弹性的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使电压信号波动,为了保证CPU对键的稳定闭合仅作一次键输入处理,必须采用消除抖动影响。
本设计采用软件办法,在检测到有键按下时,执行一个延时程序后,确认该键是否保持闭合状态电平。
若仍保持闭合状态电平,则确认该键处于闭合状态,从而消除抖动影响。
若有按键被按下时,就将该按键译码出来,本设计采用双重循环做计数编号,当某一按键按下时,其按键编号便是计数编号,有关按键编号,扫描信号及读取按键数据返回码整理1 1 0 170 1 1 1 1 1 0 1K7 键K8 键8 1 1 1 0?1 0 1 19 1 1 0 1 1 0 1 1K9 键10 1 0 1 1&K10 键1 0 1 1110 1 1 1 1 0 1 1K11 键表1|4.电路总体设计Array下面是本次实验的程序;*******************************************************;以下8个字节存放8位数码管的段码LED_BIT_1 EQU 30HLED_BIT_2 EQU 31H…LED_BIT_3 EQU 32HLED_BIT_4 EQU 33HLED_BIT_5 EQU 34HLED_BIT_6 EQU 35HLED_BIT_7 EQU 36HLED_BIT_8 EQU 37H;以下6个字节存放初始密码WORD_1 EQU 38H【WORD_2 EQU 39HWORD_3 EQU 3AHWORD_4 EQU 3BHWORD_5 EQU 3CHWORD_6 EQU 3DH;以下6个字节存放用户输入的6位密码KEY_1 EQU 3EHKEY_2 EQU 3FH。
KEY_3 EQU 40HKEY_4 EQU 41HKEY_5 EQU 42HKEY_6 EQU 43H;****************************************************** CNT_A EQU 44HCNT_B EQU 45HKEY_CNT EQU 46H ;已输出的密码位数*LINE EQU 47H ;按键行号ROW EQU 48H ;按键列号VAL EQU 49H ;键值;****************************************************** ;以下为初始化程序,包括数据存储空间初始化,设置初始密码ORG 00HSJMP STARTORG 0BH,LJMP INT_T0START: MOV CNT_A,#00H ;程序初始化MOV CNT_B,#00HMOV KEY_CNT,#00HMOV LINE,#00HMOV ROW,#00HMOV VAL,#00HSETB[MOV LED_BIT_1,#00H ;段码存储区清0MOV LED_BIT_2,#00HMOV LED_BIT_3,#00HMOV LED_BIT_4,#00HMOV LED_BIT_5,#00HMOV LED_BIT_6,#00HMOV LED_BIT_7,#79HMOV LED_BIT_8,#73H"MOV KEY_1,#00H ;输入密码存储区清0MOV KEY_2,#00HMOV KEY_3,#00HMOV KEY_4,#00HMOV KEY_5,#00H]MOV WORD_1,#6 ;设置初始密码为"123456"MOV WORD_2,#5MOV WORD_3,#4MOV WORD_4,#3MOV WORD_5,#2MOV WORD_6,#1MOV TMOD,#01H:MOV TH0,#(65536-700)/256MOV TL0,#(65536-700)/256MOV IE,#82HA0: LCALL DISP;*********************************************************** ;以下为键盘扫描程序,计算键值并存入VALLSCAN: MOV P3,#0F0H ;扫描行码?L1: JNB ,L2LCALL DLY_SJNB ,L2MOV LINE,#00HLJMP RSCANL2: JNB ,L3LCALL DLY_SJNB ,L3、LJMP RSCANL3: JNB ,L4LCALL DLY_SJNB ,L4MOV LINE,#02HLJMP RSCANL4: JNB ,A0/LCALL DLY_SJNB ,A0MOV LINE,#03HRSCAN: MOV P3,#0FH ;扫描列码C1: JNB ,C2MOV ROW,#00HLJMP CALCU*C2: JNB ,C3MOV ROW,#01HLJMP CALCUC3: JNB ,C1MOV ROW,#02HCALCU: MOV A,LINE ;计算键值MOV B,#03H)MUL ABADD A,ROWMOV VAL,A;************************************************** ;以下为按键处理程序,对不同的按键作出响应CJNE A,#0AH,J1 ;是否为"CLR"键MOV R1,KEY_CNTCJNE R1,#00H,J2`LCALL ALARM_1LJMP STARTJ2: LCALL SHIFTRDEC KEY_CNTW00:LCALL DISP ;等待按键抬起MOV A,P3。
CJNE A,#0FH,W01LJMP A0W01:MOV A,P3CJNE A,#0F0H,W02LJMP A0W02:SJMP W00J1: MOV A,VAL|CJNE A,#0BH,J3 ;判断是否为"ENTER"键MOV R1,KEY_CNTCJNE R1,#06H,J4MOV A,WORD_1 ;比较密码CJNE A,3EH,J5MOV A,WORD_2CJNE A,3FH,J5?MOV A,WORD_3CJNE A,40H,J5MOV A,WORD_4CJNE A,41H,J5MOV A,WORD_5CJNE A,42H,J5MOV A,WORD_6CJNE A,43H,J5】CLRLCALL DLY_LLJMP FINIJ5: LCALL ALARM_2LJMP START`J4: LCALL ALARM_1LJMP STARTJ3: INC KEY_CNT ;按下数字键MOV A,KEY_CNTCJNE A,#07H,K1LCALL ALARM_1~W10:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W11LJMP STARTW11:MOV A,P3CJNE A,#0F0H,W12LJMP STARTW12:SJMP W10#LJMP STARTLJMP STARTK1: LCALL SHIFTLW20:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W21!LJMP A0W21:MOV A,P3CJNE A,#0F0H,W22LJMP A0W22:SJMP W20LJMP A0ALARM_1:SETB TR0 ;操作错误报警。
JB TR0,$RETALARM_2:SETB TR0 ;密码错误报警JB TR0,$LCALL DLY_LRET;************************************************** ;定时器中断服务程序,用于声音报警¥INT_T0:CPLMOV TH0,#(65536-700)/256MOV TL0,#(65536-700)/256INC CNT_AMOV R1,CNT_ACJNE R1,#30,RETUNEMOV CNT_A,#00H,INC CNT_BMOV R1,CNT_BCJNE R1,#20,RETUNEMOV CNT_A,#00HMOV CNT_B,#00HCLR TR0RETUNE: RETI;************************************************** ';段码,输入密码左移子程序SHIFTL: MOV LED_BIT_6,LED_BIT_5MOV LED_BIT_5,LED_BIT_4MOV LED_BIT_4,LED_BIT_3MOV LED_BIT_3,LED_BIT_2MOV LED_BIT_2,LED_BIT_1MOV LED_BIT_1,#40HMOV KEY_6,KEY_5/MOV KEY_5,KEY_4MOV KEY_4,KEY_3MOV KEY_3,KEY_2MOV KEY_2,KEY_1MOV KEY_1,VALRET;************************************************** ;段码,输入密码右移子程序`SHIFTR: MOV LED_BIT_1,LED_BIT_2MOV LED_BIT_2,LED_BIT_3MOV LED_BIT_3,LED_BIT_4MOV LED_BIT_4,LED_BIT_5MOV LED_BIT_5,LED_BIT_6MOV LED_BIT_6,#00HMOV KEY_1,KEY_2MOV KEY_2,KEY_3【MOV KEY_3,KEY_4MOV KEY_4,KEY_5MOV KEY_5,KEY_6MOV KEY_6,#00HRET;************************************************** ;以下为数码显示子程序DISP: CLR@MOV P0,LED_BIT_8LCALL DLY_SSETBCLRMOV P0,LED_BIT_7LCALL DLY_SSETBCLR`MOV P0,LED_BIT_6LCALL DLY_SSETBCLRMOV P0,LED_BIT_5LCALL DLY_SSETBCLRMOV P0,LED_BIT_4LCALL DLY_SSETBCLRMOV P0,LED_BIT_3LCALL DLY_SSETBCLRMOV P0,LED_BIT_2LCALL DLY_SSETBCLRMOV P0,LED_BIT_1LCALL DLY_SSETBRET;********************************************** DLY_S: MOV R6,#10D1: MOV R7,#250DJNZ R7,$DJNZ R6,D1RETDLY_L: MOV R5,#100D2: MOV R6,#100D3: MOV R7,#248DJNZ R7,$DJNZ R6,D3DJNZ R5,D2RETFINI: NOPEND程序流程图错误。