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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子存包柜程序,功能增加不成功

[復制鏈接]
跳轉到指定樓層
樓主
各位大佬你們好,是這樣的,我之前在論壇上看到一位大佬上傳了他的作品——電子存包柜的實現,我很感興趣,就下載下來想自己研究一下,然后我就想給他在原有的基礎上增加空柜顯示,就是用8個led代表8個柜子,然后更改程序,讓他能存八個密碼,我的想法是新建[8][4]的二維數組,每次按存鍵會生成一個4位密碼。然后存到數組里,當存滿八個時, lcd 顯示 full。按取鍵,開始輸入密碼,只要與二維數組中的一個對上,就打開對應的柜子。
我現在的想法是,用switch語句,將存包的情況全都寫出來 單片機源程序如下:
  1. switch (gui)                                                                                                
  2.                         
  3.                 {
  4.                                         case 0:
  5.                                         case 2:
  6.                                         case 4:
  7.                                         case 8:
  8.                                         case 16:
  9.                                         case 32:
  10.                                         case 64:
  11.                                         case 128:
  12.                                         case 130:
  13.                                         case 132:
  14.                                         case 136:
  15.                                         case 144:
  16.                                         case 160:
  17.                                         case 192:
  18.                                         case 194:
  19.                                         case 196:
  20.                                         case 200:
  21.                                         case 208:
  22.                                         case 224:
  23.                                         case 226:
  24.                                         case 228:
  25.                                         case 232:
  26.                                         case 240:
  27.                                         case 242:
  28.                                         case 244:
  29.                                         case 248:
  30.                                         case 250:
  31.                                         case 252:
  32.                                         case 254:
  33.                     gui = gui + 1;
  34.                      m = 0;
  35.                
  36.                     display3(); //顯示關門提示語        -- "close door!"
  37.                                break;

  38.                case 1:
  39.                            case 5:
  40.                            case 9:
  41.                            case 17:
  42.                            case 33:
  43.                            case 65:
  44.                            case 129:
  45.                            case 133:
  46.                            case 137:
  47.                            case 145:
  48.                            case 161:
  49.                            case 193:
  50.                            case 197:
  51.                            case 201:
  52.                            case 209:
  53.                            case 225:
  54.                            case 229:
  55.                            case 233:
  56.                            case 241:
  57.                            case 245:
  58.                            case  249:
  59.                            case 253:
  60.                     gui = gui + 2;
  61.                      m = 1;
  62.                     
  63.                     display3();
  64.                 break;

  65.                 case 3:
  66.                                 case 11:
  67.                                 case 19:
  68.                                 case 35:
  69.                                 case 67:
  70.                                 case 131:
  71.                                 case 139:
  72.                                 case 147:
  73.                                 case 163:
  74.                                 case 195:
  75.                                 case 203:
  76.                                 case 211:
  77.                                 case 227:
  78.                                 case 235:
  79.                                 case 243:
  80.                                 case 251:
  81.                                 
  82.                     gui = gui + 4;
  83.                      m = 2;
  84.                     
  85.                     display3();
  86.                      break;
  87.                           case 23:
  88.                           case 39:
  89.                           case 71:
  90.                           case 135:
  91.                           case 55:
  92.                           case 87:
  93.                           case 151:
  94.                           case 119:
  95.                           case 215:
  96.                           case 247:
  97.               case 7:
  98.                     gui = gui + 8;
  99.                     m = 3;
  100.                   
  101.                     display3();
  102.                 break;

  103.                                 case 207:
  104.                                 case 239:
  105.                                 case 143:
  106.                                 case 79:
  107.                                 case 47:
  108.                 case 15:
  109.                     gui = gui + 16;
  110.                     m = 4;
  111.                   
  112.                     display3();
  113.                 break;

  114.                                 case 223:
  115.                                 case 159:
  116.                                 case 95:
  117.                 case 31:
  118.                     gui = gui + 32;
  119.                      m = 5;
  120.                   
  121.                     display3();
  122.                 break;
  123.                                 case  63:
  124.                 case  191:
  125.                     gui = gui + 64;
  126.                     m = 6;
  127.                   
  128.                     display3();
  129.                 break;

  130.                                 case 127:
  131.                     gui = gui + 128;
  132.                      m = 7;
  133.                     
  134.                     display3();
  135.                 break;

  136.                 case 255:
  137.                
  138.                     display5();
  139.                     delay(1900);
  140.                     clear();
  141.                                   }
復制代碼

gui是定義的P2,具體仿真圖可以看下面


emmm,有點偏題了  但是我現在的話就是我編寫的程序沒法運行成功,現在就是 長按存鍵,led會亮,但是是密碼驗證出現了問題,我沒法驗證密碼,同時亮起的led燈也無法滅掉,而且我想設計的是,密碼對應的柜子滅燈,所以我設置了一個m,用它來標識第幾個柜子,但是沒有成功,我不會將存包時的m值,傳到取包時的m值,emmm,希望有大佬能幫幫我,畢竟我第一次,覺得單片機挺有意思的,不想輕易放棄。
因為原作者只放了一個main.c,所以我也只放一個main,畢竟源文件下載還是要黑幣的呢。真心求教。而且這個顯示柜子是否為空后,我還想要用38譯碼器實現對應柜門的開關,但是這個解決不了,沒法繼續下去啊

  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. #define gui P2

  10. //sbit w1 = P3^3;
  11. //sbit w2 = P3^4;
  12. //sbit w3 = P3^4;
  13. sbit jingao = P3^7;  //連接蜂鳴器,報警用
  14. sbit Lock = P3^6; //可用來確定門是否關閉
  15. uchar genPasswd[8][4];           //存儲生成的四位隨機數密碼        ,最多有8個
  16. uchar inpPasswd[4];           //存儲取包時輸入的四位密碼
  17. uchar code welcome[8]="welcome";  //開機顯示的歡迎標語
  18. uchar code set[7]="Passwd";    //顯示生成的密碼標題
  19. uchar code  close[12]="close door!";   //提示關門
  20. uchar code         input[13] = "input passwd";   //提示請輸入密碼
  21. uchar code  full[6] = "Full!";

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





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


  46. /************************************
  47. 顯示密碼生成界面
  48. ************************************/

  49. /************************************
  50. 顯示請關門界面
  51. ************************************/

  52. void display3()
  53. {
  54.      unsigned char i;
  55.    for(i = 0;i < 11;i++)
  56.    {
  57.                    wr_com(0x83+i);
  58.                 wr_dat(close[i]);
  59.    }

  60. }


  61. /************************************
  62. 顯示密碼輸入界面
  63. ************************************/
  64. void display4()
  65. {
  66.    unsigned char i;
  67.    for(i = 0;i < 12;i++)
  68.    {
  69.                    wr_com(0x82+i);
  70.                 wr_dat(input[i]);
  71.    }
  72.    for(i = 0;i < 4;i++)
  73.    {
  74.                    wr_com(0xc6+i);
  75.                 wr_dat(inpPasswd[i]+0x30);
  76.                
  77.    }

  78. }
  79.         
  80. /************************************
  81. 顯示柜已滿
  82. ************************************/

  83. void display5()
  84. {
  85.      unsigned char i;
  86.    for(i = 0;i < 5;i++)
  87.    {
  88.                    wr_com(0x83+i);
  89.                 wr_dat(full[i]);
  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. uchar panmen = 0;
  112. void main()
  113. {  
  114.    
  115.    uchar i;
  116.    uchar j;
  117.    uchar k;
  118.   
  119.    uchar passwd;
  120.    
  121.            uchar key_value = 0;
  122.         uchar temp_key_value = 0xff;
  123.         gui = 0;
  124.         Lock = 1;  //剛上電 鎖是需要保持閉合
  125.         Timer0_init();        //定時器初始化
  126.          lcd_init();        //LCD1602初始化
  127.    
  128.         while(1)        //進入不斷循環
  129.         {
  130.          uchar   m ;//用來標記存在第幾個柜子
  131.                    temp_key_value = Calkey_scan();          //讀取矩陣按鍵的鍵值
  132.                 if(temp_key_value != 0xff)
  133.                 {
  134.                         key_value = temp_key_value;
  135.                 }
  136.                 switch(global_state)
  137.                 {
  138.                         case 0:         //初始化狀態
  139.                                 display1();         //顯示歡迎語句        -- "welcome"
  140.                                 delay(1900);
  141.                                 clear()  ;
  142.                                  
  143.                                 if(key_value == 13)  //存包按鍵被按下
  144.                                 {
  145.                                     key_value = 0xff;  //將按鍵值清除
  146.                                 switch (gui)                                                                                                
  147.                         
  148.                 {
  149.                                         case 0:
  150.                                         case 2:
  151.                                         case 4:
  152.                                         case 8:
  153.                                         case 16:
  154.                                         case 32:
  155.                                         case 64:
  156.                                         case 128:
  157.                                         case 130:
  158.                                         case 132:
  159.                                         case 136:
  160.                                         case 144:
  161.                                         case 160:
  162.                                         case 192:
  163.                                         case 194:
  164.                                         case 196:
  165.                                         case 200:
  166.                                         case 208:
  167.                                         case 224:
  168.                                         case 226:
  169.                                         case 228:
  170.                                         case 232:
  171.                                         case 240:
  172.                                         case 242:
  173.                                         case 244:
  174.                                         case 248:
  175.                                         case 250:
  176.                                         case 252:
  177.                                         case 254:
  178.                     gui = gui + 1;
  179.                      m = 0;
  180.                
  181.                     display3(); //顯示關門提示語        -- "close door!"
  182.                                break;

  183.                case 1:
  184.                            case 5:
  185.                            case 9:
  186.                            case 17:
  187.                            case 33:
  188.                            case 65:
  189.                            case 129:
  190.                            case 133:
  191.                            case 137:
  192.                            case 145:
  193.                            case 161:
  194.                            case 193:
  195.                            case 197:
  196.                            case 201:
  197.                            case 209:
  198.                            case 225:
  199.                            case 229:
  200.                            case 233:
  201.                            case 241:
  202.                            case 245:
  203.                            case  249:
  204.                            case 253:
  205.                     gui = gui + 2;
  206.                      m = 1;
  207.                     
  208.                     display3();
  209.                 break;

  210.                 case 3:
  211.                                 case 11:
  212.                                 case 19:
  213.                                 case 35:
  214.                                 case 67:
  215.                                 case 131:
  216.                                 case 139:
  217.                                 case 147:
  218.                                 case 163:
  219.                                 case 195:
  220.                                 case 203:
  221.                                 case 211:
  222.                                 case 227:
  223.                                 case 235:
  224.                                 case 243:
  225.                                 case 251:
  226.                                 
  227.                     gui = gui + 4;
  228.                      m = 2;
  229.                     
  230.                     display3();
  231.                      break;
  232.                           case 23:
  233.                           case 39:
  234.                           case 71:
  235.                           case 135:
  236.                           case 55:
  237.                           case 87:
  238.                           case 151:
  239.                           case 119:
  240.                           case 215:
  241.                           case 247:
  242.               case 7:
  243.                     gui = gui + 8;
  244.                     m = 3;
  245.                   
  246.                     display3();
  247.                 break;

  248.                                 case 207:
  249.                                 case 239:
  250.                                 case 143:
  251.                                 case 79:
  252.                                 case 47:
  253.                 case 15:
  254.                     gui = gui + 16;
  255.                     m = 4;
  256.                   
  257.                     display3();
  258.                 break;

  259.                                 case 223:
  260.                                 case 159:
  261.                                 case 95:
  262.                 case 31:
  263.                     gui = gui + 32;
  264.                      m = 5;
  265.                   
  266.                     display3();
  267.                 break;
  268.                                 case  63:
  269.                 case  191:
  270.                     gui = gui + 64;
  271.                     m = 6;
  272.                   
  273.                     display3();
  274.                 break;

  275.                                 case 127:
  276.                     gui = gui + 128;
  277.                      m = 7;
  278.                     
  279.                     display3();
  280.                 break;

  281.                 case 255:
  282.                
  283.                     display5();
  284.                     delay(1900);
  285.                     clear();
  286.                                   }

  287.                                 k=m;
  288.                 delay(1900);   //等待關門 大約5秒
  289.                 if (Lock != 1) //未閉合柜門,報警
  290.                 {
  291.                     jingao = 1;
  292.                     delay(1900);
  293.                     jingao = 0;
  294.                 }
  295.                                        
  296.                                         clear();                 //清屏,準備下一屏的顯示
  297.                                         global_state = 1;   //切換運行狀態
  298.                                         passwd = TL0;  //采用定時器寄存器的值作為密碼
  299.                                         genPasswd[m][0] = passwd/100;                  //存儲密碼
  300.                                         genPasswd[m][1] = passwd%100/10;
  301.                                         genPasswd[m][2] = passwd%10;
  302.                                         genPasswd[m][3] = (genPasswd[m][1]+genPasswd[m][2])%10;
  303.                                 }
  304.                                 if(key_value == 14)  //取包按鍵被按下
  305.                                 {
  306.                                     key_value = 0xff;  //將按鍵值清除
  307.                                         clear();    //清屏,準備下一屏的顯示
  308.                                         global_state = 2;  //切換運行狀態
  309.                                         count_num = 0;   //清除數字按鍵變量
  310.                                         for(i = 0;i < 4;i++)  //清空輸入的密碼數組
  311.                                             inpPasswd[i] = ' '-0x30;
  312.                                 }
  313.                         break;
  314.                         case 1:                //密碼生成狀態
  315.                                    
  316.              for (i = 0; i < 6; i++)
  317.             {
  318.             wr_com(0x85 + i);
  319.              wr_dat(set[i]);
  320.              }
  321.            for (i = 0; i < 4; i++)
  322.            {
  323.             wr_com(0xc6 + i);
  324.             wr_dat(genPasswd[m][i] + 0x30);
  325.            }

  326.                                 delay(1900);    //等待大約3秒
  327.                                 global_state = 0;  //返回到初始界面
  328.                                 clear();        //清屏,準備下一屏的顯示
  329.                                 
  330.                         break;
  331.                         case 2:          //輸入密碼狀態
  332.                            display4();           //顯示輸入密碼界面
  333.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的為0-9的數字按鍵
  334.                            {
  335.                               
  336.                                 if(count_num <= 3)         //如果按鍵次數小于4次
  337.                                         {
  338.                                         inpPasswd[count_num] = key_value; //將按鍵值存入數組,并顯示
  339.                                                    count_num++;
  340.                                     }
  341.                                          key_value = 0xff;  //將按鍵值清除
  342.                            }
  343.                            if(key_value == 15) //清除按鍵被按下
  344.                            {
  345.                                 key_value = 0xff;  //將按鍵值清除
  346.                                            for(i = 0;i < 4;i++)
  347.                                           inpPasswd[i] = ' '-0x30;  //清除剛剛輸入的密碼
  348.                            }
  349.                            if(key_value == 16) //確認按鍵被按下
  350.                            {
  351.                                 key_value = 0xff;  //將按鍵值清除
  352.                                         for(j=0;j<8;j++)
  353.                                         {
  354.                                            for(i = 0;i < 4;i++)
  355.                                         {
  356.                                                 if(inpPasswd[i] != genPasswd[j][i])
  357.                                                    break;
  358.                                         }
  359.                                         }
  360.                                         if(i == 4)          //密碼輸入正確
  361.                                         {
  362.                                                 switch (j)
  363.                     {
  364.                     case 1:
  365.                         gui = gui - 1;
  366.                        
  367.                         display3();
  368.                         break;

  369.                     case 2:
  370.                         gui = gui - 2;
  371.                        
  372.                         display3();
  373.                         break;

  374.                     case 3:
  375.                         gui = gui - 4;
  376.                         
  377.                         display3();
  378.                         break;

  379.                     case 4:
  380.                         gui = gui - 8;
  381.                         
  382.                         display3();
  383.                         break;

  384.                     case 5:
  385.                         gui = gui - 16;
  386.                         
  387.                         display3();
  388.                         break;

  389.                     case 6:
  390.                         gui = gui - 32;
  391.                        
  392.                         display3();
  393.                         break;

  394.                     case 7:
  395.                         gui = gui - 64;
  396.                        
  397.                         display3();
  398.                         break;

  399.                     case 8:
  400.                         gui = gui - 128;
  401.                         
  402.                         display3();
  403.                         break;
  404.                     }
  405.                                         }
  406.                                         else   //密碼輸入錯誤
  407.                                         {
  408.                                                 delay(700);
  409.                                                 jingao = 1;
  410.                                                 delay(1900);   
  411.                                                 jingao = 0;  
  412.                                         }
  413.                                         clear();           //清屏,準備下一屏的顯示
  414.                                         global_state = 0;  //返回到初始界面

  415.                            }
  416.                         break;        
  417.                 }
  418.         }
  419. }

  420. void T0_interrupt(void) interrupt 1         
  421. {
  422.         TH0 += TH0_temp;
  423.         TL0 += TL0_temp;

  424. }



  425.         




復制代碼

http://www.zg4o1577.cn/bbs/dpj-77180-1.html這個網址是原帖


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

使用道具 舉報

沙發
ID:718777 發表于 2020-4-1 18:41 | 只看該作者
回復

使用道具 舉報

板凳
ID:584814 發表于 2020-4-2 14:02 | 只看該作者
“因為原作者只放了一個main.c,所以我也只放一個main,.......”看來問題就出在這里啊
人家是有染坊后給你點顏色,你是只有點顏色就想開染坊。
回復

使用道具 舉報

地板
ID:718777 發表于 2020-4-3 00:36 | 只看該作者
man1234567 發表于 2020-4-2 14:02
“因為原作者只放了一個main.c,所以我也只放一個main,.......”看來問題就出在這里啊
人家是有染 ...

沒有的  他的下載鏈接里又全部的,但是他只免費了main。c   我如果全放出來那不就是坑他嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久了 | 中国大陆高清aⅴ毛片 | 亚卅毛片 | 久久久久国产 | 午夜激情视频 | 欧美色综合一区二区三区 | 伊人影院99| 亚洲一区二区精品视频在线观看 | 天天插天天操 | 日韩福利在线 | 精品91久久久 | 最新av在线网址 | 超碰免费观看 | 日韩有码一区 | 亚洲精选一区二区 | 蜜桃视频一区二区三区 | 国产一区视频在线 | 伊人影院在线观看 | 日韩一区二区三区四区五区 | 91社区视频 | 日韩精品在线视频 | 日日日操 | 亚洲精品电影 | 9191在线观看 | ririsao久久精品一区 | 天堂网中文字幕在线观看 | 青草福利| 日韩中文字幕视频 | 国产午夜精品视频 | 亚洲精品视频一区 | 亚洲激情视频在线 | 正在播放国产精品 | 国产激情视频在线 | 国产精品美女久久久免费 | 综合一区二区三区 | 国产亚洲精品综合一区 | av一区二区在线观看 | 97精品超碰一区二区三区 | 国产精品国产精品国产专区不卡 | av在线天堂网 | 中文字幕高清 |