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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1053|回復(fù): 2
收起左側(cè)

要怎么把單片機(jī)四位數(shù)的密碼鎖改成七位數(shù)?附程序

[復(fù)制鏈接]
ID:1119231 發(fā)表于 2024-5-4 15:28 來(lái)自手機(jī) | 顯示全部樓層 |閱讀模式
  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 位變量聲明:定義一個(gè)位變量的值
  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) //蜂鳴器發(fā)聲函數(shù)
  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寫(xiě)指令
  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寫(xiě)數(shù)據(jù)
  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初始化函數(shù)
  52. writecom(0x38); //顯示模式設(shè)置
  53. writecom(0x0c);
  54. writecom(0x06);

  55. }

  56. void xian(){ //LCD顯示數(shù)字函數(shù)
  57. writedat(num[keyz]);
  58. if(a==10){a=keyz; } //對(duì)abcd,四位數(shù)的單獨(dú)賦值
  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. /*鍵盤(pán)*/
  65. void Key(){u8 a=0; //矩形式鍵盤(pán)函數(shù)

  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; // 按鍵值判斷函數(shù)
  87. if(biao&&keyz!=15){ //判斷標(biāo)志位biao是否為1,為1則有按鍵操作并且按鍵的值不等于15

  88. writecom(0x80+0x40+j); //數(shù)字顯示位置進(jìn)行累加操作
  89. if(j<0){j=0;} //數(shù)字顯示位置邊界
  90. switch(keyz){ //switch判斷按鍵并執(zhí)行對(duì)應(yīng)操作
  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; //重置標(biāo)志位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:  //對(duì)當(dāng)前數(shù)字位刪除的操作
  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,四位數(shù)合并并進(jìn)行判斷是否為正確密碼
  125. if(zh==1234){ //設(shè)密碼為1234
  126. j=0;
  127. biao1=1; //將biao1標(biāo)志位置1便為密碼正確
  128. keyz=17;  //使按鍵值跳出最大值15便不會(huì)循壞顯示
  129. }
  130. else{
  131. j=0;
  132. biao1=0; //反之密碼錯(cuò)誤
  133. keyz=17;
  134. Fen(20,200);  //蜂鳴器報(bào)警
  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初始化函數(shù)
  144. for(i=0;i<sizeof(zi);i++){
  145. writecom(0x80+i);
  146. writedat(zi[i]); }
  147. while(1){
  148.   Key(); //定義鍵盤(pán)函數(shù)
  149. shi(); //按鍵判斷函數(shù),燈亮或報(bào)警
  150. P2=shu[keyz]; //數(shù)碼管顯示當(dāng)前輸入值
  151. if(biao1==1){ led=0;  //判斷標(biāo)志位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則顯示密碼錯(cuò)誤顯示no
  157. writecom(0x80+0x40+10);
  158. writedat('N');
  159. writecom(0x80+0x41+10);
  160. writedat('O');}
  161.   }
  162. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:69038 發(fā)表于 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. }
復(fù)制代碼

這段代碼會(huì)不會(huì)是個(gè)寂?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人h片在线观看 | 亚洲高清在线观看 | 天天综合日日夜夜 | 午夜看片 | 欧美a在线 | 久久久久国产一区二区三区四区 | 蜜桃黄网 | 国产精品视频中文字幕 | 情侣酒店偷拍一区二区在线播放 | 91精品国产综合久久久久久漫画 | 欧美一二区| 欧美精品一二三 | 欧美日韩亚洲一区二区 | 国产婷婷在线视频 | 色婷婷婷婷色 | 日本精品视频在线 | 欧美一区免费 | 国产精品久久久久久久久久久久久久 | 亚洲v日韩v综合v精品v | 日韩精品久久久 | 日本午夜网站 | 人人爽人人爽 | 992tv人人草 久久精品超碰 | 毛片av免费在线观看 | 久久久久久国产精品三区 | 国产午夜高清 | 国产精品免费大片 | 亚洲一区二区三区四区五区午夜 | 日日天天| 国产精品不卡一区二区三区 | 人成在线 | 五月天婷婷综合 | 夫妻午夜影院 | 欧美日韩在线免费 | av中文天堂 | 69性欧美高清影院 | 国产成人精品一区二区 | 日本一区二区影视 | 亚洲精品一区二三区不卡 | 91操操操| 亚洲国产精品久久久久 |