標(biāo)題: 基于51單片機(jī)的電子密碼鎖程序 [打印本頁(yè)]
作者: Straw 時(shí)間: 2020-10-17 21:00
標(biāo)題: 基于51單片機(jī)的電子密碼鎖程序
結(jié)果圖:
4.png (839.58 KB, 下載次數(shù): 44)
下載附件
2020-10-17 20:57 上傳
一、目的概述(收集相關(guān)資料、選設(shè)計(jì)方案、電路設(shè)計(jì)):
本設(shè)計(jì)是以STC89C52單片機(jī)為控制核心的電子密碼鎖,屬于單片機(jī)的應(yīng)用。做本設(shè)計(jì)有助于對(duì)單片機(jī)矩陣鍵盤,數(shù)碼管以及串行通信原理的深入了解。電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的青睞。
系統(tǒng)設(shè)計(jì)方案為:
(1)系統(tǒng)設(shè)置6 位密碼,密碼通過(guò)鍵盤輸入,若密碼正確,則將鎖打開(kāi)。
(2)密碼可由用戶自己設(shè)定,在開(kāi)鎖狀態(tài)下,用戶可自行修改密碼。
(3)具有自動(dòng)報(bào)警功能,密碼輸入錯(cuò)誤時(shí),報(bào)警由揚(yáng)聲器發(fā)出“滴滴”報(bào)警聲。而密碼輸入正確則是“叮咚”聲。
系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖:
屏幕截圖 2020-10-17 205131.png (26.31 KB, 下載次數(shù): 40)
下載附件
2020-10-17 20:52 上傳
本設(shè)計(jì)由主控芯片51單片機(jī),單片機(jī)時(shí)鐘電路,鍵盤,數(shù)碼管組成。單片負(fù)責(zé)控制整個(gè)系統(tǒng)的控制執(zhí)行過(guò)程。開(kāi)鎖成功由數(shù)碼管顯示OPEN,以及蜂鳴器“叮咚”表示,開(kāi)鎖失敗由數(shù)碼管顯示Err,以及蜂鳴器“滴滴”表示。
二、實(shí)驗(yàn)原理圖
電路設(shè)計(jì):
2.png (180.44 KB, 下載次數(shù): 36)
下載附件
2020-10-17 20:54 上傳
1.png (96.78 KB, 下載次數(shù): 49)
下載附件
2020-10-17 20:54 上傳
程序設(shè)計(jì):(只展示核心部分)
主程序
1. //4×4 鍵盤及8 位數(shù)碼管顯示構(gòu)成的電子密碼鎖
2. void main() //主程序
3. {
4. uchar key;
5. Timer0_Init();
6. while(1)
7. {
8. key = KeyScan();
9. password(key);
10. }
11. }
核心程序:數(shù)碼管的動(dòng)態(tài)掃描顯示
12. void Display()
13. {
14. uchar i;
15. Segment_sel=0x00;//消隱
16. switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
17. {
18. case(0):
19. LSA=0;LSB=0;LSC=0; break;
20. case(1):
21. LSA=1;LSB=0;LSC=0; break;
22. case(2):
23. LSA=0;LSB=1;LSC=0; break;
24. case(3):
25. LSA=1;LSB=1;LSC=0; break;
26. case(4):
27. LSA=0;LSB=0;LSC=1; break;
28. case(5):
29. LSA=1;LSB=0;LSC=1; break;
30. }
31. }
核心程序:矩陣鍵盤的掃描輸入
32. uchar KeyScan()
33. {
34. for(i=0;i<8;i++)
35. {
36. P1 = P1Pin[ i];
37. Button = P1;
38. if(Button != P1Pin[ i])
39. {
40. Delayms(5);
41. Button = P1;
42. if(Button != P1Pin[ i])
43. {
44. KeyState=1;
45. key8 = Button;
46. }
47. while(Button != P1Pin[ i])
48. { Button = P1; }
49. }
50. }
51. switch(key8)
52. {
53. case 0x77:{key = 1;break;}
54. case 0x7b:{key = 2;break;}
55. case 0x7d:{key = 3;break;}
56. case 0xb7:{key = 4;break;}
57. case 0xbb:{key = 5;break;}
58. case 0xbd:{key = 6;break;}
59. case 0xd7:{key = 7;break;}
60. case 0xdb:{key = 8;break;}
61. case 0xdd:{key = 9;break;}
62. case 0xeb:{key = 0;break;} //0
63. case 0x7e:{key = 10;break;} //÷
64. case 0xbe:{key = 11;break;} //×
65. case 0xde:{key = 12;break;} //+
66. case 0xee:{key = 13;break;} //-
67. case 0xed:{key = 14;break;} //=
68. case 0xe7:{key = 15;break;} //ENTER
69. default:{key = 0xff;break;}
70. }
71. return key;
72. }
核心程序:輸入密碼以及校對(duì)和處理
73. void password(uchar key)//0~9 數(shù)字鍵,10 輸入密碼,11 設(shè)置密碼,12 刪除上一個(gè)數(shù),13 重新輸入 15 確定
74. {
75. uchar i=0;
76. if(KeyState==1)
77. {
78. switch(state)
79. {
80. case 0:
81. {
82. if(key == 10)
83. {
84. state = 1;
85. LSA=1;LSB=1;LSC=1;
86. Segment_sel=0xff; //顯示8
87. }
88. else if(key == 11)
89. {
90. state = 2;
91. LSA=1;LSB=1;LSC=1;
92. Segment_sel=0xfd; //顯示P
93. }
94. break;
95. }
96. case 1:
97. {
98. if(key>=0 && key <= 9) //輸入
99. {
100. InPassword[5]=InPassword[4];
101. InPassword[4]=InPassword[3];
102. InPassword[3]=InPassword[2];
103. InPassword[2]=InPassword[1];
104. InPassword[1]=InPassword[0];
105. InPassword[0]=smgduan[key];
106. KeyState=0;
107. }
108. else if(key == 15) //確定
109. {
110. if(Compare(InPassword))
111. {
112. for(i=17;i<23;i++)
113. InPassword[ i]=smgduan;
114. Delayms(1000);
115. }//open
116. else
117. {
118. for(i=23;i<27;i++)
119. InPassword[ i]=smgduan;
120. Delayms(1000);
121. }//err
122. state = 0;
123. }
124. else if(key == 13) //重新輸入
125. {
126. for(i=0;i<6;i++)
127. InPassword[ i] = 0xff; // 全亮
128. Delayms(1000);
129. state = 0;
130. }
131. break;
132. }
133. else//如果沒(méi)有按鍵按下
134. {
135. if(state == 0)
136. {
137. Segment_sel= 0x00;// 不顯示
138. }
139. }
140. }
C語(yǔ)言代碼51hei下載地址:
電子密碼鎖程序.zip
(1.79 KB, 下載次數(shù): 92)
2020-10-17 20:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: after. 時(shí)間: 2021-2-26 15:57
你好,請(qǐng)問(wèn)我下載以后為什么蜂鳴器一直叫,按鍵也沒(méi)效果
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |