久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5777|回復: 2
打印 上一主題 下一主題
收起左側

多功能電子密碼鎖(LCD顯示+矩陣按鍵+24C02存儲+報警)

[復制鏈接]
跳轉到指定樓層
樓主
要求:
1.  本設計為了防止密碼被竊取要求在輸入密碼時在LCD屏幕上顯示*號;
2.  設計開鎖密碼位六位密碼的電子密碼鎖;
3.  能夠LCD顯示在密碼正確時顯示OPEN,密碼錯誤時顯示 ERROR,輸入密碼時顯示INPUT  PASSWORD;
4.  實現輸入密碼錯誤超過限定的三次電子密碼鎖定;
5.  4×4的矩陣鍵盤其中包括0-9的數字鍵和確認、重設、清除以及關鎖功能鍵;
6.  本產品具備報警功能,當輸入密碼錯誤時蜂鳴器響并且LED燈亮;
7.  密碼可以由用戶自己修改設定(只支持6位密碼),修改密碼之前必須再次輸入密碼,在輸入新密碼時候需要二次確認,以防止誤操作;

仿真圖:


程序:
  1. voidStart(void)

  2. {

  3. Sda=1;

  4. Scl=1;

  5. Nop();

  6. Sda=0;

  7. Nop();

  8. }

  9. voidStop(void)

  10. {

  11. Sda=0;

  12. Scl=1;

  13. Nop();

  14. Sda=1;

  15. Nop();

  16. }

  17. voidAck(void)

  18. {

  19. Sda=0;

  20. Nop();

  21. Scl=1;

  22. Nop();

  23. Scl=0;

  24. }

  25. voidNoAck(void)

  26. {

  27. Sda=1;

  28. Nop();

  29. Scl=1;

  30. Nop();

  31. Scl=0;

  32. }

  33. voidSend(uchar Data)

  34. {

  35. ucharBitCounter=8;

  36. uchartemp;

  37. do

  38. {

  39. temp=Data;

  40. Scl=0;

  41. Nop();

  42. if((temp&0x80)==0x80)

  43. Sda=1;

  44. else

  45. Sda=0;

  46. Scl=1;

  47. temp=Data<<1;

  48. Data=temp;

  49. BitCounter--;

  50. }

  51. while(BitCounter);

  52. Scl=0;

  53. }

  54. ucharRead(void)

  55. {

  56. uchar temp=0;

  57. uchar temp1=0;

  58. uchar BitCounter=8;

  59. Sda=1;

  60. do

  61. {

  62. Scl=0;

  63. Nop();

  64. Scl=1;

  65. Nop();

  66. if(Sda)

  67. temp=temp|0x01;

  68. else

  69. temp=temp&0xfe;

  70. if(BitCounter-1)

  71. {

  72. temp1=temp<<1;

  73. temp=temp1;

  74. }

  75. BitCounter--;

  76. }

  77. while(BitCounter);

  78. return(temp);

  79. }

  80. voidWrToROM(uchar Data[],uchar Address,uchar Num)

  81. {

  82. uchar i;

  83. uchar *PData;

  84. PData=Data;

  85. for(i=0;i<Num;i++)

  86. {

  87. Start();

  88. Send(0xa0);

  89. Ack();

  90. Send(Address+i);

  91. Ack();

  92. Send(*(PData+i));

  93. Ack();

  94. Stop();

  95. mDelay(20);

  96. }

  97. }

  98. voidRdFromROM(uchar Data[],uchar Address,uchar Num)

  99. {

  100. uchar i;

  101. uchar *PData;

  102. PData=Data;

  103. for(i=0;i<Num;i++)

  104. {

  105. Start();

  106. Send(0xa0);

  107. Ack();

  108. Send(Address+i);

  109. Ack();

  110. Start();

  111. Send(0xa1);

  112. Ack();

  113. *(PData+i)=Read();

  114. Scl=0;

  115. NoAck();

  116. Stop();

  117. }

  118. }

  119. #defineyi 0x80

  120. #defineer 0x80+0x40

  121. voiddelay(uint xms)

  122. {

  123. uint x,y;

  124. for(x=xms;x>0;x--)

  125. for(y=110;y>0;y--);

  126. }

  127. voidwrite_1602com(uchar com)

  128. {

  129. lcd1602_rs=0;

  130. lcd1602_rw=0;

  131. P0=com;

  132. delay(1);

  133. lcd1602_en=1;

  134. delay(1);

  135. lcd1602_en=0; }

  136. voidwrite_1602dat(uchar dat)

  137. {

  138. lcd1602_rs=1;

  139. lcd1602_rw=0;

  140. P0=dat;

  141. delay(1);

  142. lcd1602_en=1;

  143. delay(1);

  144. lcd1602_en=0;

  145. }

  146. voidlcd_init(void)

  147. {

  148. write_1602com(0x38);

  149. write_1602com(0x0c);

  150. write_1602com(0x06);

  151. write_1602com(0x01);

  152. }

  153. unsignedchar coding(unsigned char m)

  154. {

  155. unsigned char k;

  156. switch(m)

  157. {

  158. case (0x11): k=1;break;

  159. case (0x21): k=2;break;

  160. case (0x41): k=3;break;

  161. case (0x81): k='A';break;

  162. case (0x12): k=4;break;

  163. case (0x22): k=5;break;

  164. case (0x42): k=6;break;

  165. case (0x82): k='B';break;

  166. case (0x14): k=7;break;

  167. case (0x24): k=8;break;

  168. case (0x44): k=9;break;

  169. case (0x84): k='C';break;

  170. case (0x18): k='*';break;

  171. case (0x28): k=0;break;

  172. case (0x48): k='#';break;

  173. case (0x88): k='D';break;

  174. }

  175. return(k);

  176. }

  177. unsignedchar keynum(void)

  178. {

  179. unsignedchar row,col,i;

  180. P1=0xf0;

  181. if((P1&0xf0)!=0xf0)

  182. {

  183. Delay5Ms();

  184. Delay5Ms();

  185. if((P1&0xf0)!=0xf0)

  186. {

  187. row=P1^0xf0;

  188. i=0;

  189. P1=a;

  190. while(i<4)

  191. {

  192. if((P1&0xf0)!=0xf0)

  193. {

  194. col=~(P1&0xff);

  195. break;

  196. }

  197. else

  198. {

  199. i++;

  200. P1=a;

  201. }

  202. }

  203. }

  204. else

  205. {

  206. return 0;

  207. }

  208. while((P1&0xf0)!=0xf0);

  209. return (row|col);

  210. }

  211. elsereturn 0;

  212. }

  213. //=====一聲提示音,表示有效輸入=====//

  214. voidOneAlam(void)

  215. {

  216. ALAM=0;

  217. Delay5Ms();

  218. ALAM=1;

  219. }

  220. //======二聲提示音,表示操作成功=====//

  221. voidTwoAlam(void)

  222. {

  223. ALAM=0;

  224. Delay5Ms();

  225. ALAM=1;

  226. Delay5Ms();

  227. ALAM=0;

  228. Delay5Ms();

  229. ALAM=1;

  230. }

  231. //======三聲提示音,表示錯誤==========//

  232. voidThreeAlam(void)

  233. {

  234. ALAM=0;

  235. Delay5Ms();

  236. ALAM=1;

  237. Delay5Ms();

  238. ALAM=0;

  239. Delay5Ms();

  240. ALAM=1;

  241. Delay5Ms();

  242. ALAM=0;

  243. Delay5Ms();

  244. ALAM=1;

  245. }

  246. //========顯示提示輸入========//

  247. voidDisplayChar(void)

  248. {

  249. unsigned char i;

  250. if(pass==1)

  251. {

  252. write_1602com(er);

  253. for(i=0;i<16;i++)

  254. {

  255. write_1602dat(LockOpen); }

  256. }

  257. else

  258. {

  259. if(N==0)

  260. {

  261. //DisplayListChar(0,1,Error);

  262. write_1602com(er);

  263. for(i=0;i<16;i++)

  264. {

  265. write_1602dat(Error);

  266. }

  267. }

  268. else

  269. {

  270. write_1602com(er);

  271. for(i=0;i<16;i++)

  272. {

  273. write_1602dat(start_line);

  274. }

  275. }

  276. }

  277. }

  278. //=====重置密碼=======//

  279. voidResetPassword(void)

  280. {

  281. unsigned char i;

  282. unsigned char j;

  283. if(pass==0)

  284. {

  285. pass=0;

  286. DisplayChar();

  287. ThreeAlam();

  288. }

  289. else

  290. {

  291. if(ReInputEn==1)

  292. {

  293. if(N==6)

  294. {

  295. ReInputCont++;

  296. if(ReInputCont==2)

  297. {

  298. for(i=0;i<6;)

  299. {

  300. if(TempPassword==InputData)

  301. i++;

  302. else

  303. {

  304. //DisplayListChar(0,1,Error);

  305. write_1602com(er);

  306. for(j=0;j<16;j++)

  307. {

  308. write_1602dat(Error[j]);

  309. }

  310. ThreeAlam();

  311. pass=0;

  312. ReInputEn=0;

  313. ReInputCont=0;

  314. DisplayChar();

  315. break;

  316. }

  317. }

  318. if(i==6)

  319. {

  320. //DisplayListChar(0,1,ResetOK);

  321. write_1602com(er);

  322. for(j=0;j<16;j++)

  323. {

  324. write_1602dat(ResetOK[j]);

  325. }

  326. TwoAlam();

  327. WrToROM(TempPassword,0,6);

  328. ReInputEn=0;

  329. }

  330. ReInputCont=0;

  331. CorrectCont=0;

  332. }

  333. else

  334. {

  335. OneAlam();

  336. //DisplayListChar(0, 1,again);

  337. write_1602com(er);

  338. for(j=0;j<16;j++)

  339. {

  340. write_1602dat(again[j]);

  341. }

  342. for(i=0;i<6;i++)

  343. {

  344. TempPassword=InputData;

  345. }

  346. }

  347. N=0;

  348. }

  349. }

  350. }

  351. }
復制代碼

文檔:
基于LCD1602和AT24C02的單片機多功能電子密碼鎖設計.doc (1.68 MB, 下載次數: 56)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:18797 發表于 2019-9-27 14:24 | 只看該作者
相當有借鑒價值的資料,謝謝分享
回復

使用道具 舉報

板凳
ID:311219 發表于 2019-11-23 17:06
垃圾,缺斤少兩的放上去惡心人

地板
ID:665936 發表于 2019-12-17 09:53 | 只看該作者
為什么都沒有管腳定義啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九九色| 久久激情视频 | 在线日韩中文字幕 | 伊人狠狠| 国产精品高潮呻吟久久久久 | 亚洲国产成人在线 | 久久久免费观看视频 | 国产专区在线 | 欧美视频三区 | 国产精品久久久久久久久久妞妞 | 亚州视频在线 | 九九久久国产 | 五月婷婷视频 | av毛片在线免费观看 | 盗摄精品av一区二区三区 | 色必久久 | 国产一区二区在线播放 | 美女久久视频 | 亚洲精品久久久久中文字幕欢迎你 | 国产亚洲精品精品国产亚洲综合 | 久久精品亚洲精品国产欧美 | 久久亚洲精品国产精品紫薇 | 亚洲精品乱码久久久久久久久 | 亚洲精品v日韩精品 | 草草网| 久久99精品视频 | 色就干 | 国产精品中文字幕在线观看 | 精品国产一区二区三区久久 | 天天天天天天天干 | 美女爽到呻吟久久久久 | 精品少妇一区二区三区在线播放 | 在线一区 | 国产一区二区三区不卡av | 国产精品永久免费视频 | 国产 91 视频| 欧美日一区二区 | 天天草天天干 | 天天碰夜夜操 | 精品www | 国产精品成人一区 |