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

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

QQ登錄

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

搜索
查看: 14025|回復(fù): 25
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的電子密碼鎖proteus仿真加源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
(1)設(shè)置6位密碼,密碼通過(guò)鍵盤輸入,若密碼正確,則將鎖打開(kāi),初始化密碼為(123456)。
(2)密碼可以由用戶自己修改設(shè)定(支持6位密碼),鎖打開(kāi)后才能修改密碼。修改密碼之前必須再次輸入密碼,在輸入新密碼時(shí)候需要二次確認(rèn),以防止誤操作。
(3)報(bào)警、鎖定鍵盤功能。密碼輸入錯(cuò)誤數(shù)碼顯示器會(huì)出現(xiàn)錯(cuò)誤提示,若密碼輸入錯(cuò)誤次數(shù)超過(guò)4次,蜂鳴器報(bào)警并且鎖定鍵盤。
(4)密碼修改后有存儲(chǔ)功能。
(5)一鍵恢復(fù)初始密碼功能。



源程序:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;
  5. sbit beep=P2^4;//蜂鳴器接口
  6. sbit D1=P2^2;//開(kāi)鎖信號(hào)
  7. sbit k1=P3^2;//恢復(fù)初始密碼按鍵
  8. sbit RS=P2^7;//數(shù)據(jù)命令選擇
  9. sbit RW=P2^6;//讀寫控制
  10. sbit E=P2^5;//液晶使能
  11. sbit SDA=P2^1; //數(shù)據(jù)線接口
  12. sbit SCL=P2^0;//時(shí)鐘線接口  
  13. uchar idata table1[6]={1,2,3,4,5,6}; //初始密碼
  14. uchar dd;
  15. uchar aa;//存放密碼錯(cuò)誤的次數(shù),夠三次報(bào)警
  16. uchar bb;
  17. uchar cc;
  18. //延時(shí)子函數(shù)
  19. void delay1(uint z)
  20. {
  21.         uint x,y;
  22.         for(x=0;x<z;x++)
  23.                 for(y=0;y<110;y++);
  24. }
  25. void delay2()
  26. {
  27.         ;;
  28. }
  29. //總線初始化子函數(shù)
  30. void i2cinit()
  31. {
  32.         SDA=1;
  33.         delay2();
  34.         SCL=1;
  35.         delay2();
  36. }
  37. //啟動(dòng)信號(hào)子函數(shù)
  38. void start()
  39. {
  40.         SDA=1;
  41.         SCL=1;
  42.         delay2();
  43.         SDA=0;
  44.         delay2();
  45. }
  46. //停止信號(hào)子函數(shù)
  47. void stop()
  48. {
  49.         SDA=0;
  50.         delay2();
  51.         SCL=1;
  52.         delay2();
  53.         SDA=1;
  54.         delay2();
  55. }
  56. //應(yīng)答信號(hào)子函數(shù)
  57. void respons()
  58. {
  59.         uchar i=0;
  60.         SCL=1;
  61.         delay2();
  62.         while(SDA==1&&i<255)//等待應(yīng)答,過(guò)一段時(shí)間不應(yīng)答退出循環(huán)
  63.                 i++;
  64.         SCL=0;
  65.         delay2();
  66. }
  67. //寫一個(gè)字節(jié)子函數(shù)
  68. void writebyte(uchar date)
  69. {
  70.         uchar i,temp;
  71.         temp=date;
  72.         for(i=0;i<8;i++)
  73.         {
  74.                 temp<<=1;//temp左移一位后高位進(jìn)CY
  75.                 SCL=0;
  76.                 delay2();
  77.                 SDA=CY;
  78.                 delay2();
  79.                 SCL=1;
  80.                 delay2();
  81.         }       
  82.         SCL=0;//應(yīng)答信號(hào)中SCL = 1,所以這里要置0
  83.         delay2();
  84.         SDA=1;//用完要釋放數(shù)據(jù)總線
  85.         delay2();
  86. }
  87. //讀一個(gè)字節(jié)子函數(shù)
  88. uchar readbyte()
  89. {
  90.         uchar i,k;
  91.         SCL=0;
  92.         delay2();
  93.         SDA=1;
  94.         for(i=0;i<8;i++)
  95.         {
  96.                 SCL=1;       
  97.                 delay2();
  98.                 k=(k<<1)|SDA; //和最低位或,一位位送到K
  99.                 SCL=0;
  100.                 delay2();
  101.         }
  102.         delay2();
  103.         return k;
  104. }
  105. //向地址寫一個(gè)字節(jié)數(shù)據(jù)子函數(shù)
  106. void write_add(uchar address,uchar date)
  107. {
  108.         start();
  109.         writebyte(0xa0);//A0,A1,A2接地,AT24C02芯片地址為1010,送控制字為1010A2A1A0R/~W
  110.         respons();
  111.         writebyte(address);
  112.         respons();
  113.         writebyte(date);
  114.         respons();
  115.         stop();
  116. }
  117. //向地址讀一個(gè)字節(jié)數(shù)據(jù)子函數(shù)
  118. uchar read_add(uchar address)
  119. {
  120.         uchar date;
  121.         start();
  122.         writebyte(0xa0);//A0,A1,A2接地,AT24C02芯片地址為1010,送控制字為1010A2A1A0R/~W
  123.         respons();
  124.         writebyte(address);
  125.         respons();
  126.         start();
  127.         writebyte(0xa1);//A0,A1,A2接地,AT24C02芯片地址為1010,送控制字為1010A2A1A0R/~W
  128.         respons();
  129.         date=readbyte();
  130.         stop();
  131.         return date;
  132. }
  133. //向地址寫n個(gè)字節(jié)數(shù)據(jù)子函數(shù)
  134. void write_n_add(uchar *p,uchar address,uchar n)
  135. {
  136.         uchar i;
  137.         for(i=0;i<n;i++)
  138.         {
  139.                 write_add((address+i),*(p+i));
  140.                 delay1(20);//一定要適當(dāng)延時(shí),不然寫不進(jìn)去
  141.         }
  142. }
  143. //向地址讀n個(gè)字節(jié)數(shù)據(jù)子函數(shù)
  144. void read_n_add(uchar *p,uchar address,uchar n)
  145. {
  146.         uchar i;
  147.         for(i=0;i<n;i++)
  148.         {
  149.                 *(p+i)=read_add(address+i);       
  150.         }
  151. }
  152. //LCD1602液晶讀忙子函數(shù)
  153. bit LCD1602_busy()
  154. {                          
  155.     bit a;
  156.     RS=0;
  157.     RW=1;
  158.     E=1;
  159.     _nop_();
  160.     _nop_();
  161.     a=(bit)(P0&0x80);
  162.     E=0;
  163.     return a;
  164. }
  165. //LCD1602液晶寫命令子函數(shù)
  166. void write_com(uchar com)
  167. {
  168.         while(LCD1602_busy());
  169.     RW=0;
  170.         RS=0;
  171.     E=0;
  172.         P0=com;
  173.         delay1(5);
  174.     E=1;
  175.         delay1(5);
  176.     E=0;
  177. }
  178. //LCD1602液晶寫數(shù)據(jù)子函數(shù)
  179. void write_date(uchar date)
  180. {
  181.         while(LCD1602_busy());
  182.     RW=0;
  183.           RS=1;
  184.     E=0;
  185.           P0=date;
  186.         delay1(5);
  187.     E=1;
  188.         delay1(5);
  189.     E=0;         
  190. }
  191. //寫一個(gè)字符子函數(shù)
  192. void write_1_char(uchar zifu)
  193. {
  194.         write_date(zifu);       
  195. }
  196. //向液晶寫n個(gè)字符子函數(shù)
  197. void write_n_char(uchar zifu[])
  198. {
  199.         uchar i;
  200.         for(i=0;;i++)
  201.         {
  202.                 write_1_char(zifu[i]);
  203.                 if(zifu[i+1]=='\0')
  204.                         break;
  205.         }
  206. }
  207. //設(shè)置液晶顯示位置子函數(shù)
  208. void LCD1602_pos(uchar x,uchar y)
  209. {
  210.         uchar pos;
  211.         if(x==0)
  212.                 x=0x80;
  213.         else if(x==1)
  214.                 x=0x80+0x40;
  215.         pos=x+y;
  216.         write_com(pos);
  217. }
  218. //LCD1602液晶初始化子函數(shù)
  219. void LCD1602_init()
  220. {
  221.     E=0;
  222.     write_com(0x38);//設(shè)置16x2顯示,5x7點(diǎn)陣,8位數(shù)據(jù)口
  223.     write_com(0x0c);//設(shè)置開(kāi)顯示,不顯示光標(biāo)
  224.     write_com(0x06);//寫一個(gè)字符后地址指針加1
  225.         write_com(0x01);//顯示清0,數(shù)據(jù)指針清0         
  226. }
  227. //報(bào)警子函數(shù)
  228. void baojing1()
  229. {
  230.         int i;
  231.         for(i=0;i<5;i++)
  232.         {
  233.                 beep=1;
  234.                 D1=0;
  235.                 delay1(5);
  236.                 beep=0;
  237.                 D1=1;
  238.                 delay1(5);       
  239.         }
  240. }
  241. void baojing2()
  242. {
  243.         uchar i;
  244.         for(i=0;i<10;i++)
  245.         {
  246.                 baojing1();
  247.         }
  248. }
  249. //矩陣按鍵掃描子函數(shù)
  250. uchar keyscan()
  251. {
  252.         uchar temp,key;
  253.         key=0xff;
  254.         P1=0xfe; //將第一行線置低電平
  255.         temp=P1;//讀JPJK的當(dāng)前狀態(tài)到 temp
  256.         temp&=0xf0;// temp = temp & 0xf0 按位與
  257.         if(temp!=0xf0)
  258.         {
  259.                 delay1(10);//延時(shí)去抖
  260.                 temp=P1;
  261.                 temp&=0xf0;
  262.                    if(temp!=0xf0)//第一行有鍵被按下
  263.                 {
  264.                         temp=P1;//讀被按下的鍵
  265.                         baojing1();
  266.                         switch(temp)
  267.                         {
  268.                                 case 0xee:         key=1;
  269.                                                         break;
  270.                                 case 0xde:         key=2;
  271.                                                         break;
  272.                                 case 0xbe:         key=3;
  273.                                                         break;
  274.                                 case 0x7e:         key=0x0a;
  275.                                                         break;
  276.                         }
  277.                         while(temp!=0xf0)//等待按鍵釋放
  278.                         {
  279.                                 temp=P1;
  280.                                 temp&=0xf0;
  281.                         }
  282.                 }
  283.         }
  284.         P1=0xfd; //將第二行線置低電平
  285.         temp=P1;//讀JPJK的當(dāng)前狀態(tài)到 temp
  286.         temp&=0xf0;// temp = temp & 0xf0
  287.         if(temp!=0xf0)
  288.         {
  289.                 delay1(10);//延時(shí)去抖
  290.                 temp=P1;
  291.                 temp&=0xf0;
  292.                    if(temp!=0xf0)//第二行有鍵被按下
  293.                 {
  294.                         temp=P1;//讀被按下的鍵
  295.                         baojing1();
  296.                         switch(temp)
  297.                         {
  298.                                 case 0xed:         key=4;
  299.                                                         break;
  300.                                 case 0xdd:         key=5;
  301.                                                         break;
  302.                                 case 0xbd:         key=6;
  303.                                                         break;
  304.                                 case 0x7d:         key=0x0b;
  305.                                                         break;
  306.                         }
  307.                         while(temp!=0xf0)//等待按鍵釋放
  308.                         {
  309.                                 temp=P1;
  310.                                 temp&=0xf0;
  311.                         }
  312.                 }
  313.         }
  314.         P1=0xfb; //將第 三行線置低電平
  315.         temp=P1;//讀JPJK的當(dāng)前狀態(tài)到 temp
  316.         temp&=0xf0;// temp = temp & 0xf0
  317.         if(temp!=0xf0)
  318.         {
  319.                 delay1(10);//延時(shí)去抖
  320.                 temp=P1;
  321.                 temp&=0xf0;
  322.                    if(temp!=0xf0)//第三行有鍵被按下
  323.                 {
  324.                         temp=P1;//讀被按下的鍵
  325.                         baojing1();
  326.                         switch(temp)
  327.                         {
  328.                                 case 0xeb:         key=7;
  329.                                                         break;
  330.                                 case 0xdb:         key=8;
  331.                                                         break;
  332.                                 case 0xbb:         key=9;
  333.                                                         break;
  334.                                 case 0x7b:         key=0x0c;
  335.                                                         break;
  336.                         }
  337.                         while(temp!=0xf0)//等待按鍵釋放
  338.                         {
  339.                                 temp=P1;
  340.                                 temp&=0xf0;
  341.                         }
  342.                 }
  343.         }
  344.         P1=0xf7; //將第四行線置低電平
  345.         temp=P1;//讀JPJK的當(dāng)前狀態(tài)到 temp
  346.         temp&=0xf0;// temp = temp & 0xf0
  347.         if(temp!=0xf0)
  348.         {
  349.                 delay1(10);//延時(shí)去抖
  350.                 temp=P1;
  351.                 temp&=0xf0;
  352.                    if(temp!=0xf0)//第四行有鍵被按下
  353.                 {
  354.                         temp=P1;//讀被按下的鍵
  355.                         baojing1();
  356.                         switch(temp)
  357.                         {
  358.                                 case 0xe7:         key=0;
  359.                                                         break;
  360.                                 case 0xd7:         key=0;
  361.                                                         break;
  362.                                 case 0xb7:         key=0x0f;
  363.                                                         break;
  364.                                 case 0x77:         key=0x0d;
  365.                                                         break;
  366.                         }
  367.                         while(temp!=0xf0)//等待按鍵釋放
  368.                         {
  369.                                 temp=P1;
  370.                                 temp&=0xf0;
  371.                         }
  372.                 }
  373.         }
  374.            return key; //返回按下的鍵
  375. }
  376. //比較密碼子函數(shù)
  377. bit sfj1(uchar *string1,uchar *string2)
  378. {
  379.         uchar i;
  380.         for(i=0;i<6;i++)
  381.         {
  382.                 if(string1[i]!=string2[i])
  383.                         return 0;
  384.         }
  385.         return 1;
  386. }
  387. //選擇輸入密碼或修改密碼函數(shù)
  388. uchar step_choose()
  389. {
  390.         uchar key;
  391.         key=0xff;
  392.         write_com(0x06);//寫一個(gè)字符后地址指針加 1
  393.     write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  394.         LCD1602_pos(0,0);
  395.         write_n_char(" Input password ");
  396.         LCD1602_pos(1,0);
  397.         write_n_char("  Press key A  ");       
  398.         while((key!=0x0a)&&(key!=B))
  399.                 key=keyscan();       
  400.         return key;
  401. }
  402. //輸入密碼子函數(shù)
  403. bit input_mima(uchar * mima)
  404. {
  405.         uchar i,key;
  406.         LCD1602_pos(1,0);
  407.         for(i=0;i<7;i++)
  408.         {
  409.                 delay1(100);
  410.                 if(i<6)
  411.                 {
  412.                         do
  413.                         {
  414.                                 key=keyscan();
  415.                         }//掃描鍵盤
  416.                         while(key==0xff);
  417.                         if((key!=0x0f)&&(key!=0x0a)&&(key!=0x0c))//不是退格也不是確認(rèn)鍵
  418.                         {
  419.                                 write_date('*');//是數(shù)字鍵顯示*
  420.                                 mima[i]=key;
  421.                         }
  422.                         if(key==0x0f)//是退格鍵
  423.                         {
  424.                                 if(i>0)
  425.                                 {
  426.                                     LCD1602_pos(1,--i);//光標(biāo)前移一位
  427.                                         write_date(' ');//清空一位
  428.                                         mima[i]=' ';//寫空
  429.                                         LCD1602_pos(1,i);
  430.                                         i--;//密碼計(jì)數(shù)器減一 ,因?yàn)檠h(huán)后會(huì)+1,所以在這里要加1
  431.                                 }
  432.                         }
  433.                         if(key==0x0c)//沒(méi)完成密碼輸入返回錯(cuò)誤信息
  434.                         {
  435.                                 LCD1602_pos(0,0);
  436.                                 return(0);
  437.                         }
  438.                 }
  439.                 if(i==6)
  440.                 {
  441.                         do
  442.                         {
  443.                                 key=keyscan();
  444.                         }
  445.                         while((key!=0x0f)&&(key!=0x0c));
  446.                         if(key==0x0f)
  447.                         {
  448.                                 LCD1602_pos(1,--i);
  449.                                 write_date(' ');
  450.                                 mima[i]=' ';
  451.                                 LCD1602_pos(1,i);
  452.                                 i--;
  453.                         }
  454.                         if(key==0x0c)//密碼位數(shù)正確
  455.                         {
  456.                                 return(1);//返回1正確信號(hào)
  457.                         }
  458.                 }
  459.         }       
  460. }
  461. //密碼處理子函數(shù)
  462. void sfj2()
  463. {
  464.         uchar key,i;
  465.         uchar idata table2[6]={' ',' ',' ',' ',' ',' '};//存放密碼緩沖區(qū)
  466.         uchar idata table3[6]={' ',' ',' ',' ',' ',' '};
  467.         uchar idata table4[6]={' ',' ',' ',' ',' ',' '};
  468.         key=step_choose();
  469.         if(key==0x0a)//A被按下,接收輸入密碼,處理
  470.         {
  471.                 read_n_add(table2,0x00,6);
  472.                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  473.                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  474.                 write_com(0x0f);//顯示光標(biāo)
  475.                 LCD1602_pos(0,0);
  476.                 write_n_char(" press password ");               
  477.                 if(input_mima(table3)) //處理輸入密碼
  478.                 {
  479.                         if(sfj1(table3,table2)) //密碼正確
  480.                         {
  481.                                 LCD1602_pos(0,0);
  482.                                 write_com(0x0c);
  483.                         write_com(0x06);//寫一個(gè)字符后地址指針加 1
  484.                          write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  485.                                 write_n_char(" password right ");
  486.                                 aa=0; //清除密碼錯(cuò)誤次數(shù)
  487.                                 D1=0; //開(kāi)鎖
  488.                                 beep=1; //響一下
  489.                                 delay1(1000);
  490.                                 beep=0;
  491.                                 TR0=1;
  492.                                 cc=1;
  493.                                 while(key!=0x0d&&cc) //D沒(méi)按下一直開(kāi)
  494.                                 {                       
  495.                                         key=keyscan();
  496.                                 }
  497.                                 TR0=0;
  498.                                 D1=1;//D按下了關(guān)鎖
  499.                         }
  500.                         else //密碼 不正確
  501.                         {
  502.                                 LCD1602_pos(0,0);
  503.                                 write_com(0x0c); //關(guān)光標(biāo)
  504.                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  505.                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  506.                                 write_n_char(" password wrong");
  507.                                 delay1(1000);
  508.                                 aa++;
  509.                                 if(aa==4)
  510.                                 {
  511.                                         aa=0;
  512.                                     i=20; //密碼不正確報(bào)警
  513.                                         while(i--)
  514.                                                  baojing2();
  515.                                 }
  516.                         }
  517.                 }
  518.                 else //密碼沒(méi)有輸入正確或完成
  519.                 {
  520.                         LCD1602_pos(0,0);
  521.                         write_com(0x0c); //關(guān)光標(biāo)
  522.                            write_com(0x06);//寫一個(gè)字符后地址指針加 1
  523.                            write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  524.                         write_n_char(" password wrong");
  525.                         delay1(1000);
  526.                         aa++;
  527.                         if(aa==4)
  528.                         {
  529.                                 aa=0;
  530.                             i=20; //密碼不正確報(bào)警
  531.                                 while(i--)
  532.                                          baojing2();
  533.                         }
  534.                 }
  535.         }
  536.         if(key==0x0b)//B被按下,修改密碼
  537.         {
  538.                 read_n_add(table2,0x00,6);
  539.                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  540.                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  541.                 write_com(0x0f);//顯示光標(biāo)
  542.                 LCD1602_pos(0,0);
  543.                 write_n_char(" input password");               
  544.                 write_com(0x0f);//顯示光標(biāo)       
  545.                 if(input_mima(table3)) //處理輸入密碼
  546.                 {
  547.                         if(sfj1(table3,table2)) //密碼正確
  548.                         {
  549.                                 LCD1602_pos(0,0);
  550.                                 write_com(0x0c);
  551.                               write_com(0x06);//寫一個(gè)字符后地址指針加 1
  552.                               write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  553.                                 write_n_char("password right ");
  554.                                 aa=0; //清除密碼錯(cuò)誤次數(shù)
  555.                                 delay1(1500);
  556.                                 dd=1;
  557.                                 while(dd) //下面開(kāi)始修改密碼
  558.                                 {
  559.                                         write_com(0x06);//寫一個(gè)字符后地址指針加 1
  560.                                         write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  561.                                         write_com(0x0f);//顯示光標(biāo)
  562.                                         LCD1602_pos(0,0);
  563.                                         write_n_char("In new password");
  564.                                         delay1(1500);
  565.                                         if(input_mima(table3)) //處理輸入密碼
  566.                                         {
  567.                                                 LCD1602_pos(0,0);
  568.                                                 write_com(0x0c);
  569.                                          write_com(0x06);//寫一個(gè)字符后地址指針加 1
  570.                                          write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  571.                                                 write_n_char("Input new pass"); //確定新密碼
  572.                                                 LCD1602_pos(1,0);
  573.                                                 write_n_char("word again");
  574.                                                 delay1(2000);
  575.                                                 LCD1602_pos(0,0);
  576.                                                 write_com(0x0f);//顯示光標(biāo)
  577.                                          write_com(0x06);//寫一個(gè)字符后地址指針加 1
  578.                                          write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  579.                                                 write_n_char("In new password");                                               
  580.                                                 if(input_mima(table4)) //處理輸入密碼
  581.                                                 {
  582.                                                         if(sfj1(table3,table4)) //密碼正確
  583.                                                         {
  584.                                                                 LCD1602_pos(0,0);
  585.                                                                 write_com(0x0c);
  586.                                                               write_com(0x06);//寫一個(gè)字符后地址指針加 1
  587.                                                               write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  588.                                                                 write_n_char("password has");
  589.                                                                 LCD1602_pos(1,0);
  590.                                                                 write_n_char("change already");
  591.                                                                 write_n_add(table4,0x00,6); //把修改的密碼存進(jìn)24C02
  592.                                                                 delay1(2000);
  593.                                                                 dd=0;
  594.                                                         }
  595.                                                         else //密碼 不正確
  596.                                                         {
  597.                                                                 LCD1602_pos(0,0);
  598.                                                                 write_com(0x0c); //關(guān)光標(biāo)
  599.                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  600.                                                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  601.                                                                 write_n_char("password wrong");
  602.                                                                 delay1(1000);
  603.                                                                 aa++;
  604.                                                                 if(aa==4)
  605.                                                                 {
  606.                                                                         aa=0;
  607.                                                                            i=20; //3次輸入密碼不正確報(bào)警
  608.                                                                         while(i--)
  609.                                                                                 baojing2();
  610.                                                                 }
  611.                                                                 dd=0;
  612.                                                         }
  613.                                                 }
  614.                                                 else //密碼沒(méi)有輸入正確或完成
  615.                                                 {
  616.                                                         LCD1602_pos(0,0);
  617.                                                         write_com(0x0c); //關(guān)光標(biāo)
  618.                                                            write_com(0x06);//寫一個(gè)字符后地址指針加 1
  619.                                                         write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  620.                                                         write_n_char(" password wrong");
  621.                                                         delay1(1000);
  622.                                                         aa++;
  623.                                                         if(aa==4)
  624.                                                         {
  625.                                                                 aa=0;
  626.                                                             i=20; //3次輸入密碼不正確報(bào)警
  627.                                                                 while(i--)
  628.                                                                         baojing2();
  629.                                                         }
  630.                                                 }       
  631.                                         }
  632.                                         else //密碼沒(méi)有輸入正確或完成
  633.                                         {
  634.                                                 LCD1602_pos(0,0);
  635.                                                 write_com(0x0c); //關(guān)光標(biāo)
  636.                                                    write_com(0x06);//寫一個(gè)字符后地址指針加 1
  637.                                                    write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  638.                                                 write_n_char("password wrong");
  639.                                                 delay1(1000);
  640.                                                 dd=0;
  641.                                                 aa++;
  642.                                                 if(aa==4)
  643.                                                 {
  644.                                                         aa=0;
  645.                                                     i=20; //3次輸入密碼不正確報(bào)警
  646.                                                         while(i--)
  647.                                                                  baojing2();
  648.                                                 }
  649.                                         }                                                                       
  650.                                 }
  651.                         }
  652.                         else //密碼 不正確
  653.                         {
  654.                                 LCD1602_pos(0,0);
  655.                                 write_com(0x0c); //關(guān)光標(biāo)
  656.                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  657.                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  658.                                 write_n_char("password wrong");
  659.                                 delay1(1000);
  660.                                 aa++;
  661.                                 if(aa==4)
  662.                                 {
  663.                                         aa=0;
  664.                                     i=20; //3次輸入密碼不正確報(bào)警
  665.                                         while(i--)
  666.                                                  baojing2();
  667.                                 }
  668.                         }
  669.                 }
  670.                 else //密碼沒(méi)有輸入正確或完成
  671.                 {
  672.                         LCD1602_pos(0,0);
  673.                         write_com(0x0c); //關(guān)光標(biāo)
  674.                            write_com(0x06);//寫一個(gè)字符后地址指針加 1
  675.                            write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  676.                         write_n_char("password wrong");
  677.                         delay1(1000);
  678.                         aa++;
  679.                         if(aa==4)
  680.                         {
  681.                                 aa=0;
  682.                             i=20; //3次輸入密碼不正確報(bào)警
  683.                                 while(i--)
  684.                                          baojing2();
  685.                         }
  686.                 }               
  687.         }
  688. }
  689. //主函數(shù)
  690. void main()
  691. {
  692.         LCD1602_init();//調(diào)用液晶初始化子函數(shù)
  693.         i2cinit();//調(diào)用24C02總線初始化子函數(shù)
  694.         beep=0;
  695.         D1=1; //關(guān)鎖
  696.         TMOD=0x01;//選擇定時(shí)器0方式1
  697.         EA=1;//打開(kāi)總中斷
  698.         ET0=1;//打開(kāi)定時(shí)器0中斷
  699.         EX0=1; //打開(kāi)外部中斷0
  700.         IT0=1;//下降沿觸發(fā)
  701.         TR0=0;//關(guān)閉定時(shí)器
  702.         TH0=0x4c;//50ms裝初值
  703.         TL0=0x00;
  704.         while(1)
  705.         {
  706.                   sfj2();//調(diào)用密碼處理子函數(shù)
  707.         }
  708. }
  709. //外部中斷0子函數(shù)
  710. void wb0() interrupt 0
  711. {
  712.         delay1(2000);
  713.         if(!k1)
  714.         {
  715.                 LCD1602_pos(0,0);
  716.                 write_com(0x0c); //關(guān)光標(biāo)
  717.                    write_com(0x06);//寫一個(gè)字符后地址指針加 1
  718.                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  719.                 i2cinit();//24C02總線初始化
  720.                 write_n_add(table1,0x00,6);
  721.                 write_n_char("password renew");
  722.                 LCD1602_pos(1,0);
  723.                 write_n_char("already");
  724.                 delay1(1000);
  725.                 LCD1602_pos(0,0);
  726.                 write_com(0x0c); //關(guān)光標(biāo)
  727.                    write_com(0x06);//寫一個(gè)字符后地址指針加 1
  728.                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  729.                 write_n_char("Input password");
  730.                 LCD1602_pos(1,0);
  731.                 write_n_char("Press key A");
  732.         }
  733. }
  734. //定時(shí)器0中斷子函數(shù)
  735. void t0() interrupt 1
  736. {
  737.         TH0=0x4c;//50ms定時(shí)
  738.         TL0=0x00;
  739.         bb++;
  740.         if(bb==200)//10秒時(shí)間到
  741.         {
  742.                 bb=0;
  743.                 cc=0;
  744.         }
  745. }
  746.                                
復(fù)制代碼



下載:
3、基于51單片機(jī)電子密碼鎖的設(shè)計(jì).zip (108.29 KB, 下載次數(shù): 456)

評(píng)分

參與人數(shù) 2黑幣 +55 收起 理由
yinkun230 + 5 絕世好帖!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:202896 發(fā)表于 2017-5-21 11:28 | 只看該作者
很厲害哦
回復(fù)

使用道具 舉報(bào)

板凳
ID:202308 發(fā)表于 2017-7-7 12:02 | 只看該作者
太棒了,謝謝哦。哈哈
回復(fù)

使用道具 舉報(bào)

地板
ID:252943 發(fā)表于 2017-11-24 09:27 | 只看該作者
誰(shuí)能給我下載這個(gè)文件?
回復(fù)

使用道具 舉報(bào)

5#
ID:239014 發(fā)表于 2017-12-7 01:00 | 只看該作者
大神您這個(gè)程序?yàn)槭裁从肒eil uVision4再次編譯成HEX文件燒寫到仿真里的時(shí)候。按下修改密碼鍵沒(méi)有任何的反應(yīng)
回復(fù)

使用道具 舉報(bào)

6#
ID:239014 發(fā)表于 2017-12-7 01:25 | 只看該作者
謝謝分享!大神為什么你的程序重新生成HEX文件后在燒寫到仿真圖里面,修改密碼的功能就不能使用是改過(guò)什么地方嗎?
回復(fù)

使用道具 舉報(bào)

7#
ID:264408 發(fā)表于 2017-12-20 18:25 | 只看該作者
樓主很棒
回復(fù)

使用道具 舉報(bào)

8#
ID:268354 發(fā)表于 2018-1-4 10:46 | 只看該作者
logic contention detected on 是咋回事啊?
回復(fù)

使用道具 舉報(bào)

9#
ID:276184 發(fā)表于 2018-1-15 14:59 | 只看該作者
黑幣不夠,誰(shuí)可以給我這個(gè)文件啊,名字是扣扣,紅包獎(jiǎng)勵(lì)
回復(fù)

使用道具 舉報(bào)

10#
ID:276896 發(fā)表于 2018-1-17 10:52 | 只看該作者
這個(gè)帖子對(duì)我?guī)椭艽螅x謝!!!
回復(fù)

使用道具 舉報(bào)

11#
ID:279123 發(fā)表于 2018-1-23 22:54 | 只看該作者
要怎么下載啊、
回復(fù)

使用道具 舉報(bào)

12#
ID:280066 發(fā)表于 2018-1-28 13:50 | 只看該作者
為什么總是仿真總是密碼錯(cuò)誤呢
回復(fù)

使用道具 舉報(bào)

13#
ID:321135 發(fā)表于 2018-5-3 12:28 | 只看該作者
非常有用!
回復(fù)

使用道具 舉報(bào)

14#
ID:333064 發(fā)表于 2018-5-18 15:55 | 只看該作者
怎么樣啊
回復(fù)

使用道具 舉報(bào)

15#
ID:289867 發(fā)表于 2018-5-20 09:24 | 只看該作者
同上問(wèn)題啊 再次生成新的hex文件燒寫進(jìn)去一直只能輸入密碼
回復(fù)

使用道具 舉報(bào)

16#
ID:334809 發(fā)表于 2018-5-21 13:57 來(lái)自手機(jī) | 只看該作者
不知道都有啥元件,大神指示一下
回復(fù)

使用道具 舉報(bào)

17#
ID:336554 發(fā)表于 2018-5-23 19:23 | 只看該作者
厲害了。
回復(fù)

使用道具 舉報(bào)

18#
ID:346735 發(fā)表于 2018-6-7 11:14 | 只看該作者
不錯(cuò)我可以學(xué)習(xí)挺久時(shí)間啦

回復(fù)

使用道具 舉報(bào)

19#
ID:353571 發(fā)表于 2018-6-18 13:15 | 只看該作者
密碼改了沒(méi)反應(yīng)
回復(fù)

使用道具 舉報(bào)

20#
ID:352849 發(fā)表于 2018-6-18 15:10 | 只看該作者
樓主厲害,謝謝共享
回復(fù)

使用道具 舉報(bào)

21#
ID:389243 發(fā)表于 2018-8-25 13:36 | 只看該作者
謝謝大佬,很厲害
回復(fù)

使用道具 舉報(bào)

22#
ID:394115 發(fā)表于 2018-9-12 12:31 | 只看該作者
為什么我打不開(kāi)仿真文件
回復(fù)

使用道具 舉報(bào)

23#
ID:581593 發(fā)表于 2019-7-13 11:14 來(lái)自手機(jī) | 只看該作者
不能修改密碼
回復(fù)

使用道具 舉報(bào)

24#
ID:675192 發(fā)表于 2019-12-27 13:22 | 只看該作者
為什么運(yùn)行代碼有錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

25#
ID:758046 發(fā)表于 2020-5-22 17:16 | 只看該作者
很好很實(shí)用
回復(fù)

使用道具 舉報(bào)

26#
ID:739456 發(fā)表于 2020-6-5 17:01 | 只看該作者
密碼修改不了怎么辦
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国内精品久久久久 | 91精品国产综合久久福利软件 | 青青草精品视频 | 男人天堂网址 | 欧美老妇交乱视频 | 国产精品综合色区在线观看 | 国产在线激情视频 | a毛片| 国产玖玖 | 久久人人爽人人爽 | 久久福利 | 日韩成人免费视频 | 免费看黄视频网站 | 99精品欧美一区二区蜜桃免费 | 欧美天堂在线 | 久久久久久女 | 伊人网综合 | 亚洲视频一区在线播放 | 久久亚洲天堂 | 亚洲最大的成人网 | 在线观看精品视频网站 | 韩日一区二区 | 久久久精品 | 午夜精品一区二区三区免费视频 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | www.成人免费视频 | 久久久久久国产精品 | 中文字幕亚洲视频 | 亚洲欧美激情精品一区二区 | 成人网在线观看 | 国产在线精品一区二区三区 | 日本不卡免费新一二三区 | 久久免费国产 | 亚洲精品国产电影 | 久久精品视频12 | 成人午夜免费福利视频 | 在线观看国产视频 | 亚洲 欧美 日韩 在线 | 日韩一区三区 | www.888www看片 | 午夜视频一区 |