結果圖:
4.png (839.58 KB, 下載次數: 44)
下載附件
2020-10-17 20:57 上傳
一、目的概述(收集相關資料、選設計方案、電路設計): 本設計是以STC89C52單片機為控制核心的電子密碼鎖,屬于單片機的應用。做本設計有助于對單片機矩陣鍵盤,數碼管以及串行通信原理的深入了解。電子鎖由于其保密性高,使用靈活性好,安全系數高,受到了廣大用戶的青睞。 系統設計方案為: (1)系統設置6 位密碼,密碼通過鍵盤輸入,若密碼正確,則將鎖打開。 (2)密碼可由用戶自己設定,在開鎖狀態下,用戶可自行修改密碼。
(3)具有自動報警功能,密碼輸入錯誤時,報警由揚聲器發出“滴滴”報警聲。而密碼輸入正確則是“叮咚”聲。
系統設計結構圖:
屏幕截圖 2020-10-17 205131.png (26.31 KB, 下載次數: 40)
下載附件
2020-10-17 20:52 上傳
本設計由主控芯片51單片機,單片機時鐘電路,鍵盤,數碼管組成。單片負責控制整個系統的控制執行過程。開鎖成功由數碼管顯示OPEN,以及蜂鳴器“叮咚”表示,開鎖失敗由數碼管顯示Err,以及蜂鳴器“滴滴”表示。
二、實驗原理圖 電路設計:
2.png (180.44 KB, 下載次數: 36)
下載附件
2020-10-17 20:54 上傳
1.png (96.78 KB, 下載次數: 49)
下載附件
2020-10-17 20:54 上傳
程序設計:(只展示核心部分) 主程序
1. //4×4 鍵盤及8 位數碼管顯示構成的電子密碼鎖 2. void main() //主程序 3. { 4. uchar key; 5. Timer0_Init(); 6. while(1) 7. { 8. key = KeyScan(); 9. password(key); 10. } 11. }
核心程序:數碼管的動態掃描顯示
12. void Display() 13. { 14. uchar i; 15. Segment_sel=0x00;//消隱 16. switch(i) //位選,選擇點亮的數碼管, 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. }
核心程序:輸入密碼以及校對和處理
73. void password(uchar key)//0~9 數字鍵,10 輸入密碼,11 設置密碼,12 刪除上一個數,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//如果沒有按鍵按下 134. { 135. if(state == 0) 136. { 137. Segment_sel= 0x00;// 不顯示 138. } 139. } 140. }
C語言代碼51hei下載地址:
電子密碼鎖程序.zip
(1.79 KB, 下載次數: 92)
2020-10-17 20:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|