基于单片机的电子密码锁的设计-源程序

合集下载

基于单片机的电子密码锁的设计27...

基于单片机的电子密码锁的设计27...

基于单片机电子密码锁的设计摘要:随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。

由于传统机械锁存在构造简单,钥匙互开容易等不安全因素;使得家庭的安全性与保密性降低。

电子锁由于其保密性高,使用灵活性好,安全系数高,显得日趋重要。

本设计以单片机A T89C51与低功耗CMOS型E²PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、LCD显示、报警、开锁等电路模块。

它具有以下的功能:输入密码正确,实现开锁;输入密码错误三次以上,报警;可以根据用户需求更改密码。

本设计用用Keil软件进行编译,C51语言编写主控芯片控制程序与EEPROMAT24C02读写程序相结合,设计出一款可以更改密码,并且具有报警功能的电子密码控制系统。

软件设计采用自上而下的模块化设计思想,增强系统的可扩展性和运行的稳定性,使系统朝着分布式、小型化方向发展。

本密码锁具有一定的推广价值。

关键词:单片机;A T89C51;密码锁;报警;液晶显示Microcontroller-based Design Of Electronic LocksAbstract: With the improvement of social science and the living level of people, how to realize the family anti-theft,this problem also become particularly prominent. Because of the traditional mechanical lock has e many unsafe factors,such as simple structure, easy open; Reduces the security and privacy of family. Electronic lock is increasingly important,because of its high confidentiality, use good flexibility, high safety coefficient.This system by theAT89C51 with low power CMOS based E ² PROM AT24C02 as the master chip and the data memory unit, combined with the external keyboard, LCD display, alarm, unlock and other circuit modules. It has the following features: enter the password correctly under the premise of unlocking; Input wrong password more than three times case the alarm; password can be changed according to user needs.This design use Keil software to compile,Master in C language control program and EEPROM AT24C02 chip to read and write process are combined.designed a number you can change the password, the password with an electronic alarm control system.The software design adoption the design thought from top to bottom, strengthen the system and can expand the stability and circulate,to make the system toward wear distribute type,turn to the direction development of small.The lock has some promotional value.Keywords: singlechip; AT89C51;cryptogram lock;alarm; LCD目录摘要 (i)Abstract (i)目录 (iii)1绪论 (1)1.1单片机的应用领域 (2)1.1.1智能仪器仪表 (2)1.1.2工业控制 (2)1.1.3家用电器 (2)1.1.4计算机网络和通信 (2)1.1.5医用设备 (2)1.1.6大型电器 (3)1.2课题的目的和意义 (3)1.2.1选题目的 (3)1.2.2选题意义 (3)1.3国内外研究现状与水平 (3)1.4发展趋势 (4)1.5本设计特点 (4)2分析 (5)2.1方案选择 (5)2.2总体设计思路 (5)2.2.1系统实现功能 (5)2.2.2系统运行过程 (6)2.2.3系统总设计结构图 (6)2.3主要元器件介绍 (7)2.3.1AT89C51介绍 (7)2.3.2LCD1602显示器介绍 (9)2.3.3存储芯片AT24C02介绍 (10)2.3.4I2C总线介绍 (11)2.3.5矩阵键盘介绍 (13)3设计 (14)3.1硬件设计 (14)3.1.1单片机的晶振、复位电路 (14)3.1.2键盘输入电路 (15)3.1.3显示电路 (16)3.1.4存储电路 (17)3.1.5报警电路 (17)3.1.6开锁电路 (18)3.1.7生成电路图 (18)3.1.8元器件采购 (19)3.2软件设计 (19)3.2.1主程序 (19)3.2.2键盘扫描程序 (23)3.2.3密码修改程序 (26)3.2.4LCD显示程序 (28)3.2.5延时程序 (30)3.2.6中断程序 (31)3.3调试程序 (32)3.3.1Proeus 软件介绍 (32)3.3.2Keil C51软件介绍 (32)3.3.3Proteus 软件与Keil uVision 的结合 (32)4结论 (34)致谢 (2)参考文献 (3)1 绪论随着新技术的不断开发与应用,日常生活中住宅的安全防范以及一些个人资料的保存等一系列安全防盗问题已成为社会普遍关注的问题。

基于单片机的电子密码锁

基于单片机的电子密码锁

基于单片机的电子密码锁第一章:引言电子密码锁是随着科技的不断进步,应用于各个领域的一种新型门禁系统。

相较于传统的机械锁具,电子密码锁具有更高的安全性与便捷性。

而基于单片机的电子密码锁,则是通过单片机作为核心控制器,通过输入正确的密码才能进行开锁操作。

本文旨在介绍基于单片机的电子密码锁的原理、设计和实现过程。

第二章:电子密码锁的工作原理2.1 单片机简介单片机是一种集成了微处理器、存储器和各种输入输出接口于一体的微型计算机系统。

它具有体积小、功耗低、性能稳定等特点,适用于各种电子设备的控制系统。

2.2 电子密码锁的组成部分基于单片机的电子密码锁由输入模块、控制模块、显示模块和输出模块组成。

输入模块用于输入密码,控制模块用于验证密码的正确性和执行开锁指令,显示模块用于显示相关信息,输出模块用于控制锁的状态。

2.3 电子密码锁的工作原理当用户输入密码时,控制模块将用户输入的密码与预设密码进行比较。

如果输入的密码正确,则控制模块发送开锁指令,输出模块解除锁的限制,用户可以开启门。

否则,控制模块继续等待用户输入密码。

第三章:电子密码锁的设计步骤3.1 系统需求分析根据实际应用需求,确定电子密码锁系统的功能、性能和外观设计等方面的要求。

3.2 硬件设计根据系统需求,设计硬件电路,包括输入模块、控制模块、显示模块和输出模块等。

3.3 软件设计基于单片机的电子密码锁需要编写适用的软件程序。

根据密码验证算法,编写程序实现密码的比较和开锁指令的发送。

3.4 电子密码锁的制作流程根据硬件设计和软件设计的结果,进行电子密码锁的组装和制作。

3.5 电子密码锁的测试与调试对制作完成的电子密码锁进行测试,包括考虑用户输入的密码是否正确、开锁是否正常、显示是否准确等方面的问题。

第四章:电子密码锁的功能与特点4.1 密码设置与管理用户可以根据需要设置密码,并进行密码的管理,包括密码的增、删、改等功能。

4.2 多种开锁方式电子密码锁可以支持多种开锁方式,例如密码开锁、指纹识别、刷卡开锁等。

毕业设计(论文)-基于单片机控制的电子密码锁设计

毕业设计(论文)-基于单片机控制的电子密码锁设计

基于单片机控制的电子密码锁设计目录摘要 (I)关键词 (I)Abstract ................................................................................................................... I I Key words ............................................................................................................... I I 1 绪论. (1)1.1 课题背景 (1)1.2 课题的目的和意义 (1)1.3 电子密码锁发展趋势 (1)1.4 本设计完成的工作 (2)2 总体方案设计 (2)2.1 电源模块 (3)2.2主控制器模块 (3)3 硬件实现及单元电路设计 (4)3.1 主控制模块 (4)3.2 单片机的时钟电路与复位电路设计 (4)3.3 单片机管脚说明 (5)3.4 键盘电路设计 (6)3.5 数码管显示电路设计 (6)3.6 存储芯片电路设计 (7)3.7 报警电路 (7)3.8 密码锁电路 (7)4 红外遥控电路设计 (8)4.1 红外通信基本原理 (8)4.2红外通信标准 (9)4.3 红外线遥控原理 (10)4.4 主要模块设计 (10)5 系统软件设计方案 (11)5.1 主程序流图 (11)5.2 开锁软件设计 (12)6 系统的安装与调试 (15)6.1硬件的安装 (15)6.2单片级密码锁的仿真 (16)结论 (16)致谢 ...................................................................................... 错误!未定义书签。

参考文献 (17)附录1 整机电路原理图 (18)附录2 部分源程序 (18)附录3:实物图 (27)基于单片机控制的电子密码锁设计摘要:本设计研究的对象是单片机密码锁,单片机密码锁由硬件和软件组成,硬件部分有电源输出电路、晶振电路、复位电路、键盘接口电路、开锁电路、报警电路、继电器、以及51单片机组成。

基于单片机的电子密码锁及程序

基于单片机的电子密码锁及程序

毕业论文基于单片机的电子密码锁设计基于单片机的电子密码锁设计摘要随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于构造简单,被撬事件屡见不鲜。

电子密码锁保密性好,使用灵活性高,收到广大用户的青睐。

本设计是以单片机AT89C52作为密码锁的主控芯片与数据存储单元,结合外围的矩阵键盘输入、LCD显示、开锁、报警等,用C语言编写程序,并用Keil uVision4软件进行编译设计了一款可以更改密码,具有报警功能的电子密码控制系统。

本设计采用矩阵键盘对密码进行输入,具有较高的优势,减少了I/O口的占用数目。

密码的显示采用LCD显示屏实现,为确保安全性统一使用“*”显示密码,当重新设置密码时按下“修改”键,LCD显示屏显示数字。

采用蜂鸣器模拟报警系统,增加了密码锁的安全能力。

软件使用C语言编程,运用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。

测试结果表明,设计达到电子密码锁的功能。

关键字:密码锁、AT89C52、矩阵键盘、报警一、设计背景随着社会科技的进步,锁已经发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。

在传统钥匙的基础上,加了一组或多组密码,不同声音,不同磁场,不同声波,不同光束光波,不同图像来控制锁的开启,从而大大提高了锁的安全性。

当今安全信息系统应用越来越广泛,特别在机密保护、维护隐私和财产保护方面起到重大作用,而基于电子密码锁的安全系统是其中的一部分,运用非常广泛,研究它具有重大的现实意义。

电子密码锁可以在日常生活和现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。

大大提高了主人物资的安全性。

目前使用的密码锁种类繁多,各具特色。

本文从经济实用的角度出发,采用AT89C52单机,研制了一款具有防盗自动报警功能的电子密码锁。

该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。

基于51单片机的电子密码锁系统设计制作,电路图+源程序

基于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. }复制代码。

基于单片机的指纹识别电子密码锁设计

基于单片机的指纹识别电子密码锁设计

基于单片机的指纹识别电子密码锁设计引言指纹识别技术的发展得益于现代电子集成制造技术和快速可靠的算法的研究。

尽管指纹只是人体皮肤的小部分,但用于识别的数据量相当大,对这些数据进行比对也不是简单的相等与不相等的问题,而是使用需要进行大量运算的模糊匹配算法。

现代电子集成制造技术使得我们可以制造相当小的指纹图像读取设备,同时飞速发展的个人计算机运算速度提供了在微机甚至单片机上可以进行两个指纹的比对运算的可能。

另外,匹配算法可靠性也不断提高,指纹识别技术己非常实用。

指纹识别原理指纹识别技术的原理和其它生物识别技术的原理相似。

它是利用人体的指纹特征对个体身份进行区分和鉴定。

在所有的生物识别技术中指纹识别技术是目前最为成熟,也被应用最广的生物识别技术。

这主要因为指纹采用的过程对人们来讲非常简单,指纹识别的准确率高的原因。

严格来讲,指纹识别的原理包括指纹采集原理、指纹特征提取原理和指纹特征匹配原理三大部分。

指纹采集原理主要是根据指纹的几何特性或生理特性,通过各种传感技术把指纹表现出来,形成数字化表示的指纹图案。

由于指纹的嵴和峪的几何特征不同,主要表现为嵴是突起的,峪是凹下的,所以在接触到光线时,其反射光的强度也就不同。

在接触到平面时,其在平面上形成的压力也就不同。

另一方面,由于指纹的嵴和峪的生理特征不同,主要表现为:嵴和峪的温度不同,其导电性也不同,其对波长的反馈也就不同。

通过这些几何的、生理的特性的不同,把人的指纹采集到计算机系统中形成指纹图像。

指纹特征分析的原理是对指纹图案的整体特征和细节特征进行提取、鉴别的原理。

其分析的对象包括纹形特征和特征点的分布、类型,以及一组或多组特征点之间的平面几何关系。

特征点的平面几何关系表现为某个特征点之间的距离等,或者某三个或更多特征点之间组成的多边形的几何特性。

不论是特征点的单体特征,还是特征点的组合特征都是指纹特征的组成部分。

把这些指纹特征用数字模板的形式表示出来,就实现了一个指纹特征分析的过程。

基于单片机指纹识别电子密码锁的设计

基于单片机指纹识别电子密码锁的设计

在软件编写方面,需要编写指纹识别算法和控制系统程序。指纹识别算法需 要实现图像采集、预处理、特征提取和比对等功能;控制系统程序需要实现系统 的逻辑控制和操作,包括对指纹信息的处理、密码的验证和系统的启动、停止等 控制。
在硬件配置方面,需要选择合适的单片机、指纹采集设备和存储器等。单片 机是整个系统的核心,需要根据系统的性能要求和成本等因素进行选择;指纹采 集设备需要根据实际应用场景进行选择,例如光学式或电容式指纹采集设备;存 储器需要选择具有高可靠性和稳定性的Flash存储器或EEPROM存储器。
3、开发智能化和网络化的电子密码锁:通过接入互联网或物联网技术,实 现远程控制和监控,提高密码锁的使用便利性和安全性。
参考内容
引言
随着科技的进步和人们生活水平的提高,各种电子设备的应用越来越广泛, 人们对个人隐私和数据安全的保护需求也在不断增加。为了提高密码锁的安全性, 人们提出了许多设计方案,其中基于单片机的指纹识别电子密码锁设计是一种高 效、便捷的保
。在特征提取阶段,通过对指纹图像的细节特征进行分析,提取出用于比对 的特征点。最后,将这些特征点与存储在系统中的模板进行比对,以判断用户的 身份。
密码存储是保证密码安全性的重要环节。在基于单片机的指纹识别电子密码 锁设计中,通常采用Flash存储器或EEPROM存储器来存储密码和指纹模板。这些 存储器具有反复擦写和掉电不丢失数据的特性,可以保证密码的安全性和可靠性。
四、系统调试
在系统调试过程中,我们需要分别对电路、单片机控制程序和指纹识别算法 进行调试。
1、电路调试:首先,我们需要检查电源电路的稳定性和信号传输电路的通 断性,确保电路工作正常;其次,我们需要调试电阻网络部分,确保指纹信号的 准确转化。
2、单片机控制程序调试:在程序编写完成后,我们需要通过串口调试工具 对程序进行调试,检查程序是否能够正常工作、是否存在语法错误等。

基于单片机的简易电子密码锁毕业设计课程设计

基于单片机的简易电子密码锁毕业设计课程设计

前言随着电子技术的进展,具有防盗报警等功能的电子密码锁代替密码量少、平安性差的机械式密码锁已是必然趋势。

电子密码锁与一般机械锁相较,具有许多独特的优点:保密性好,防盗性强,能够不用钥匙,记住密码即可开锁等。

目前利用的电子密码锁大部份是基于单片机技术,以单片机为要紧器件,其编码器与解码器的生成为软件方式。

下面确实是此刻主流电子密码锁:目前常见的遥控式电子防盗锁要紧有光遥控和无线电遥控两类。

键盘式电子密码锁从目前的技术水平和市场认可程度看,利用最为普遍的是键盘式电子密码锁,该产品要紧应用于保险箱、保险柜和金库,还有一部份应用于保管箱和运钞车。

卡式电子防盗锁利用各类“卡”作为钥匙的电子防盗锁是当前最为活跃的产品,不管卡的种类如何多种多样,依照输入卡的操作方式,都可分为接触式卡和非接触式卡两大类。

生物特点防盗锁人的某些与生俱来的个性特点(如手、眼睛、声音的特点)几乎不可重复,作为“钥匙”确实是唯一的(除非被强逼或损害)。

因此,利用生物特点做密码的电子防盗锁,也专门适合金融业注重“验明正身”的行业特点。

人们生活水平的提高和平安意识的增强,对平安的要求也就愈来愈高。

锁自古以来确实是把守护门的铁将军,人们对它要求甚高,既要平安靠得住的防盗,又要利用方便,这也是制锁者长期以来研制的主题。

随着电子技术的进展,各类电子产品应运而生,电子密码锁确实是其中之一。

据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。

这种锁是通过键盘输入一组密码完成开锁进程。

研究这种锁的初衷,确实是为提高锁的平安性。

由于电子锁的密钥量(密码量)极大,能够与机械锁配合利用,而且能够幸免因钥匙被仿造而留下平安隐患。

电子锁只需记住一组密码,无需携带金属钥匙,免去人们携带金属钥匙的苦恼,而被愈来愈多的人所欣赏。

电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。

但较有效的仍是按键式电子密码锁。

20世纪80年代后,随着电子锁专用集成电路的显现,电子锁的体积缩小,靠得住性提高,本钱较高,是适合利用在平安性要求较高的场合,且需要有电源提供能量,利用还局限在必然范围,难以普及,因此对它的研究一直没有明显进展。

基于单片机的电子密码锁设计程序及电路图

基于单片机的电子密码锁设计程序及电路图

基于单片机电子密码锁设计程序#include <AT89X51.h>#define uchar unsigned charuchar starbuf[10];uchar wordbuf[8];uchar pw[8]={1,2,3,4,5,6,7,8};uchar pwbuf[8];uchar count=0;// 初始没有输入密码,计数器设为0uchar inputflag=0;// 先处于密码输入状态,非密码修改状态bit enterflag=0; // 没有按下确认键bit pwflag=0;// 密码标志先置为0sbit warn=P3^6;#define lcd_data P0sbit rs=P2^7;sbit rw=P2^6;sbit e=P2^5;///////////////////////LCD1602驱动程序///////////////////////void delay_1602(unsigned int i) {while(i--);}void enrw(){rs=0;rw=0;e=0;delay_1602(250);e=1;}write_data(uchar c){lcd_data=c;rs=1;rw=0;e=0;delay_1602(250);e=1;}init_lcd(void)//初始化{lcd_data=0x01;//清屏幕enrw();lcd_data=0x38;//数据长度为8位,双行显示,5*7字符。

enrw();lcd_data=0x0c;//打开显示开关enrw();lcd_data=0x06;//地址计数递增,显示屏不移动enrw();}write_cmd(uchar m)//写命令,注意与写数据的区别{lcd_data=m;enrw();}display(uchar row,uchar colum,uchar *s)//行列字符写字符串,简单的指针应用{uchar p;if(row==1)p=0x82+colum-1;elsep=0xC0+colum-1;write_cmd(p);for(;*s!='\0';s++)write_data(*s);}void lcd_display( unsigned char a, unsigned char b,unsigned char i)//行列数{switch (i){case 0:display( a,b, "0") ;break;/* 0 */case 1:display( a,b, "1") ;break;/* 1 */case 2:display( a,b, "2") ;break;/* 2 */case 3:display( a,b, "3") ;break;/* 3 */case 4:display( a,b, "4") ;break;/* 4 */case 5:display( a,b, "5") ;break;/* 5 */case 6:display( a,b, "6") ;break;/* 6 */case 7:display( a,b, "7") ;break;/* 7 */case 8:display( a,b, "8") ;break;/* 8 */case 9:display( a,b, "9") ;break;/* 9 */default: break;}}/* 键消抖延时函数*/void delay(unsigned int i){int j;for(;i>0;i--)for(j=0;j<100;j++);}/* 键扫描函数*/uchar keyscan(void){uchar scancode,tmpcode;P1 = 0xf0;// 发全0行扫描码if ((P1&0xf0)!=0xf0)// 若有键按下{delay(2);// 延时去抖动if ((P1&0xf0)!=0xf0)// 延时后再判断一次,去除抖动影响{scancode = 0xfe;//第一行变低while((scancode&0x10)!=0)// 逐行扫描{P1 = scancode;// 输出行扫描码if ((P1&0xf0)!=0xf0)// 本行有键按下{tmpcode = (P1&0xf0)|0x0f;/* 返回特征字节码,为1的位即对应于行和列*/return((~scancode)+(~tmpcode));}else scancode = (scancode<<1)|0x01;// 行扫描码左移一位}}}return(0);// 无键按下,返回值为0}/* 密码比较函数*/bit pwcmp(void){bit flag;uchar i;for (i=0;i<8;i++){if (pw[i]==pwbuf[i])flag = 1;else{flag = 0;i=8;}}return(flag);}/* 密码清除函数*/void pwclk(unsigned char k){unsigned char i;for (i=0;i<8;i++){wordbuf[i] = 0;// 数码管显示00000000starbuf[i] = 0;if(k==0)pwbuf[i] = 0;// 用FFFFFF清除已经输入的密码elsepw[i] = 0;// 用FFFFFF清除已经输入的密码}}/* 按键声响函数*/void alarm(){unsigned char i;for(i=0;i<200;i++){warn=!warn;delay(1);}}/* 密码报警函数*/ void alarm1(){unsigned int i;for(i=0;i<2000;i++){warn=!warn;delay(1);}}/* 呼叫报警函数*/ void alarm2(){unsigned char i=12; unsigned char a,b; while(i>0){for(a=0;a<150;a++){warn=!warn;delay(1);}for(b=0;b<150;b++){warn=!warn;delay(2);}i--;}}/* 按键处理函数*/void key_conduct(unsigned char a,unsigned char b){switch(a){case 0x11:// 1行1列,数字0if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 0;}else{pw[count] = 0;wordbuf[count] = 0;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x21:// 1行2列,数字1 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 1;}else{pw[count] = 1;wordbuf[count] = 1;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x41:// 1行3列,数字2 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 2;}else{pw[count] = 2;wordbuf[count] = 2;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x81:// 1行4列,数字3 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 3;}else{pw[count] = 3;wordbuf[count] = 3;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x12:// 2行1列,数字4 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 4;}else{pw[count] = 4;wordbuf[count] = 4;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x22:// 2行2列,数字5 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 5;}else{pw[count] = 5;wordbuf[count] = 5;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x42:// 2行3列,数字6 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 6;}else{pw[count] = 6;wordbuf[count] = 6;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x82:// 2行4列,数字7 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 7;}else{pw[count] = 7;wordbuf[count] = 7;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x14:// 3行1列,数字8 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 8;}else{pw[count] = 8;wordbuf[count] = 8;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x24:// 3行2列,数字9 if (count<8){if(b==0){starbuf[count] = '*';// 对应密码位上显示'*'pwbuf[count] = 9;}else{pw[count] = 9;wordbuf[count] = 9;lcd_display(2,count+1,wordbuf[count]);}count++;}alarm();break;case 0x44:// 3行3列,确认键enterflag = 1;// 确认键按下if(b==0){if (count==8) // 只有输入8个密码后按确认键才作密码比较pwflag = pwcmp();elsepwflag = 0;// 否则直接pmflag赋0 pwclk(b);//输入密码并判断之后清除}else{if (count==8) // 只有输入8个密码后按确认键才作密码比较pwflag = 1;else{pwflag = 0;pwclk(b);}}break;case 0x84:// 3行4列,取消键count = 0;// 密码计数清零pwclk(b);init_lcd();break;case 0x18:// 4行1列,密码修改键inputflag=1;// 进入密码修改模式count = 0;init_lcd();break;case 0x28:// 4行2列,密码修改键inputflag=0;// 退出密码修改模式count = 0;init_lcd();break;case 0x48:init_lcd();// 关于作品display(1,0,"Author: 083521047HCY");display(2,2,"QQ:393388456 ");delay(3000);init_lcd();break;case 0x88:init_lcd();// 清屏break;default: break;}}/* 主程序*/void main(){uchar key,error=0;init_lcd();while(1){while(inputflag==0)// 输入密码模式{display(1,0,"Input password:");display(2,0,starbuf);key = keyscan();// 调用键盘扫描函数key_conduct(key,inputflag);if(enterflag==1)// 如果按下确认键{enterflag = 0; // 标志位置回0count = 0;// 密码位计数器清零pwclk(inputflag);if(pwflag==1)// 如果密码输入正确{init_lcd();display(1,0,"Correct!");pwclk(0);delay(2000);error=0;}else{init_lcd();init_lcd();init_lcd();display(1,0,"Password wrong!");alarm1();error++;}while(error>=3)// 如果密码输入错误三次{init_lcd();init_lcd();display(1,0,"No access!");alarm2();while(1);}}}while(inputflag==1)// 更改密码模式{display(1,0,"New password:");key = keyscan();// 调用键盘扫描函数key_conduct(key,inputflag);if(enterflag==1)// 如果按下确认键{enterflag = 0; // 标志位置回0count = 0;// 密码位计数器清零if(pwflag==1)// 如果密码修改正确{inputflag=0;init_lcd();display(1,0,"Change finish!");delay(2000);}else{init_lcd();display(1,0,"Change fail!");pwclk(1);alarm1();}}}}}电路图。

基于单片机设计的电子密码锁设计

基于单片机设计的电子密码锁设计

摘要:随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子密码锁由于其保密性高,灵活性好,安全系数高,受到了广大用户的亲呢。

本设计拟由单片机51系统、矩阵键盘、LED显示和报警系统组成。

系统能完成开锁、超时报警、超次锁定、修改用户密码基本的密码锁的功能。

同时,也兼顾到产品的使用率,因而本系统成本低廉,功能实用。

目录一、设计要求 (4)二、方案论证与比较 (4)1、整体方案论证 (4)2、模块论证与比较 (5)2.1显示模块 (5)2.2报警模块 (5)2.3键盘输入模块 (6)三、设计思路 (7)1、分模块设计思路 (7)1.1 主硬件电路 (7)1.2 显示电路 (7)1.3 键盘输入电路 (7)2、整体设计思路 (8)2.1 总体设计电路图 (8)2.2 电路元件 (8)2.3 芯片介绍 (9)2.3.1 AT89S52芯片 (9)2.3.2 LM386芯片 (9)2.3.2.1 LM386内部电路 (9)2.3.2.2 LM386的引脚图 (10)四、程序设计 (11)1、软件实现功能 (11)1.1 4×4 行列式键盘识别技术 (11)1.28 位数码显示 (11)2、程序流程图 (11)2.1、主程序流程图 (11)2.2、中断子程序流程图 (12)3、程序 (12)五、调试 (12)六、总结 (13)七、致谢 (13)八、参考文献 (13)一、设计要求1、具有密码输入功能,密码最多为6位;2、设置退格键,以便删除输入错误的密码;3、在输入的密码时数码管上只显示P,并根据输入位数依次横移;4、设置确认键,当确认键按下后,判断输入密码是否正确;5、当输入密码正确时,点亮发光二极管;当输入密码不正确时,发光二极管不亮并且蜂鸣器报警,系统应锁定键盘3s二、方案论证与比较1、整体方案论证[2]方案一:采用以74LS112双JK触发器构成的数字逻辑电路控制。

(完整版)单片机电子密码锁(可以修改设置密码)——基于51单片机毕业论文

(完整版)单片机电子密码锁(可以修改设置密码)——基于51单片机毕业论文

单片机电子密码锁 (可以修改设置密码)――基于51单片机与AT24C02与LCD1602显示其电路图连接如下:本人已经用硬件实验,程序可用。

正确~~本程序特点:装载后读者可以自改密码,然后需要再次载入程 序时:可以把主程序aa=Sendstring(0xa0,1,table2,6)这一句去掉。

然后 程序的电子锁密码就是你个人设置的密码。

LCD1Vour Password* ・・程序代码为:#include<reg51.=P0A 2; sbit led=P3A0; uchar code table2[]="123456";EE J KBBI&flEK■i A A —i n Jll 理・J31mTrr W口 t■ i* TTS -■?TWKamHP —・U1■3TF4 LSl^fc 』 _ W>M. _ _, lJ-p — ...... 』 =]初始密码:〕23456XrMJRirF7.!|一 ■«*丿 r^35 一・4|E -L 凰P?E7TEF3 ■ir^OTTuchar code table[]="Your Password...";void delayms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);},做总线的延时用void delay() 短延时,两个机器周期{;;}void write_com(uchar com){rs=0;rd=0;lcden=0;P2=com;delayms(3);lcden=1;delayms(3);lcden=0;}void write_date(uchar date){rs=1;rd=0;lcden=0;P2=date;delayms(3);lcden=1;delayms(3);lcden=0;}void Display_String(uchar *p,uchar com){ uchar i;write_com(com);for(i=0;i<16;i++){write_date(p[i]);}}void init_lcd(){lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);Display_String(table,0x80);Display_String("Lock OK! ",0xc0);void start() {sda=1;scl=1;delay4us();sda=0;delay4us();scl=0;}void stop(){sda=0;scl=1;delay4us();sda=1;delay4us();scl=0;}void init() 初始化{ sda=1;delay();scl=1;delay();void ack(){sda=0;scl=1; delay4us();scl=0;sda=1;}void noack(){sda=1;scl=1; delay4us();scl=0;sda=0;}uchar recbyte(){uchar i,rd; rd=0x00;sda=1;for(i=0;i<8;i++) {rd<<=1;scl=1;rd|=sda; delay4us(); scl=0;delay4us();}scl=0;delay4us();return rd;}uchar sendbyte(uchar wd){uchar i;bit ack0;for(i=0;i<8;i++){sda=(bit)(wd&0x80);_nop_();_nop_();scl=1;delay4us();scl=0;wd<<=1;}delay4us();sda=1;scl=1;delay4us();ack0=!sda; scl=0;delay4us();return ack0;}uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i;start();if(!sendbyte(slave)) return 0;if(!sendbyte(subaddr)) return 0;start();if(!sendbyte(slave+1)) return 0;for(i=0;i<n-1;i++){buffer[i]=recbyte();ack();}buffer[n-1]=recbyte();noack();stop();return 1;uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i;start();if(!sendbyte(slave)) return 0;if(!sendbyte(subaddr)) return 0; for(i=0;i<n;i++){if(!sendbyte(buffer[i])) return 0;}stop();return 1;}void clear_password(){ uchar i;for(i=0;i<6;i++){Userpassword[i]=' ';} for(i=0;i<16;i++){DSY_BUFFER[i]=' ';}} uchar Keys_Scan()uchar temp,keynum;P1=0x0F;delayms(5);temp=P1A0x0F;switch(temp){case 1:keynum=0;break;case 2:keynum=1;break;case 4:keynum=2;break;case 8:keynum=3;break; break;}P1=0xF0;delayms(5);temp=P1>>4A0x0F;switch(temp){case 1:keynum+=0;break;case 2:keynum+=4;break;case 4:keynum+=8;break;case 8:keynum+=12;break; break;}delayms(600);return keynum;void main(){ uchar temp,i=0,j=0,k=0,n;uchar IS_valid_user;beep=1;init();init_lcd();delayms(5);aa=Sendstring(0xa0,1,table2,6);delayms(5);aa=Recstring(0xa0,1,buffer,6); delayms(10);P1=0x0f;while(1){if(P1!=0x0f){temp=Keys_Scan();switch(temp){case 0: case 1: case 2: case 3: case 4:case 5: case 6: case 7: case 8: case 9:if (i<=5) 密码限制在 6 位以内{Userpassword[i]=temp; DSY_BUFFER[i]='*';Display_String(DSY_BUFFER,0xc0); i++;}break;case 10: 按 A 键开锁for(k=0;k<6;k++) {if(buffer[k]==(Userpassword[k]+48))flag=1;elseflag=0;}if (flag==1){ flag=0;i=0;led=0; 点亮LED clear_password();Display_String("OPEN OK! IS_valid_user =1;",0xc0);j=0;else{j++;led=1; 关闭LEDclear_password();Display_String("ERROR!Have trywrite_com(0xcf);write_date(0x30+j);IS_valid_user=0;}i=0;break;case 11: 按 B 键上锁led=1;clear_password();Display_String(table,0x80);Display_String("Lock OK! i=0;IS_valid_user=0; break;case 12: 按 C 键设置新密码如果是合法用户则提示输入新密码",0xc0);",0xc0);if ( !IS_valid_user){i=0;Display_String("No rights ! ",0xc0); delayms(1000);Display_String("Your Password...",0x80);Display_String("Lock OK! ",0xc0);}else{i=0;Display_String("New Password: ",0x80);Display_String(" ",0xc0); }break;case 13: 按 D 键保存新密码if( !IS_valid_user){ i=0;Display_String("No rights !",0xc0);delayms(1000);Display_String("Your Password...",0x80);Display_String("Lock OK! ",0xc0);else{i = 0;init();delayms(5);for(k=0;k<6;k++){Userpassword[k]=Userpassword[k]+48;} aa=Sendstring(0xa0,1,Userpassword,6); delayms(5);aa=Recstring(0xa0,1,buffer,6); delayms(5); clear_password();Display_String(table,0x00);Display_String("Password Saved! ",0xc0); delayms(1000);Display_String("Do lock agian ? ",0xc0); }break;case 14: 按 E 键消除所有输入i=0;clear_password();Display_String(" ",0xc0); break;case 15: 清除一位if(i!=0)i--;for(n=0;n<i;n++){ DSY_BUFFER1[n]='*';} Display_String(DSY_BUFFER1,0xc0);}P1=0x0f;}if(j==3){ Display_String("THIEF!!!THIEF!!!",0xc0);j=0;beep=0;}。

基于单片机的电子密码锁 (含源代码原理图等)

基于单片机的电子密码锁 (含源代码原理图等)
At the graduation design I AT89C51 microcontroller as the core 4 * 4 matrix as input devices, LCD1602 keyboard type LCD display circuit as a character based on single chip to make the electronic combination lock. This combination lock has may change your password, password off electricity protection, input password mistake alarm, input password mistake three times the function of lock the keypad. This combination lock have operation humanization, low power consumption, high confidentiality and so on a series of advantages. This paper introduced in detail the system hardware and software design, and the detailed process simulation debugging.
8
&'()012345
9 @ AB3
1.1 设计意义
第 1 章 概论
单片机的应用是具有高度现实意义的。单片机极高的可靠性,微型性和智能 性,单片机已成为工业控制领域中普遍采用的智能化控制工具,已经深深地渗入 到我们的日常生活当中。在这次基于单片机的电子密码锁毕业设计中,不仅使我 加深对大学所学知识的理解,而且使我对单片机有了进一步的了解。在设计的过 程中,不仅使我熟悉了 AT89C51 单片的基本结构和相关的参数,而且了解单片机 最小系统的构成。在这次设计中所学到的相关知识也许会在将来的工作和学习中 用到。

基于单片机的电子密码锁的设计

基于单片机的电子密码锁的设计

基于单片机的电子密码锁的设计随着电子技术的高速发展,越来越多的电子设备在我们的日常生活中得到广泛应用,其中电子密码锁是一种非常实用的设备。

本文将介绍一种基于单片机的电子密码锁的设计方案。

一、设计原则电子密码锁可以实现安全有效地控制门的进出,因此在设计时需要考虑以下几个原则:1、安全性原则:电子密码锁的主要作用是保护门的安全,因此在设计时要充分考虑安全性原则,确保该锁的密码安全保密,并且无法被破解。

2、简易性原则:电子密码锁的使用应该非常方便,不需要复杂的操作步骤,任何人都能轻松地使用。

3、灵活性原则:电子密码锁应该具有良好的灵活性,以适应各种不同的使用环境和场合。

二、设计思路基于上述原则,我们可以采用基于单片机的密码锁设计方案。

它可以实现方便、高效、稳定和安全的门控制。

1、硬件设计:硬件设计主要包括电子密码锁系统的各个模块的设计,其中包括微控制器、键盘输入、存储器、LCD显示和驱动电路等。

我们采用AT89C2051单片机来实现密码锁的控制功能,该单片机具有字节可编程存储器、RAM存储器、定时器和串口等功能模块,可满足密码锁的功能要求。

输入模块采用矩阵键盘,在设计过程中需要根据输入键位的数量和大小合理地布局键盘电路。

存储模块采用EEPROM,按动某个键时,将按键值存储在EEPROM中。

显示模块采用1602液晶显示屏,该显示屏具有高清晰度、低功耗和长寿命等特点,可以方便地显示密码输入信息和程序的运行状态。

2、软件设计:软件设计主要包括密码输入、密码储存、密码比较和门控制等功能。

在密码输入部分,用户可以用矩阵键盘输入密码,输入的密码被存储在EEPROM中。

在密码储存部分,将用户数据(即输入的密码)存储在EEPROM中。

EEPROM的储存器地址是固定的,编写程序时须对地址进行下标处理。

密码比较部分,将输入密码和储存密码在EEPROM中进行比较,如果相同则门打开,否则告知用户。

在门控制部分,控制开关电路,门锁打开后关闭门锁,使其快速反弹,保证门锁卡住门框。

基于单片机的电子密码锁设计

基于单片机的电子密码锁设计

基于单片机的电子密码锁设计基于单片机的电子密码锁设计在日常生活中,密码锁是一种常见的安全设备,被广泛应用于家庭、办公室等场所。

随着科技的发展,传统的机械密码锁已经不能完全满足人们对安全性和便捷性的需求。

为了提高密码锁的安全性和实用性,许多基于单片机的电子密码锁被设计出来。

本文将介绍一种基于单片机的电子密码锁设计,并详细说明其工作原理和实现过程。

1. 设计思路基于单片机的电子密码锁的设计目标是提高安全性和便捷性。

传统的机械密码锁容易被暴力破解,而且如果密码被泄露,需要更换整个锁体。

因此,采用电子密码锁可以提供更高的安全性和方便的密码管理功能。

2. 系统组成基于单片机的电子密码锁主要由以下几个部分组成:(1)输入模块:用于输入密码的设备,可以是键盘、触摸屏等。

(2)单片机控制模块:使用单片机作为核心控制器,接收输入密码并进行验证。

(3)驱动模块:通过驱动模块对电子锁进行控制开关。

(4)显示模块:以LED或LCD等形式显示相关信息。

(5)电源模块:为电子密码锁系统提供电能供应。

3. 工作原理基于单片机的电子密码锁的工作原理如下:(1)初始状态下,用户可以通过输入密码进行解锁或锁定。

输入模块接收用户输入的密码。

(2)输入模块将密码发送给单片机控制模块。

(3)单片机控制模块使用事先设定的密码进行比对。

如果密码匹配,单片机控制模块将发出控制信号给驱动模块。

(4)驱动模块接收到控制信号后,将根据信号的指示打开或关闭电子锁。

(5)同时,单片机控制模块会发出指令给显示模块,将结果显示给用户。

4. 实现过程基于单片机的电子密码锁的实现过程如下:(1)选择合适的单片机,如AT89C51。

(2)设计电路板,将输入模块、单片机控制模块、驱动模块、显示模块和电源模块连接在一起。

(3)编写单片机的控制程序,实现密码验证和控制信号的生成。

(4)制作密码锁外壳,将电子密码锁系统组装在一起。

(5)测试电子密码锁的各个功能是否正常。

基于单片机的红外电子密码锁的设计

基于单片机的红外电子密码锁的设计

基于单片机的红外电子密码锁的设计基于单片机的红外电子密码锁的设计随着科技的发展,红外电子密码锁逐渐取代传统的机械密码锁成为了门禁系统中的主流。

红外电子密码锁通过红外线传输数据,使得开锁变得更加智能化、快速化,而且提高了安全性,防止了密码泄露以及密码碰撞的问题。

本文将介绍一种基于单片机的红外电子密码锁的设计方案。

一、系统方案本设计采用C51单片机为控制器,红外线信号接收模块作为主控,驱动步进电机控制门锁的开关,使得门的开关更加方便快捷,并提高了安全性。

电路运用了ISP编程器,通过USB 接口与电脑连接,并通过Keil软件编写程序上传到控制器中,以控制系统的整体运行流程。

二、硬件设计1. 单片机选型本设计中,选用51系列单片机控制器Atmel AT89C51,其具有内部FLASH可编程存储器,可在编程过程中对程序进行修改,更加便于控制器程序的更新维护。

同时,该单片机具有多种外设接口,包括计数器、定时器、串口等,便于实现控制器与各种传感器、执行器的互联。

2. 电源设计本系统使用直流12V供电,其中12V正极接单片机VCC,负极接GND,同时将12V作为步进电机的电源。

在电路中使用L7805稳压电源,将电压稳定输出为5V供给单片机芯片和红外线传感器等其他模块。

3. 红外线接收模块在门锁上方适当放置一个2150nm红外线传感器模块,以接收红外线信号并将其转化为数字信号。

这里采用的是RS232接口连接,将红外二极管所收到的红外线信号交给MCU进行处理。

4. 步进电机为实现门的自动开启关闭,本设计采用了步进电机驱动门锁的开关。

步进电机与单片机控制器的连接采用的是四线步进电机驱动电路。

其中,两根草绿色和橙色的线为电机的控制线,将其接入单片机P3口中,蓝色和红色的两根线分别为电机的两个电极,将它们接到电机驱动器的两个对应通道上。

三、软件设计1. 开发环境本设计所需的IDE使用Keil 4.0集成开发工具,同时也需要用到AT89C51单片机的ISP编程器,将程序下载到MCU板上。

基于单片机电子密码锁的课程设计

基于单片机电子密码锁的课程设计

基于单片机电子密码锁的课程设计本文将介绍基于单片机电子密码锁的课程设计,包括设计目的、设计理念、硬件设计、软件实现和实验结果。

通过这篇文档,读者可以了解到使用单片机进行电子密码锁设计的方法和步骤,并了解到电子密码锁在现代生活中的应用。

一、设计目的本次课程设计的主要目的是为了加深学生对单片机的理解和应用,同时锻炼学生的设计能力和实践能力。

通过电子密码锁的设计,可以培养学生的系统思维和解决问题的能力,同时也可以让学生了解到电子密码锁在现代生活中的应用。

二、设计理念电子密码锁是一种智能化的安全设备,其设计理念是通过输入密码来进行开锁,实现门禁控制和安全防护的功能。

本次课程设计的设计理念是通过单片机控制电子密码锁的开关,实现对门禁的控制和管理。

同时,本次设计还考虑到了密码的安全性和可靠性,确保用户信息的安全和可靠性。

三、硬件设计1、硬件模块本次课程设计的硬件模块主要包括单片机模块、显示屏模块、键盘模块、电子锁模块和电源模块。

2、模块连接单片机模块、显示屏模块、键盘模块、电子锁模块和电源模块之间通过连线进行连接。

其中,单片机模块和显示屏模块之间通过串口进行通讯,单片机模块和键盘模块之间通过IO 口进行通讯,单片机模块和电子锁模块之间通过IO口进行通讯,电源模块则为整个系统提供电源供应。

四、软件实现1、程序流程本次课程设计的程序流程主要包括初始化、密码输入、密码验证、开锁和关闭等步骤。

其中,初始化主要是对各个模块进行初始化和设置,包括显示屏、键盘、电子锁等模块的初始化和设置;密码输入是通过键盘输入密码,将密码存储在单片机中;密码验证是对密码进行比对,如果密码正确,则开锁,否则显示密码错误的提示信息;开锁则是对电子锁进行控制,将开关状态进行切换;关闭则是对电子锁进行控制,将开关状态进行切换。

2、代码实现本次课程设计的代码实现主要采用C语言进行编写,并通过Keil C IDE进行编辑和调试。

具体代码可以参照下面的代码:int main(void){ //初始化模块Init_LCD(); Init_Keypad(); Init_Lock(); while (1) { //获取用户输入的密码Get_Password(); //判断密码是否正确if(Check_Password()) { //解锁Unlock_Lock();//显示解锁成功信息Display_LCD("UnlockSuccessed"); } else { //显示解锁失败信息Display_LCD("Unlock Failed"); } }}五、实验结果通过本次课程设计,设计并制作出了一款基于单片机电子密码锁。

基于单片机的电子密码锁设计

基于单片机的电子密码锁设计

基于单片机的电子密码锁设计一、电子密码锁的工作原理电子密码锁主要由输入模块、控制模块、存储模块和执行模块组成。

用户通过输入模块(如键盘)输入密码,控制模块(单片机)对输入的密码进行处理和判断,并与存储模块中预先设定的密码进行比对。

如果输入密码正确,控制模块将向执行模块发送开锁指令,实现开锁;如果输入密码错误,则执行相应的错误处理操作,如报警、锁定等。

二、硬件设计(一)单片机的选择在本设计中,选用了_____型号的单片机。

该单片机具有性能稳定、功耗低、接口丰富等优点,能够满足电子密码锁的控制需求。

(二)输入模块输入模块采用了矩阵键盘,通过行列扫描的方式获取用户输入的密码。

矩阵键盘具有按键数量多、占用端口少的特点,能够有效节省单片机的资源。

(三)存储模块为了存储预设的密码,选用了_____型号的EEPROM芯片。

EEPROM具有掉电不丢失数据的特性,能够保证密码的安全性和可靠性。

(四)显示模块为了给用户提供反馈信息,使用了_____型号的液晶显示屏。

可以显示开锁状态、输入错误提示等信息。

(五)执行模块执行模块包括电磁锁和报警装置。

当输入密码正确时,单片机控制电磁锁打开;当输入密码错误次数超过设定值时,启动报警装置。

三、软件设计(一)主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、EEPROM读取预设密码等。

然后进入密码输入等待状态,当检测到有按键输入时,进行密码处理和判断,并根据判断结果执行相应的操作。

(二)密码输入处理在密码输入过程中,对输入的按键进行去抖处理,防止误判。

同时,对输入的密码进行加密处理,提高密码的安全性。

(三)密码比对将输入的密码与存储在EEPROM中的预设密码进行比对。

比对过程中,采用逐位比较的方式,确保密码的准确性。

(四)错误处理当输入密码错误时,记录错误次数。

如果错误次数超过设定值,则启动报警装置,并锁定键盘一段时间,防止暴力破解。

四、系统调试与测试(一)硬件调试首先检查电路连接是否正确,有无短路、断路等情况。

51单片机电子密码锁设计(包含原理图-电路设计-c语言程序)

51单片机电子密码锁设计(包含原理图-电路设计-c语言程序)

电子密码锁设计1.实验任务根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。

2.电路原理图图4.32.13.系统板上硬件连线(1).把“单片机系统”区域中的P0.0/AD0用导线连接到“音频放大模块”区域中的SPK IN端子上;(2).把“音频放大模块”区域中的SPK OUT端子接喇叭和;(3).把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“四路静态数码显示”区域中的任一个ABCDEFGH端子上;(4).把“单片机系统“区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L1端子上;(5).把“单片机系统”区域中的P3.6/WR、P3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2端子上;4.程序设计内容(1).密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2).密码的输入问题:由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。

在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。

进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

5.C语言源程序#include <AT89X52.H>unsigned char code ps[]={1,2,3,4,5};unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};unsigned char pslen=9;unsigned char templen;unsigned char digit;unsigned char funcount;unsigned char digitcount;unsigned char psbuf[9];bit cmpflag;bit hibitflag;bit errorflag;bit rightflag;unsigned int second3;unsigned int aa;unsigned int bb;bit alarmflag;bit exchangeflag;unsigned int cc;unsigned int dd;bit okflag;unsigned char oka;unsigned char okb;void main(void){unsigned char i,j;P2=dispcode[digitcount];TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;ET0=1;EA=1;while(1){if(cmpflag==0){if(P3_6==0) //function key{for(i=10;i>0;i--)for(j=248;j>0;j--);if(P3_6==0){if(hibitflag==0){funcount++;if(funcount==pslen+2){funcount=0;cmpflag=1;}P1=dispcode[funcount];}else{second3=0;}while(P3_6==0);}}if(P3_7==0) //digit key{for(i=10;i>0;i--)for(j=248;j>0;j--);if(P3_7==0){if(hibitflag==0){digitcount++;if(digitcount==10){digitcount=0;}P2=dispcode[digitcount];if(funcount==1){pslen=digitcount;templen=pslen;}else if(funcount>1){psbuf[funcount-2]=digitcount;}}else{second3=0;}while(P3_7==0);}}}else{cmpflag=0;for(i=0;i<pslen;i++){if(ps[i]!=psbuf[i]){hibitflag=1;i=pslen;errorflag=1;rightflag=0;cmpflag=0;second3=0;goto a;}}cc=0;errorflag=0;rightflag=1;hibitflag=0;a: cmpflag=0;}}}void t0(void) interrupt 1 using 0{TH0=(65536-500)/256;TL0=(65536-500)%256;if((errorflag==1) && (rightflag==0)){bb++;if(bb==800){bb=0;alarmflag=~alarmflag;}if(alarmflag==1){P0_0=~P0_0;}aa++;if(aa==800){aa=0;P0_1=~P0_1;}second3++;if(second3==6400){second3=0;hibitflag=0;errorflag=0;rightflag=0;cmpflag=0;P0_1=1;alarmflag=0;bb=0;aa=0;}}if((errorflag==0) && (rightflag==1)) {P0_1=0;cc++;if(cc<1000){okflag=1;}else if(cc<2000){okflag=0;}else{errorflag=0;rightflag=0;hibitflag=0;cmpflag=0;P0_1=1;cc=0;oka=0;okb=0;okflag=0;P0_0=1;}if(okflag==1){oka++;if(oka==2){oka=0;P0_0=~P0_0;}}else{okb++;if(okb==3){okb=0;P0_0=~P0_0;}}}}。

(完整版)基于单片机的电子密码锁参考毕业论文设计

(完整版)基于单片机的电子密码锁参考毕业论文设计

毕业论文题目:基于单片机的电子密码锁的设计专业:通信工程摘要单片机已经在家电领域中得到了广泛的应用,而且在安全密保方面,具有防盗报警功能的电子密码锁逐渐取代了传统的机械密码锁,克服了机械密码锁密码过少的安全性问题。

本密码锁的主控芯片采用价格实惠而且容易购买的 STC89C52芯片。

密码输入采用矩阵键盘及独立键盘,密码显示采用共阴极的八段显示数码管。

系统能完成密码输入、正确开锁、超次报警这些基本的密码锁的功能。

系统的软件实现采用功能强大且易于开发的KeilC51环境,且支持ISP下载。

因此没使用编程器,用C 语言实现系统的软件部分。

由于51单片机也有一些不足之处如断电后内部RAM储存的数据会完全丢失,为了克服这一缺点,系统的外围加了掉电存储电路并且由AT24C02芯片来实现。

此设计具有安全性高、价格低廉便于实现、易于改进等优点。

【关键词】电子密码锁STC89C52矩阵键盘 AT24C02ABSTRACTMCU widely used in the security password protection aspect anti-theft alarm function electronic combination lockgradually replace the traditional mechanical trick lock,it also overcome the security problems that thepassword of machinery combination lock are too few.This combination lock's master chip adopts STC89C52which is affordable and easy to buy.Password’s inputadopt matrix keyboard and independent keyboard,password's display using the erection of the cathodetube display digital. This system can accomplishpassword input, correct unlock, super times alarm ,these basic combination lock function . Softwarerealization of this system is used in KeilC51environment .it is powerful and easy to develop, and tosupport ISP to download. Therefore it is not useprogrammer, use C language implementation softwareof system components. Because 51MCU also order to,the system's periphery added off electricity storagecircuit and use AT24C02 chip to overcome theseshortcomings. This design lock STC89C52 Matrixkeyboard AT24C02前言随着社会物质财富的日益增长,安全防盗已成为社会问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*函数原型:void LCM_WriteData(uchar WDLCM)
/*函数功能:1602A写命令?
/*输入参数:要写入的命令
/*输出参数:无
/*调用模块:
*********************************************/
void write_com(uchar com)
{
write_data(p[i]);
}
}
//初始化函数
void init_lcd()
{
lcden=1;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
Display_String(table,0x80);
case 4:DSY_BUFFER[i]='4';break;
case 5:DSY_BUFFER[i]='5';break;
case 6:DSY_BUFFER[i]='6';break;
case 7:DSY_BUFFER[i]='7';break;
case 8:DSY_BUFFER[i]='8';break;
{
uchar i,rd;
rd =0x00;
sda =1;
for(i=0;i<8;i++)
{
scl=1;
rd<<=1;
rd|=sda;
delay4us();
scl=0;
delay4us();
}
scl =0;
delay4us();
return rd;
}
//发送数据函数
uchar sendbyte(uchar wd)
{
// delay();
beep =~beep;
}
//beep=0;
}
void main()
{
uint x;//定义变量,储存检测结?
uchar temp;
uchar i=0;
uchar j=0;
uchar k=0;
uchar IS_valid_user;
beep =0;
init();
init_lcd();
for (k=0;k<count1;k++)
{// P1=0xff;
for (i = 0; i<sound1;i++)
{beep= ~ beep;
for (j=0;j<tone;j++);
}
delay();
}
}
//蜂鸣器初始化函数
void Beep()
{
uchar i;
for(i=0;i<100;i++)
delayms(3);
lcden=1;
delayms(3);
lcden=0;
}
//****************************1602A显示字符串**************************/
/*函数原型:Display_String(uchar *p,uchar com)
/*函数功能:1602A显示字符串
case 8:keynum=3;break;
//default:Display_String("Push the keys ",0xc0);
break;
}
P1 =0xf0;
delayms(5);
temp=P1>>4^0x0F;
switch(temp)//按键列扫描
{
case 1:keynum+=0;break;
//按键扫描函数
uchar key_scan()
{
uchar temp,keynum;
P1 = 0x0f;
delayms(5);
temp =P1^ 0x0f;
switch(temp)//按键行扫描
{
case 1:keynum=0;break;
case 2:keynum=1;break;
case 4:keynum=2;break;
/*输入参数:要显示的字符串和指令
/*输出参数:无
/*调用模块:
*********************************************/
void Display_String(uchar *p,uchar com)
{
uchar i;
write_com(com);
for(i=0;i<16;i++)
uchar DSY_BUFFER[16]=" ";
uchar DSY_BUFFER1[16]=" ";
uchar Userpassword[4]={0,0,0,0};//原始密码
sbit rs=P2^0;
sbit rd=P2^1;
sbit lcden=P2^2;
sbit led=P2^7;
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
{
rs=0;
rd=0;
lcden=0;
P0=com;
delayms(3);
lcden=1;
delayms(3);
lcden=0;
}
//****************************1602A写数据函数*************************/
/*函数原型:void LCM_WriteData(uchar WDLCM)
#include<reg51.h>
#include<string.h>
#include<intrins.h>
#include<stdlib.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCDIO P0
{
uchar i;
start();
if(!sendbyte(slave)) return 0;
if(!sendbyte(subaddr)) return 0;
for(i=0;i<n;i++)
{
if(!sendbyte(buffer[i])) return 0;
}
stop();
return 1;
}
/*********************************key scan*************************************************/
delay();
scl=1;
delay();
}
//响应函数
void ack()
{
sda=0;
scl=1;
delay4us();
scl=0;
sda=1;
}
//非应答函数
void noack()
{
sda=1;
scl=1;
delay4us();
scl=0;
sda=0;
}
//接收数据函数
uchar recbyte()
scl =1;
delay4us();
sda =0;
delay4us();
scl =0;
}
//终止信号函数,参考时序图
void stop()
{
sda =0;
scl =1;
delay4us();
sda =1;
delay4us();
scl =0;
}
//IIC总线初始化部分
void init()
{
sda=1;
delay4us();
return ack0;
}
//接收字符串函数
uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n)
{
uchar i;
start();
if(!sendbyte(slave)) return 0;
if(!sendbyte(subaddr)) return 0;
}
void delay()//短延时,两个机器周期,做总线的延时用
{;;}
//*****************LCD 1602**************************/
//****************************1602A写数指令函数**************************/
sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
uchar code table[]="Your Password...";//初始化时,lcd显示
void delayms(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
case 2:keynum+=4;break;
case 4:keynum+=8;break;
case 8:keynum+=12;break;
break;
}
delayms(100);
return keynum;
相关文档
最新文档