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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1998|回復: 1
收起左側

單片機存包柜的程序 怎么把它改成八個密碼鎖用led燈表示鎖,以及存包時每個密碼鎖隨機

[復制鏈接]
ID:718110 發表于 2020-4-9 14:42 | 顯示全部樓層 |閱讀模式
看到一個大佬寫了一個存包柜的程序,想問問大佬們怎么把它改成八個密碼鎖用led燈表示鎖,以及存包時每個密碼鎖隨機生成一個密碼
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include<absacc.h>
  6. #include "lcd1602.h"
  7. #include "main.h"
  8. #include "key.h"


  9. sbit Lock = P3^7;  //代表鎖控的繼電器IO   高電平關鎖,低電平開鎖
  10. sbit LEDRED = P3^3;  //代表密碼輸入錯誤的紅燈IO  高電平熄滅,低電平點亮
  11. sbit LEDGREEN = P3^4;  //代表密碼輸入正確的綠燈IO  高電平熄滅,低電平點亮
  12. uchar genPasswd[4];           //存儲生成的四位隨機數密碼
  13. uchar inpPasswd[4];           //存儲取包時輸入的四位密碼
  14. uchar code welcome[8]="welcome";  //開機顯示的歡迎標語
  15. uchar code set[7]="Passwd";    //顯示生成的密碼標題
  16. uchar code  close[12]="close door!";   //提示關門
  17. uchar code         input[13] = "input passwd";   //提示請輸入密碼


  18. /****************定時器設置相關的變量***********************/
  19. unsigned char TL0_temp;         /*暫存TL0的初值*/
  20. unsigned char TH0_temp;         /*暫存TH0的初值*/
  21. #define INT_CLOCK 10    /*INT_CLOCK為定時值,單位為ms ,此處定義為10ms*/
  22. #define CRY_FREQUENCY 11059200 /*CRY_FREQUENCY為晶振頻率,單位為Hz*/










  23. /*延時程序*/
  24. void delay(uint z)               
  25. {
  26.         unsigned int i,j;
  27.    for(i=0;i<z;i++)
  28.     for(j=0;j<100;j++);
  29. }
  30. /******************************
  31. 顯示首頁 welcome
  32. ******************************/
  33. void display1()
  34. {
  35.    unsigned char i;
  36.    for(i = 0;i < 7;i++)
  37.    {
  38.                    wr_com(0x85+i);
  39.                 wr_dat(welcome[i]);[/i][i]
  40.    }
  41. }




  42. /************************************
  43. 顯示密碼生成界面
  44. ************************************/
  45. void display2()
  46. {
  47.    unsigned char i;
  48.    
  49.    for(i = 0;i < 6;i++)
  50.    {
  51.                    wr_com(0x85+i);
  52.                 wr_dat(set[i]);[/i][i]
  53.    }
  54.    for(i = 0;i < 4;i++)
  55.    {
  56.                    wr_com(0xc6+i);
  57.                 wr_dat(genPasswd[i]+0x30);[/i][i]
  58.                
  59.    }
  60. }


  61. /************************************
  62. 顯示請關門界面
  63. ************************************/


  64. void display3()
  65. {
  66.      unsigned char i;
  67.    for(i = 0;i < 11;i++)
  68.    {
  69.                    wr_com(0x83+i);
  70.                 wr_dat(close[i]);[/i][i]
  71.    }


  72. }




  73. /************************************
  74. 顯示密碼輸入界面
  75. ************************************/
  76. void display4()
  77. {
  78.    unsigned char i;
  79.    for(i = 0;i < 12;i++)
  80.    {
  81.                    wr_com(0x82+i);
  82.                 wr_dat(input[i]);[/i][i]
  83.    }
  84.    for(i = 0;i < 4;i++)
  85.    {
  86.                    wr_com(0xc6+i);
  87.                 wr_dat(inpPasswd[i]+0x30);[/i][i]
  88.                
  89.    }


  90. }
  91.         








  92. /***********************************
  93. 定時器0初始化
  94. ***********************************/
  95. void Timer0_init()
  96. {
  97.         unsigned long T0_temp;                                     /*暫存T0的初始值        */
  98.         T0_temp = 65536-((INT_CLOCK *CRY_FREQUENCY /1000)/12);    /*T0初始值計算公式,參考教科書*/
  99.         TL0_temp = T0_temp & 0xff;
  100.         TH0_temp = T0_temp >> 8;
  101.         TL0 = TL0_temp;
  102.         TH0 = TH0_temp;
  103.         TMOD |= 0x01;
  104.         TR0 = 1;                        /*開定時器0中斷*/
  105.         ET0 = 1;  
  106.         EA = 1;                    /*開總中斷*/                                       


  107. }












  108. /*主函數*/
  109. uchar global_state = 0;
  110. uchar count_num = 0;  //輸入的數字個數
  111. void main()
  112. {  
  113.    uchar i;
  114.    uchar passwd;
  115.    
  116.            uchar key_value = 0;
  117.         uchar temp_key_value = 0xff;
  118.         Lock = 1;  //剛上電 鎖是需要保持閉合
  119.         Timer0_init();        //定時器初始化
  120.          lcd_init();        //LCD1602初始化
  121.    
  122.         while(1)        //進入不斷循環
  123.         {
  124.                    temp_key_value = Calkey_scan();          //讀取矩陣按鍵的鍵值
  125.                 if(temp_key_value != 0xff)
  126.                 {
  127.                         key_value = temp_key_value;
  128.                 }
  129.                 switch(global_state)
  130.                 {
  131.                         case 0:         //初始化狀態
  132.                                 display1();         //顯示歡迎語句        -- "welcome"
  133.                         


  134.                                 if(key_value == 13)  //存包按鍵被按下
  135.                                 {
  136.                                     key_value = 0xff;  //將按鍵值清除
  137.                                         Lock = 0;    //開鎖
  138.                                        
  139.                                         display3();    //顯示關門提示語        -- "close door!"
  140.                                     delay(1900);    //等待關門 大約3秒
  141.                                         Lock = 1;   //關門
  142.                                         clear();                 //清屏,準備下一屏的顯示
  143.                                         global_state = 1;   //切換運行狀態
  144.                                         passwd = TL0;  //采用定時器寄存器的值作為密碼
  145.                                         genPasswd[0] = passwd/100;                  //存儲密碼
  146.                                         genPasswd[1] = passwd%100/10;
  147.                                         genPasswd[2] = passwd%10;
  148.                                         genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;
  149.                                 }
  150.                                 if(key_value == 14)  //取包按鍵被按下
  151.                                 {
  152.                                     key_value = 0xff;  //將按鍵值清除
  153.                                         clear();    //清屏,準備下一屏的顯示
  154.                                         global_state = 2;  //切換運行狀態
  155.                                         count_num = 0;   //清除數字按鍵變量
  156.                                         for(i = 0;i < 4;i++)  //清空輸入的密碼數組
  157.                                             inpPasswd[i] = ' '-0x30;[/i][i]
  158.                                 }
  159.                         break;
  160.                         case 1:                //密碼生成狀態
  161.                                    display2();         //顯示密碼生成界面
  162.                                 delay(1900);    //等待大約3秒
  163.                                 global_state = 0;  //返回到初始界面
  164.                                 clear();        //清屏,準備下一屏的顯示
  165.                                 
  166.                         break;
  167.                         case 2:          //輸入密碼狀態
  168.                            display4();           //顯示輸入密碼界面
  169.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的為0-9的數字按鍵
  170.                            {
  171.                               
  172.                                 if(count_num <= 3)         //如果按鍵次數小于4次
  173.                                         {
  174.                                         inpPasswd[count_num] = key_value; //將按鍵值存入數組,并顯示
  175.                                                    count_num++;
  176.                                     }
  177.                                          key_value = 0xff;  //將按鍵值清除
  178.                            }
  179.                            if(key_value == 15) //清除按鍵被按下
  180.                            {
  181.                                 key_value = 0xff;  //將按鍵值清除
  182.                                            for(i = 0;i < 4;i++)
  183.                                           inpPasswd[i] = ' '-0x30;  //清除剛剛輸入的密碼[/i][i]
  184.                            }
  185.                            if(key_value == 16) //確認按鍵被按下
  186.                            {
  187.                                 key_value = 0xff;  //將按鍵值清除
  188.                                            for(i = 0;i < 4;i++)
  189.                                         {
  190.                                                 if(inpPasswd[i] != genPasswd[i])[/i][/i][i][i]
  191.                                                    break;
  192.                                         }
  193.                                         if(i == 4)          //密碼輸入正確
  194.                                         {
  195.                                                 LEDRED = 1;         //紅燈熄滅
  196.                                                 LEDGREEN = 0;  //綠燈亮
  197.                                                 Lock = 1;  //開鎖
  198.                                                 delay(1900);    //等待大約3秒
  199.                                                 Lock = 0;  //關鎖
  200.                                                 LEDGREEN = 1;  //綠燈熄滅
  201.                                         }
  202.                                         else   //密碼輸入錯誤
  203.                                         {
  204.                                                 LEDRED = 0;         //紅燈亮
  205.                                                 LEDGREEN = 1;  //綠燈熄滅
  206.                                                 Lock = 0;  //關鎖
  207.                                                 delay(1900);    //等待大約3秒
  208.                                                 LEDRED = 1;  //紅燈熄滅
  209.                                         }
  210.                                         clear();           //清屏,準備下一屏的顯示
  211.                                         global_state = 0;  //返回到初始界面


  212.                            }
  213.                         break;        
  214.                 }
  215.         }
  216. }




  217. void T0_interrupt(void) interrupt 1         
  218. {
  219.         TH0 += TH0_temp;
  220.         TL0 += TL0_temp;


  221. }

復制代碼
回復

使用道具 舉報

ID:584814 發表于 2020-4-15 11:31 | 顯示全部樓層
你比較適合當老師
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 最新国产精品视频 | 精品一区二区三区视频在线观看 | 精品1区2区| 国产美女精品 | 超碰超碰| 成人黄色在线观看 | 日本一道本视频 | 国产精品福利视频 | 天天草草草 | 午夜影视 | 久久av网站| 亚洲精品视频在线观看免费 | 日本二区 | 日韩成人影院 | 欧美亚洲国产成人 | 国产精品视频播放 | 国产高清精品一区二区三区 | 亚洲精品日韩在线 | 亚洲人成人一区二区在线观看 | 欧美在线观看免费观看视频 | 国产免费一区二区三区 | 91中文字幕在线观看 | 男人的天堂亚洲 | 中文字幕一区二区三区乱码在线 | 免费精品久久久久久中文字幕 | 在线一区视频 | 日本精品在线观看 | 狠狠的干 | 蜜桃在线播放 | 在线男人天堂 | 国产偷录叫床高潮录音 | 久久婷婷国产麻豆91 | 99pao成人国产永久免费视频 | 国产高清在线精品一区二区三区 | 视频一区二区三区中文字幕 | av黄色在线观看 | www.久久 | 久久9精品 | 一区二区三区在线 | 国产精品国产三级国产aⅴ无密码 | 国产一区二区三区在线视频 |