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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1015|回復: 2
收起左側

要怎么把單片機四位數的密碼鎖改成七位數?附程序

[復制鏈接]
ID:1119231 發表于 2024-5-4 15:28 來自手機 | 顯示全部樓層 |閱讀模式
  1. #include <reg51.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. //sbit 特殊功能位聲明:聲明某特殊功能寄存器中的一位
  5. #define key P1 //按鍵io口
  6. sbit fen=P3^0; //蜂鳴器io口
  7. sbit rs=P3^1; //LCD控制口
  8. sbit rw=P3^2;
  9. sbit e=P3^3;
  10. sbit led=P3^4; //LED燈io口

  11. //bit 位變量聲明:定義一個位變量的值
  12. u8 keyz=17,j=0,biao1=0,a=10,b=10,c=10,d=10;
  13. bit biao=0;
  14. u16 zh;

  15. u8 shu[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
  16. 0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
  17. u8 zi[]={"lnput password:"};
  18. u8 num[]={"0123456789ABCDEF"};


  19. void delay(u16 i){
  20. while(i--);
  21. }

  22. /*蜂鳴器*/
  23. void Fen(u8 a,b) //蜂鳴器發聲函數
  24. {
  25. u8 i,j;
  26. for(i=0;i<a;i++)
  27. {
  28. for(j=0;j<100;j++)
  29. {fen=~fen;delay(b);}
  30.   }
  31. }


  32. /*LCD*/
  33. void writecom(u8 com){//LCD寫指令
  34. rs=0;
  35. rw=0;
  36. e=0;
  37. P0=com;
  38. delay(5);
  39. e=1;
  40. e=0;
  41. }

  42. void writedat(u8 dat){//LCD寫數據
  43. rs=1;
  44. rw=0;
  45. e=0;
  46. P0=dat;
  47. delay(5);
  48. e=1;
  49. e=0;
  50. }

  51. void initlcd(){ //LCD初始化函數
  52. writecom(0x38); //顯示模式設置
  53. writecom(0x0c);
  54. writecom(0x06);

  55. }

  56. void xian(){ //LCD顯示數字函數
  57. writedat(num[keyz]);
  58. if(a==10){a=keyz; } //對abcd,四位數的單獨賦值
  59. else if(b==10){b=keyz;}
  60. else if(c==10){c=keyz;}
  61. else{d=keyz;}
  62. if(j!=3){j++;}biao=0;

  63. }

  64. /*鍵盤*/
  65. void Key(){u8 a=0; //矩形式鍵盤函數

  66. if(key!=0x0f){delay(1000);
  67. if(key!=0x0f){
  68. key=0x0f;
  69. switch(key){
  70. case 0x07: keyz=0;biao=1;break;
  71. case 0x0b: keyz=1;biao=1;break;
  72. case 0x0d: keyz=2;biao=1;break;
  73. case 0x0e: keyz=3;biao=1;break;
  74. }
  75. key=0xf0;
  76. switch(key){
  77. case 0x70: keyz=keyz;biao=1;break;
  78. case 0xb0: keyz=keyz+4;biao=1;break;
  79. case 0xd0: keyz=keyz+8;biao=1;break;
  80. case 0xe0: keyz=keyz+12;biao=1;break;
  81. }

  82. }
  83. while((a<50)&&(key!=0xf0)){a++;delay(10000);}
  84. }
  85. }

  86. void shi(){u8 i; // 按鍵值判斷函數
  87. if(biao&&keyz!=15){ //判斷標志位biao是否為1,為1則有按鍵操作并且按鍵的值不等于15

  88. writecom(0x80+0x40+j); //數字顯示位置進行累加操作
  89. if(j<0){j=0;} //數字顯示位置邊界
  90. switch(keyz){ //switch判斷按鍵并執行對應操作
  91. case 0:xian(); break;
  92. case 1:xian(); break;
  93. case 2:xian(); break;
  94. case 3:xian(); break;
  95. case 4:xian(); break;
  96. case 5:xian(); break;
  97. case 6:xian(); break;
  98. case 7:xian(); break;
  99. case 8:xian(); break;
  100. case 9:xian(); break;
  101. case 10:writedat(num[keyz]);

  102. j++;biao=0;break;
  103. case 11:writedat(num[keyz]);

  104. j++;biao=0;break;
  105. case 12:
  106. biao1=0; //重置標志位biao1,上鎖
  107. biao=0;break;
  108. case 13:writecom(0x01);delay(1000); //全屏清除
  109. for(i=0;i<sizeof(zi);i++){
  110. writecom(0x80+i);
  111. writedat(zi[i]);}
  112. j=0;biao=0;break;
  113. case 14:  //對當前數字位刪除的操作
  114. writedat(' ');
  115. j--;
  116. writecom(0x80+0x40+j);writedat(' ');
  117. biao=0;break;
  118. case 15: //確定按鍵
  119. j++;biao=0;break;
  120.   }
  121. }
  122. if(keyz==15){  //判斷按鍵值如果等于15,便視為按下確定鍵
  123. writecom(0x01);delay(1000);
  124. zh=a*1000+b*100+c*10+d; //將ABCD,四位數合并并進行判斷是否為正確密碼
  125. if(zh==1234){ //設密碼為1234
  126. j=0;
  127. biao1=1; //將biao1標志位置1便為密碼正確
  128. keyz=17;  //使按鍵值跳出最大值15便不會循壞顯示
  129. }
  130. else{
  131. j=0;
  132. biao1=0; //反之密碼錯誤
  133. keyz=17;
  134. Fen(20,200);  //蜂鳴器報警
  135. }
  136. zh=0;a=10,b=10,c=10,d=10; //重置ABCD變量
  137. for(i=0;i<sizeof(zi);i++){
  138. writecom(0x80+i);
  139. writedat(zi[i]); }
  140. }
  141. }

  142. void main(){u8 i; led=1;
  143. initlcd(); //LCD初始化函數
  144. for(i=0;i<sizeof(zi);i++){
  145. writecom(0x80+i);
  146. writedat(zi[i]); }
  147. while(1){
  148.   Key(); //定義鍵盤函數
  149. shi(); //按鍵判斷函數,燈亮或報警
  150. P2=shu[keyz]; //數碼管顯示當前輸入值
  151. if(biao1==1){ led=0;  //判斷標志位biao1 為1則密碼正確顯示ok
  152. writecom(0x80+0x40+10);
  153. writedat('O');
  154. writecom(0x80+0x41+10);
  155. writedat('K'); }

  156. else if(biao1==0){led=1; //biao1為0則顯示密碼錯誤顯示no
  157. writecom(0x80+0x40+10);
  158. writedat('N');
  159. writecom(0x80+0x41+10);
  160. writedat('O');}
  161.   }
  162. }
復制代碼
回復

使用道具 舉報

ID:110875 發表于 2024-5-5 12:46 | 顯示全部樓層
改程序就行了
回復

使用道具 舉報

ID:69038 發表于 2024-5-6 07:26 | 顯示全部樓層
  1. if(key!=0x0f){
  2. key=0x0f;
  3. switch(key){
  4. case 0x07: keyz=0;biao=1;break;
  5. case 0x0b: keyz=1;biao=1;break;
  6. case 0x0d: keyz=2;biao=1;break;
  7. case 0x0e: keyz=3;biao=1;break;
  8. }
  9. key=0xf0;
  10. switch(key){
  11. case 0x70: keyz=keyz;biao=1;break;
  12. case 0xb0: keyz=keyz+4;biao=1;break;
  13. case 0xd0: keyz=keyz+8;biao=1;break;
  14. case 0xe0: keyz=keyz+12;biao=1;break;
  15. }

  16. }
復制代碼

這段代碼會不會是個寂?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩电影免费观看中文字幕 | www亚洲精品 | 蜜桃臀av一区二区三区 | 国产精品成人在线播放 | 国产精品久久久久久久免费大片 | 一区二区三区欧美在线 | 免费av一区二区三区 | 中日av| 激情a | 国产福利资源在线 | 亚洲视频在线观看一区二区三区 | 日韩在线播放一区 | 国产亚洲精品成人av久久ww | 亚洲欧美一区二区三区在线 | 久久久www成人免费精品 | 中文精品视频 | 欧美极品一区二区 | 中文字幕亚洲在线 | 成人片免费看 | 欧美视频一区 | 精品少妇一区二区三区在线播放 | www.亚洲成人网 | 日韩免费av| 国产偷久久一级精品60部 | av黄色在线 | 亚洲精品乱码久久久久久蜜桃 | 精品无码久久久久久国产 | 亚洲一区免费视频 | www.嫩草 | 亚洲欧美中文日韩在线v日本 | 91在线看视频 | 在线一区| 99国产精品一区二区三区 | 最新中文在线视频 | 成人av在线播放 | 国产精品久久久久久妇女 | 羞羞的视频免费观看 | 国产三区四区 | 日韩国产三区 | 久久久网 | 天天插天天狠天天透 |