結(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
|