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

標(biāo)題: 新手寫(xiě)的單片機(jī)密碼鎖程序 [打印本頁(yè)]

作者: times_love    時(shí)間: 2019-8-23 10:30
標(biāo)題: 新手寫(xiě)的單片機(jī)密碼鎖程序
功能:1,點(diǎn)擊開(kāi)鎖后,輸入密碼,設(shè)置的初始密碼為666666,LED燈亮
          2,點(diǎn)擊上鎖,密碼鎖鎖上,LED燈關(guān)閉
          3,點(diǎn)擊修改密碼,先輸入原密碼,正確后輸入新密碼,屏幕顯示save over,點(diǎn)擊保存密碼,密碼保存在EEPROM中(因?yàn)椴恢涝趺丛赑ROTEUS中使用EEPROM所以這個(gè)功能實(shí)現(xiàn)不了,但是要是在單片機(jī)開(kāi)發(fā)板上就可以)
           4,開(kāi)鎖10秒后自動(dòng)上鎖
          5,串口可以使用虛擬串口,但由于學(xué)的不多,只能傳入單個(gè)字符選擇需要實(shí)現(xiàn)的功能,然后用鍵盤(pán)實(shí)現(xiàn)功能
          6,初學(xué)以來(lái)第一次做的比學(xué)單個(gè)功能時(shí)稍大一點(diǎn)的程序,可能有些地方考慮不周,可以交流一下嘛^-^.

電路原理圖如下:


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include"lcd.h"
  3. #include"eeprom.h"
  4. #include"keyboard.h"
  5. #include"sounder.h"
  6. #include"led.h"

  7. #define u8 unsigned char
  8. #define u16 unsigned int
  9.         
  10. unsigned long pass=666666;
  11. unsigned int Timer0=0;
  12. unsigned char uartvalue=0;

  13. u8 code str1[]=" Password:      ";
  14. u8 code str2[]=" Close          ";
  15. u8 code str3[]=" Old Password:  ";
  16. u8 code str4[]="0123456789";
  17. u8 code str5[]=" OPEN           ";
  18. u8 code str6[]=" Password Lock  ";
  19. u8 code str7[]=" Wrong!         ";
  20. u8 code str8[]=" New Password:  ";
  21. u8 code str9[]="******";
  22. u8 code str10[]=" Change Over   ";
  23. u8 code str11[]=" Save Over     ";
  24. u8 code str12[]="修改密碼";
  25. u8 code kong[]="                ";

  26. u8 strbuff[16];
  27. void E2init()//EEPROM初始值
  28. {
  29.         unsigned long num1,num2,num3,date1,date2,date3;
  30.         num1=pass/10000;
  31.         num2=pass/100%100;
  32.         num3=pass%100;
  33.         At24c02write(1,num1);
  34.         At24c02write(2,num2);
  35.         At24c02write(3,num3);
  36.         date1=At24c02read(1);
  37.         date2=At24c02read(2);
  38.         date3=At24c02read(3);
  39.         pass=(date1*10000+date2*100+date3);
  40. }
  41. void Lockinit()//最初屏顯
  42. {
  43.         unsigned char i;
  44.         Write_cmd(0x80);
  45.         for(i=0;i<16;i++)
  46.         {
  47.                 Write_dat(str6[i]);
  48.         }
  49. }

  50. void clear(unsigned char j)//清屏
  51. {
  52.         unsigned char i;
  53.         if(j==0)
  54.         {
  55.                 Write_cmd(0x80);
  56.                 for(i=0;i<16;i++)
  57.                 {
  58.                         Write_dat(kong[i]);
  59.                 }
  60.         }
  61.         if(j==1)
  62.         {
  63.                 Write_cmd(0x80+0x40);
  64.                 for(i=0;i<16;i++)
  65.                 {
  66.                         Write_dat(kong[i]);
  67.                 }
  68.         }
  69. }
  70.                
  71. void open()//開(kāi)鎖
  72. {
  73.         unsigned char i=0,j=0;
  74.         unsigned long mima=0;
  75.         while(1)
  76.         {
  77.                 Keyvalue();
  78.                 if(keystate==1&&(value>=0&&value<=9||value==14))//輸入密碼
  79.                 {
  80.                         keystate=0;
  81.                         Write_cmd(0x80+0x40+j);
  82.                         Write_dat(str9[j]);
  83.                         j++;
  84.                         mima=mima*10+value;
  85.                         if(value==14)
  86.                         {
  87.                                 clear(1);
  88.                                 j=0;
  89.                                 mima=0;
  90.                         }
  91.                 }
  92.                 if(j==6)//密碼輸入完畢,判斷
  93.                 {
  94.                         delay(50000);
  95.                         if(mima==pass)//正確
  96.                         {
  97.                                 Write_cmd(0x80);
  98.                                 for(i=0;i<16;i++)
  99.                                 {
  100.                                         Write_dat(str5[i]);
  101.                                 }
  102.                                 TR0=1;
  103.                                 clear(1);
  104.                                 LED=0;
  105.                         }
  106.                         else//錯(cuò)誤
  107.                         {
  108.                                 Write_cmd(0x80);
  109.                                 for(i=0;i<16;i++)
  110.                                 {
  111.                                         Write_dat(str7[i]);
  112.                                 }
  113.                                 clear(1);
  114.                                 LED=1;
  115.                         }
  116.                         break;
  117.                 }
  118.         }
  119. }
  120.                                        
  121. void change()//修改密碼
  122. {
  123.         unsigned char i,j=0;
  124.         unsigned long mima=0,changemima=0;
  125.         TR0=0;
  126.         Timer0=0;
  127.         while(1)
  128.         {
  129.                 Keyvalue();
  130.                 if(keystate==1&&(value>=0&&value<=9||value==14))//輸入密碼
  131.                 {
  132.                         keystate=0;
  133.                         Write_cmd(0x80+0x40+j);
  134.                         Write_dat(str4[value]);
  135.                         j++;
  136.                         mima=mima*10+value;
  137.                         if(value==14)
  138.                         {
  139.                                 clear(1);
  140.                                 j=0;
  141.                                 mima=0;
  142.                         }
  143.                 }
  144.                 if(j==6)//輸入完畢,判斷
  145.                 {
  146.                         delay(50000);
  147.                         clear(1);
  148.                         if(mima==pass)//密碼正確
  149.                         {
  150.                                 Write_cmd(0x80);
  151.                                 for(i=0;i<16;i++)
  152.                                 {
  153.                                         Write_dat(str8[i]);
  154.                                 }
  155.                                 i=0;
  156.                                 while(1)
  157.                                 {
  158.                                         Keyvalue();
  159.                                         if(keystate==1&&(value>=0&&value<=9||value==14))//輸入需要修改的密碼
  160.                                         {
  161.                                                 keystate=0;
  162.                                                 Write_cmd(0x80+0x40+i);
  163.                                                 Write_dat(str4[value]);
  164.                                                 changemima=changemima*10+value;
  165.                                                 i++;
  166.                                                 if(value==14)
  167.                                                 {
  168.                                                         clear(1);
  169.                                                         i=0;
  170.                                                         changemima=0;
  171.                                                 }
  172.                                         }
  173.                                         if(i==6)//輸入完畢,保存
  174.                                         {
  175.                                                 delay(50000);
  176.                                                 pass=changemima;
  177.                                                 Write_cmd(0x80);
  178.                                                 for(i=0;i<16;i++)
  179.                                                 {
  180.                                                         Write_dat(str10[i]);
  181.                                                 }
  182.                                                 clear(1);
  183.                                                 break;
  184.                                         }
  185.                                 }
  186.                         }
  187.                         else//舊密碼輸入錯(cuò)誤
  188.                         {
  189.                                 Write_cmd(0x80);
  190.                                 for(i=0;i<16;i++)
  191.                                 {
  192.                                         Write_dat(str7[i]);
  193.                                 }
  194.                                 clear(1);
  195.                                 LED=1;
  196.                         }
  197.                         break;
  198.                 }
  199.         }               
  200. }
  201. void save()//保存密碼
  202. {
  203.         unsigned char i;
  204.         unsigned long num1,num2,num3;
  205.         TR0=0;
  206.         Timer0=0;
  207.         num1=pass/10000;
  208.         num2=pass/100%100;
  209.         num3=pass%100;
  210.         At24c02write(1,num1);
  211.         At24c02write(2,num2);
  212.         At24c02write(3,num3);
  213.         Write_cmd(0x80);
  214.         for(i=0;i<16;i++)
  215.         {
  216.                 Write_dat(str11[i]);
  217.         }
  218.         clear(1);
  219. }
  220. void KeyBoard()//鍵值功能
  221. {
  222.         unsigned char i=0;
  223.         unsigned char keylock = 0;
  224.         
  225.         while(1)
  226.         {
  227.                 Keyvalue();
  228.                 if(value==10)//開(kāi)鎖
  229.                 {
  230.                         keystate=0;
  231.                         Write_cmd(0x80);
  232.                         for(i=0;i<16;i++)
  233.                         {
  234.                                 Write_dat(str1[i]);
  235.                         }
  236.                         keylock=1;
  237.                 }
  238.                 if(value==11)//上鎖
  239.                 {
  240.                         keystate=0;
  241.                         Write_cmd(0x80);
  242.                         for(i=0;i<16;i++)
  243.                         {
  244.                                 Write_dat(str2[i]);
  245.                         }
  246.                         clear(1);
  247.                         LED=1;
  248.                         break;
  249.                 }
  250.                 if(value==12)//修改密碼
  251.                 {
  252.                         keystate=0;
  253.                         Write_cmd(0x80);
  254.                         for(i=0;i<16;i++)
  255.                         {
  256.                                 Write_dat(str3[i]);
  257.                         }
  258.                         keylock=2;
  259.                 }
  260.                 if(value==13)//保存密碼
  261.                 {
  262.                         keystate=0;
  263.                         keylock=3;
  264.                 }
  265.                 switch(keylock)
  266.                 {
  267.                         case 1:keylock = 0;open();value=15;break;
  268.                         case 2:keylock = 0;change();value=15;break;
  269.                         case 3:keylock = 0;save();value=15;break;
  270.                         default:break;
  271.                 }
  272.         }
  273. }


  274. void main()
  275. {
  276.         TMOD=0X21;         //定時(shí)器1方式2,定時(shí)器0方式1
  277.         SCON=0X50;                   //串口設(shè)置
  278.         PCON=0X80;                   //波特率加倍
  279.         TH1=0XFA;                   //設(shè)置波特率為9600
  280.         TL1=0XFA;
  281.         TH0=0XF8;                   //定時(shí)2ms
  282.         TL0=0XCC;
  283.         EA=1;
  284.         ES=1;
  285.         ET0=1;
  286.         TR1=1;
  287.         Lcdinit();                        //LCD1602初始化
  288.         Lockinit();                        
  289.         E2init();               
  290.         while(1)
  291.         {
  292.                 KeyBoard();
  293.         }
  294. }

  295. void ledonoff() interrupt 1
  296. {
  297.         unsigned char i;
  298.         TH0=0XF8;
  299.         TL0=0XCC;
  300.         if(LED==0)
  301.         {
  302.                 Timer0++;
  303.         }
  304.         if(Timer0==5000)
  305.         {
  306.                 LED=1;
  307.                 Timer0=0;
  308.                 Write_cmd(0x80);
  309.                 for(i=0;i<16;i++)
  310.                 {
  311.                         Write_dat(str2[i]);
  312.                 }
  313.                 TR0=0;
  314.         }
  315. }

  316. void Uart() interrupt 4
  317. {
  318.         unsigned char UART_buff;
  319.         if(RI)
  320.         {
  321.                 UART_buff=SBUF;
  322.                 if(UART_buff=='0') value=10;
  323.                 if(UART_buff=='1') value=11;
  324.                 if(UART_buff=='2') value=12;
  325.                 if(UART_buff=='3') value=13;
  326.                 SBUF=UART_buff;
  327.         }
  328.         if(TI)
  329.         {
  330.                 TI=0;
  331.         }
  332. }
復(fù)制代碼

源程序51hei下載,但是沒(méi)有仿真,求大神分享個(gè)仿真圖啊:
test_23,門(mén)禁.zip (72.98 KB, 下載次數(shù): 50)


作者: a1091182805    時(shí)間: 2020-4-12 14:18
hhh附件里好像沒(méi)有仿真。
作者: nifu9110    時(shí)間: 2020-6-4 22:41
附件里沒(méi)有仿真。。。。。。
作者: times_love    時(shí)間: 2020-8-29 13:12
額,這是很早做的了,仿真已經(jīng)刪除了,但是上面我貼的圖就是仿真圖嘛,可以根據(jù)那個(gè)畫(huà)一個(gè)
作者: faridzled    時(shí)間: 2020-8-31 07:36
thanks for sharing




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 羞羞视频免费在线 | 中文字幕亚洲一区二区三区 | 亚洲一区二区视频 | 久久精品国产一区二区电影 | www.伊人.com| 亚洲婷婷一区 | 免费黄色日本 | 日韩黄色av | 日韩中文一区 | 亚洲成年人免费网站 | 91精品久久久久久久久久入口 | 91欧美激情一区二区三区成人 | 国产成人免费在线 | 韩日在线 | 91精品国产综合久久久久 | 精品久久久久久 | 2018中文字幕第一页 | 久久国产精品99久久久久久丝袜 | 国产精品国产成人国产三级 | 永久看片| 一级毛片色一级 | 欧美日韩不卡合集视频 | 欧美精品久久 | 亚洲成人在线免费 | 欧美激情一区二区三级高清视频 | 欧美乱大交xxxxx另类电影 | 日本精品在线一区 | 国产精品久久久久久福利一牛影视 | 亚洲欧美激情精品一区二区 | 成人免费淫片aa视频免费 | 亚洲午夜视频 | av网站在线免费观看 | 夜夜草| 欧美13videosex性极品 | 国产免费又黄又爽又刺激蜜月al | 伊人91在线 | 亚洲在线成人 | 国产精品久久久久婷婷二区次 | 欧美 日韩 国产 在线 | 性高湖久久久久久久久aaaaa | 欧美精品一区二区三区四区五区 |