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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子密碼鎖程序 3*3矩陣按鍵Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
3*3矩陣按鍵

繼電器控制密碼正確與錯誤

兩個LED燈顯示報警和密碼正確

LCD1602顯示屏顯示密碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #define ulong unsigned long
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar temp,num,flag,r;
  6. uchar code table1[]="welcome!       ";
  7. uchar code table2[]="enter password";
  8. uchar code table3[]="012345";
  9. uchar code table4[]="code is wrong!";
  10. uchar code table5[]="you are right!";
  11. uchar code table6[]="the second time!";
  12. uchar code table7[]="the last time!";
  13. uchar code table8[]="Input new code:";
  14. uchar code table9[]="calling.....";
  15. uchar code table10[]="password";
  16. uchar code table11[]="    ";
  17. uchar code table12[]="Modify right!!!";
  18. uchar code table13[]="Input again:";
  19. uchar code table14[]="Modify error!!!";
  20. uchar init_pswd[4]={2,3,0,5};
  21. uchar pswd[4]={0};
  22. sbit lcdrs=P2^0; //LCD數據/指令(H/L)選擇端
  23. sbit lcdrw=P2^1;
  24. sbit lcden=P2^2; //LCD使能
  25. sbit P1_6=P1^6;
  26. sbit P2_6=P2^6;//報警指示燈
  27. sbit P2_7=P2^7;
  28. sbit P3_7=P3^7; //蜂鳴器
  29. /****************子函數聲明*/
  30. void delay(uint z);
  31. void init();//初始化子函數
  32. void write_com(uchar com);//寫指令子函數
  33. void write_data(uchar dat1);//寫數據子函數
  34. uint keyscan();
  35. void mima();//密碼處理子函數
  36. void mima1();//修改密碼函數
  37. void Alarm(uchar t);//報警函數
  38. /***************液晶驅動*/
  39. void init()
  40. {
  41. lcden=0;
  42. write_com(0x38);
  43. write_com(0x0e);
  44. write_com(0x06);
  45. write_com(0x01);
  46. write_com(0x80);
  47. }
  48. void write_com(uchar com)
  49. {
  50. lcdrs=0;
  51. lcdrw=0;
  52. P0=com;
  53. delay(5);
  54. lcden=1;
  55. delay(5);
  56. lcden=1;
  57. delay(5);
  58. lcden=0;
  59. }
  60. void write_data(uchar dat1)
  61. {
  62. lcdrs=1;
  63. lcdrw=0;
  64. P0=dat1;
  65. delay(5);
  66. lcden=1;
  67. delay(5);
  68. lcden=0;
  69. }
  70. void delay(uint z) //延時子函數 z*1ms
  71. {
  72. uint x,y;
  73. for(x=z;x>0;x--)
  74. for(y=110;y>0;y--);
  75. }
  76. uint keyscan() //鍵盤掃描程序
  77. {
  78. P1=0xfe; //先選定第一行
  79. temp=P1;
  80. temp=temp&0xf8; //列線全為1,行線為0
  81. while(temp!=0xf8)
  82. {
  83. delay(15); //延時去抖
  84. temp=P1;
  85. temp=temp&0xf8;
  86. while(temp!=0xf8)
  87. {
  88. temp=P1;
  89. switch(temp) //判斷哪列按下
  90. {
  91. case 0xf6:num=0;flag=1;break;//第一列按下
  92. case 0xee:num=1;flag=1;break;//第二列按下
  93. case 0xde:num=2;flag=1;break;//第三列按下
  94. }
  95. while(temp!=0xf8)
  96. {
  97. temp=P1;
  98. temp=temp&0xf8;
  99. }
  100. }
  101. }
  102. P1=0xfd; //選定第二行,列線為1
  103. temp=P1;
  104. temp=temp&0xf8;
  105. while(temp!=0xf8)
  106. {
  107. delay(15);
  108. temp=P1;
  109. temp=temp&0xf8;
  110. while(temp!=0xf8)
  111. {
  112. temp=P1;
  113. switch(temp) //判斷哪列按下
  114. {
  115. case 0xf5:num=3;flag=1;//第一列按下
  116. break;
  117. case 0xed:num=4;flag=1;//第二列按下
  118. break;
  119. case 0xdd:num=5;flag=1;//第三列按下
  120. break;
  121. }
  122. while(temp!=0xf8)
  123. {
  124. temp=P1;
  125. temp=temp&0xf8;
  126. }
  127. }
  128. }
  129. P1=0xfb;//選定第三行
  130. temp=P1;
  131. temp=temp&0xf8;
  132. while(temp!=0xf8)
  133. {
  134. delay(15);
  135. temp=P1;
  136. temp=temp&0xf8;
  137. while(temp!=0xf8)
  138. {
  139. temp=P1;
  140. switch(temp)
  141. {
  142. case 0xf3:num=6;flag=1;break;
  143. case 0xeb:num=7;flag=1;break;
  144. case 0xdb:num=8;flag=1;break;
  145. }
  146. while(temp!=0xf8)
  147. {
  148. temp=P1;
  149. temp=temp&0xf8;
  150. }
  151. }
  152. }
  153. return(num);
  154. }
  155. void main()
  156. {
  157. uchar m=0,w=0;
  158. init();//LCD初始化
  159. write_com(0x80); //第一行顯示
  160. for(r=0;r<15;r++)
  161. {
  162. write_data(table1[r]);
  163. delay(5);
  164. }
  165. write_com(0x80+0x40);//第二行顯示
  166. for(r=0;r<15;r++)
  167. {
  168. write_data(table2[r]);
  169. delay(5);
  170. }
  171. write_com(0x0c);
  172. do
  173. {keyscan();}
  174. while(num!=8); //等待開鎖鍵按下
  175. mima(); //密碼輸入處理函數
  176. while((pswd[m]==init_pswd[m])&m<4)//密碼比較
  177. {
  178. m++;
  179. }
  180. if(m>=4)//密碼正確
  181. {
  182. P2_7=0;//開鎖指示燈亮
  183. keyscan();
  184. while(flag==1&&num==6);//是否修改密碼//
  185. mima1();//修改密碼函數
  186. }
  187. else//密碼有誤
  188. {
  189. m=0;
  190. write_com(0x80+0x40);//顯示第二行
  191. for(r=0;r<14;r++)
  192. {
  193. delay(20);
  194. write_data(table4[r]);
  195. }
  196. delay(3000);
  197. init();
  198. for(r=0;r<16;r++)
  199. {
  200. delay(20);
  201. write_data(table6[r]);
  202. }
  203. delay(3000);
  204. mima();
  205. while((pswd[m]==init_pswd[m])&m<4)
  206. {m++;}
  207. if(m>=4)
  208. {
  209. P2_7=0;
  210. mima1();
  211. }
  212. else
  213. {
  214. m=0;
  215. write_com(0x80+0x40);
  216. for(r=0;r<14;r++)
  217. {
  218. delay(20);
  219. write_data(table4[r]);
  220. }
  221. delay(3000);
  222. init();
  223. for(r=0;r<14;r++)
  224. {
  225. delay(20);
  226. write_data(table7[r]);
  227. }
  228. delay(3000);
  229. mima();
  230. while((pswd[m]==init_pswd[m])&m<4)
  231. {m++;}
  232. if(m>=4)
  233. {
  234. P2_7=0;
  235. mima1();
  236. }
  237. else
  238. {
  239. init();
  240. write_com(0x80+0x40);
  241. for(r=0;r<13;r++)
  242. {
  243. delay(20);
  244. write_data(table9[r]);
  245. }
  246. write_com(0x0c);
  247. while(1)
  248. {
  249. P2_6=~P2_6;
  250. delay(30);
  251. Alarm(90);
  252. Alarm(120);
  253. }
  254. }
  255. }
  256. }
  257. }
  258. void mima()//密碼輸入程序
  259. {
  260. uchar w=0;
  261. init();
  262. for(r=0;r<9;r++)
  263. {
  264. delay(20);
  265. write_data(table10[r]);
  266. }
  267. do
  268. {
  269. flag=0;
  270. keyscan();
  271. write_com(0x80+9+w);
  272. if(flag==1&&num<=5)
  273. {
  274. pswd[w]=num;
  275. write_data(table3[num]);
  276. w++;//輸入密碼
  277. if(w==4)
  278. write_com(0x0c);
  279. }
  280. if(flag==1&&num==7) //刪除誤輸入的密碼,即返回上一步.
  281. {
  282. w--; //刪除密碼
  283. if(w==255)//刪除完密碼
  284. w=w+1;
  285. write_com(0x80+9+w);
  286. write_data(table11[w+1]);
  287. if(flag==1&&num<=3)
  288. {
  289. pswd[w]=num;
  290. write_data(table3[num]);
  291. }
  292. }
  293. }
  294. while(w<=3);
  295. }
  296. void mima1()
  297. {
  298. uchar f=0,n=0,d=0;
  299. write_com(0x80+0x40);
  300. for(r=0;r<14;r++)
  301. {
  302. delay(20);
  303. write_data(table5[r]);
  304. }
  305. delay(3000);
  306. do
  307. {
  308. num=9;//按鍵不顯示,鎖住按鍵
  309. keyscan();
  310. }
  311. while(num!=6);
  312. if(flag==1&&num==6)
  313. {
  314. init();
  315. P2_7=0;
  316. for(r=0;r<15;r++)
  317. {
  318. delay(20);
  319. write_data(table8[r]);
  320. }
  321. write_com(0x0c);
  322. write_com(0x80+0x40+n);
  323. write_com(0x0e);
  324. }
  325. do
  326. {
  327. num=9;//按鍵不顯示, 鎖住按鍵
  328. keyscan();
  329. write_com(0x80+0x40+n);
  330. if(flag==1&&num<=5)
  331. {
  332. init_pswd[n]=num;
  333. write_data(table3[num]);
  334. n++;
  335. if(n==4)
  336. write_com(0x0c);
  337. }
  338. if(flag==1&&num==7)//刪除 誤輸入的密碼,即返回上一步
  339. {
  340. n--;
  341. if(n==255)
  342. n=n+1;
  343. write_com(0x80+0x40+n);
  344. write_data(table11[n]);
  345. if(flag==1&&num<=3)//顯示0-5鍵值
  346. {
  347. pswd[n]=num;

  348. write_data(table3[num]);
  349. }
  350. }
  351. }
  352. while(n<=3);
  353. init();
  354. for(r=0;r<12;r++)
  355. {
  356. delay(20);
  357. write_data(table13[r]);
  358. }
  359. do
  360. {
  361. flag=0;//鎖住按鍵
  362. keyscan();
  363. write_com(0x80+0x40+d);
  364. if(flag==1&&num<=5)
  365. {
  366. pswd[d]=num;
  367. write_data(table3[num]);
  368. d++;
  369. if(d==4)
  370. write_com(0x0c);
  371. }
  372. if(flag==1&&num==7)//刪除誤輸入的密碼,即返回上一步.
  373. {
  374. d--;
  375. if(d==255)
  376. d=d+1;
  377. write_com(0x80+0x40+d);
  378. write_data(table11[d+1]);
  379. ……………………

  380. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
新建文件夾 (3).zip (101.18 KB, 下載次數: 36)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情欧美激情在线五月 | 看亚洲a级一级毛片 | 久久午夜国产精品www忘忧草 | 亚洲 欧美 另类 综合 偷拍 | 日韩综合在线视频 | 免费99视频 | 国产精品亚洲视频 | 精品国产欧美 | 日韩精品一区二区三区中文在线 | 久久久视频在线 | 日韩美女一区二区三区在线观看 | 在线三级电影 | 国产精品久久久久不卡 | 久久91精品国产一区二区三区 | 亚洲视频二区 | 久久er精品| 久久免费精品 | 国产精品揄拍一区二区 | 日韩三级在线观看 | 久草在线在线精品观看 | 国产精品96久久久久久 | 一级黄色片免费在线观看 | 偷拍亚洲色图 | 亚洲视频一区二区三区四区 | 久久av网| 久久久久国产精品一区二区 | 久久爱黑人激情av摘花 | 在线中文字幕视频 | 日美女逼逼| 午夜精品久久久久久久星辰影院 | 一区二区三区不卡视频 | 无码一区二区三区视频 | 亚洲欧洲激情 | 久久久久久黄 | 一区二区三区四区国产 | 久久久www | 国产亚洲一区二区在线观看 | 国产日韩精品视频 | 久久伦理中文字幕 | 精品粉嫩超白一线天av | 国产美女一区二区 |