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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4266|回復: 4
打印 上一主題 下一主題
收起左側

新手寫的單片機密碼鎖程序

  [復制鏈接]
跳轉到指定樓層
樓主
功能:1,點擊開鎖后,輸入密碼,設置的初始密碼為666666,LED燈亮
          2,點擊上鎖,密碼鎖鎖上,LED燈關閉
          3,點擊修改密碼,先輸入原密碼,正確后輸入新密碼,屏幕顯示save over,點擊保存密碼,密碼保存在EEPROM中(因為不知道怎么在PROTEUS中使用EEPROM所以這個功能實現不了,但是要是在單片機開發板上就可以)
           4,開鎖10秒后自動上鎖
          5,串口可以使用虛擬串口,但由于學的不多,只能傳入單個字符選擇需要實現的功能,然后用鍵盤實現功能
          6,初學以來第一次做的比學單個功能時稍大一點的程序,可能有些地方考慮不周,可以交流一下嘛^-^.

電路原理圖如下:


單片機源程序如下:
  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()//開鎖
  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//錯誤
  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//舊密碼輸入錯誤
  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)//開鎖
  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;         //定時器1方式2,定時器0方式1
  277.         SCON=0X50;                   //串口設置
  278.         PCON=0X80;                   //波特率加倍
  279.         TH1=0XFA;                   //設置波特率為9600
  280.         TL1=0XFA;
  281.         TH0=0XF8;                   //定時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. }
復制代碼

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂2 踩
回復

使用道具 舉報

來自 2#
ID:554216 發表于 2020-8-29 13:12 | 只看該作者
額,這是很早做的了,仿真已經刪除了,但是上面我貼的圖就是仿真圖嘛,可以根據那個畫一個
回復

使用道具 舉報

板凳
ID:435715 發表于 2020-4-12 14:18 | 只看該作者
hhh附件里好像沒有仿真。
回復

使用道具 舉報

地板
ID:769672 發表于 2020-6-4 22:41 | 只看該作者
附件里沒有仿真。。。。。。
回復

使用道具 舉報

5#
ID:89286 發表于 2020-8-31 07:36 | 只看該作者
thanks for sharing
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品在线播放 | 日韩在线资源 | 亚洲系列第一页 | 久久国产视频播放 | 欧美激情a∨在线视频播放 成人免费共享视频 | 欧美久久久久 | 亚洲a视频| 日本精品久久久一区二区三区 | 仙人掌旅馆在线观看 | 麻豆av一区二区三区久久 | 国产一区黄色 | 国内自拍第一页 | 自拍偷拍视频网 | 99亚洲| 一区二区三区四区国产 | 草草草网站 | 日韩免费视频 | 在线午夜| 国产精品毛片一区二区在线看 | 中文字幕第7页 | 女人精96xxx免费网站p | 欧美色成人 | 久久伊人在| 国产高清91 | 久久成人免费观看 | 久久er精品| 一级做a爰片性色毛片视频停止 | 狠狠操狠狠色 | 99精品国产一区二区三区 | 大乳boobs巨大吃奶挤奶 | 亚洲成人精 | 日日操夜夜干 | 中文字幕精品一区 | 欧美在线二区 | 免费看的黄网站 | 香蕉av免费 | 一级黄色影片在线观看 | www网站在线观看 | 国产精品一二区 | 国产免费一区 | 人人人人干 |