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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7829|回復: 4
收起左側

超市存包柜系統設計 PPT proteus仿真及密碼鎖源程序

[復制鏈接]
ID:161768 發表于 2017-2-10 22:54 | 顯示全部樓層 |閱讀模式

給51黑電子論壇的朋友們分享一個超市存包柜系統設計:


完整資料下載:
http://www.zg4o1577.cn/bbs/dpj-77166-1.html


下面是
超市存包柜設計的ppt文檔預覽:
0.png

0.png

設計思路
      本設計采用AT89C51單片機作為控制核心,以LCD1602作為顯示器件,以矩陣鍵盤作為人機操作手段。
     系統主要設置了“存包”和“取包”的功能,當存包時,系統會生成一個四位的隨機數密碼,供用戶記憶;然后取包時,用戶輸入剛才的密碼,如果密碼正確就開鎖,如果錯誤就不開鎖,并做出警告提示。

0.png


5、繼電器電路的設計

采用繼電器來模擬柜門的開關
該繼電器一端固定接地,另外一端接P37引腳
當P37為高,繼電器吸合,代表關門
當P37為低,繼電器斷開,代表開門
0.png


按鍵電路的設計
系統設計了1個4*4的矩陣鍵盤
  其中有10個數字按鍵(0-9)
存包 – 按下此按鍵,生成隨機密碼
取包 – 按下此按鍵,進行密碼輸入
清除 – 在輸入密碼過程中,按下此鍵,可以清空輸入
確認 – 按下此鍵,進行密碼驗證

0.png


LED電路設計
系統采用一個紅色LED,用來作為密碼錯誤提示
一個綠色LED,用來作為密碼正確提示
紅色LED正極通過一個限流電阻接電源正極,負極接單片機P33,因此P33為低時,該LED點亮
綠色LED正極通過一個限流電阻接電源正極,負極接單片機P34,因此P34為低時,該LED點亮


0.png


0.png


0.png


下面是仿真原理圖:

0.png
0.png

超市存包柜(電子密碼鎖)單片機主程序:
  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]);
  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]);
  53.    }
  54.    for(i = 0;i < 4;i++)
  55.    {
  56.                    wr_com(0xc6+i);
  57.                 wr_dat(genPasswd[i]+0x30);
  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]);
  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]);
  83.    }
  84.    for(i = 0;i < 4;i++)
  85.    {
  86.                    wr_com(0xc6+i);
  87.                 wr_dat(inpPasswd[i]+0x30);
  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;
  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;  //清除剛剛輸入的密碼
  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])
  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. }

復制代碼


本設計的完整資料下載(含仿真 論文 原理圖 ppt等):
http://www.zg4o1577.cn/bbs/dpj-77166-1.html



回復

使用道具 舉報

ID:338109 發表于 2018-5-25 15:51 | 顯示全部樓層
灰常感謝分享!!
回復

使用道具 舉報

ID:621033 發表于 2019-10-9 14:12 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:599674 發表于 2019-10-25 14:26 來自觸屏版 | 顯示全部樓層
太感謝樓主
回復

使用道具 舉報

ID:677478 發表于 2019-12-30 14:38 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91综合网 | 亚洲一区视频在线 | 91网站在线观看视频 | 国产成人免费视频网站高清观看视频 | 91久久精品一区二区二区 | 天堂一区二区三区 | 国产91精品久久久久久久网曝门 | 国产精品毛片久久久久久久 | 成人午夜在线视频 | 国产精品亚洲视频 | 麻豆视频在线免费看 | 亚洲精彩免费视频 | 美女久久| 日韩三级| 亚洲成av人片在线观看 | 国产精品视频在 | 九九在线视频 | 成人影院在线视频 | 国产日韩视频 | 精品久久久久香蕉网 | 一区二区在线不卡 | 日韩在线中文 | 国产精品美女久久久久久久久久久 | 狠狠色综合久久婷婷 | 成人在线免费电影 | 日本午夜视频 | 日韩久久久久久 | 成人在线视频网 | 一区二区三区日韩 | 国产免费一区二区三区网站免费 | 亚洲精品国产区 | 色资源在线| 亚洲精品68久久久一区 | 久久成人综合 | 中文字幕av网 | 99精品视频一区二区三区 | 久久九| 亚洲永久免费 | 日本电影免费完整观看 | 九九九国产 | 91精品久久久久久久久 |