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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的自動存儲柜系統設計 by KIZAI

[復制鏈接]
跳轉到指定樓層
樓主
本人是一名大二的高職院學生,這只是本人的一個練習設計,寫這個貼子主要是為了讓想學單片機的師兄可以做下參考,這只是一個比較簡單的案例,以下我把我的設計文檔分享給大家,主要是給你們參考,希望大家學電子專業不是為了渾水摸魚,有什么不懂的可以加我qq問我!大家互相學習!!!阿里嘎多!!!

摘要
    本設計以AT89C52為主控制器,來實現通過密碼的比對完成自動存取包過程的設計。整個系統由控制模塊、LCD1602顯示模塊和矩陣按鍵模塊組成。
    此自動存包柜系統能控制4個存包柜,它利用控制柜門的打開,當顧客按“存包”或“取包”鍵時,相應的空柜門會自動打開(本項目通過亮燈表示打開),并且能產生一組4位數的隨機密碼,密碼使用一次有效,且有三次容錯功能和解鎖功能,所以安全性能很高。由于隨機密碼是軟件產生,使得硬件更為經濟實用、簡單且便于安裝。
第一節    控制系統的工作原理及技術要求

本系統采用AT89C52單片機為主控制器,可以同時管理4個存包柜。當顧客需要存包的時候,可以自行到存包柜前按“存”鍵,單片機接收到一脈沖信號,并通過系統I/O口發出相應的信號,控制鎖柜門的電磁閥將一空箱打開(用對應的燈表示),顧客即可存包。當顧客需要取包時,只要手動輸入密碼就會把信息輸出相應的高低電平信號傳給單片機,系統比較密碼一致后,打開相應的箱子,顧客可以取包。
本系統要求具有較高的自動化程度,以AT89C52單片機為核心,通過按鍵控制柜門(燈)的打開。關門后通過LCD1602顯示柜子的信息;實時顯示無物的箱體號。并具有斷電保護功能。
第二節  自動存包柜系統框圖

該系統MC51單片機為核心,還有空箱顯示,斷電保護等部分。



圖 1-1 自動存包柜系統框圖

第二節    電路設計一、  按鍵、矩陣輸入電路

按鍵、矩陣按鍵圖如圖1-2。該系統中鍵盤的主要功能是用于顧客選擇適當的柜來存包,這里我們用3x4矩陣式鍵盤和兩個獨立按鍵,用獨立按鍵來實現存取的功能,矩陣鍵盤實現密碼解鎖功能,矩陣鍵盤有一個確定按鍵,鍵盤是用AT89C52通過橫縱掃描方式實現矩陣鍵盤的功能,使用編程掃描方式可以很容易的實現鍵盤和顯示的功能及消抖功能。
file:///C:/Users/THIC-PC/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png
圖 1-2  按鍵和矩陣按鍵電路
二、  對應柜子燈設計

提示電路圖1-3。由于時間和耗材不足的問題,就沒有準備做機械開關,只能通過燈亮滅情況來說明柜子的情況,我采用低電平觸發,由于單片機I/O的電壓過低,燈的功率過大都可能影響燈的高度,從而影響實際體驗,所以把燈采用共陽低電平觸發,保證顯示效果。



圖 1-3  提示燈電路設計
三、  報警模塊電路設計

報警電路圖1-4。為了提醒顧客密碼輸入錯誤或提醒柜子全都被使用而設計的報警模塊。
報警電路使用到的是有源蜂鳴器,所以要有三極管來驅動提供足夠的電壓來驅使蜂鳴器發聲,所以我們把信號傳到三極管的基極讓三極管為蜂鳴器提供
動力。
圖 1-4  報警模塊設計
四、  主控制器電路設計

主控制器電路圖1-4。本項目采用的主控是89C52,基本的晶振設計和復位電路都必須要具備的,還有一個復位按鍵,可以在單片機卡BUG的時候可以進行復位。


圖 1-5  主控電路設計
程序主要源代碼
主函數部分
#include "LCD1602.h”
#include "TIME0.h"   
#include "Key_scan.h"
#include<stdlib.h>//數學運算的頭文件
uchar cabinet_1=0; //一號柜子空/滿的標志位
uchar cabinet_2=0; //二號柜子空/滿的標志位
uchar cabinet_3=0; //三號柜子空/滿的標志位
uchar cabinet_4=0; //四號柜子空/滿的標志位
uchar FULL_flag=1; //柜子全部是空標志

uint Cipher_1=0;    //一號柜子密碼緩存
uint Cipher_2=0;    //二號柜子密碼緩存
uint Cipher_3=0;    //三號柜子密碼緩存
uint Cipher_4=0;   //四號柜子密碼緩存

#define default_1 1111     //一號柜子的默認密碼1111
#define default_2 2222     //二號柜子的默認密碼2222
#define default_3 3333     //三號柜子的默認密碼3333
#define default_4 4444    //四號柜子的默認密碼4444

uchar lcd_The_first_line[16]={"1-NULL    2-NULL"};
uchar lcd_The_second_line[16]={"3-NULL    4-NULL"};
{
  if(cabinet_1){lcd_The_first_line[2]='F';}else{lcd_The_first_line[2]='N';}
  if(cabinet_2){lcd_The_first_line[12]='F';}else{lcd_The_first_line[12]='N';}
  if(cabinet_3){lcd_The_second_line[2]='F';}else{lcd_The_second_line[2]='N';}
   if(cabinet_4){lcd_The_second_line[12]='F';}else{lcd_The_second_line[12]='N';}
   WriteChar(1,0,16,lcd_The_first_line);   
   WriteChar(2,0,16,lcd_The_second_line);
}void System_init(void)
{
   LED_ALL_ON();
   Delay_ms(500);
   LED_ALL_OFF();
   Delay_ms(500);

   LED_ALL_ON();
   Delay_ms(500);
   LED_ALL_OFF();
   Delay_ms(500);

   LED_ALL_ON();
   Delay_ms(500);
   LED_ALL_OFF();
   Delay_ms(500);

   BUZZER_ON();
   LED_ALL_ON();
   Delay_ms(1000);
   BUZZER_OFF();
   LED_ALL_OFF();
   Delay_ms(1000);
}
//存東西函數
uint Random_Cipher(uchar CH)
{
   uint Cipher_val;
   ucharCipher_all[16]={"Cipher:     CH:"};
   if(CH==1)Cipher_all[15]='1';
   elseif(CH==2)Cipher_all[15]='2';
   elseif(CH==3)Cipher_all[15]='3';
   elseif(CH==4)Cipher_all[15]='4';
   srand(count);//設置隨機數種子
   Cipher_val=rand()%1000; //調用隨機函數,產生一個1000以內的函數,用作隨機密碼。
   Cipher_all[7]=Cipher_val/1000+0x30;
   Cipher_all[8]=Cipher_val/100%10+0x30;
   Cipher_all[9]=Cipher_val/10%10+0x30;
   Cipher_all[10]=Cipher_val%10+0x30;   
   WriteChar(1,0,16,"Pleaseremember  ");
   WriteChar(2,0,16,Cipher_all);
   return Cipher_val;
}
void Storage(void)
{
   if(!cabinet_1){cabinet_1=1;FULL_flag=0;LED1=1;Cipher_1=Random_Cipher(1);}//第一個柜子是空的
  else if(!cabinet_2){cabinet_2=1;FULL_flag=0;LED2=1;Cipher_2=Random_Cipher(2);} //第二個柜子是空的
  elseif(!cabinet_3){cabinet_3=1;FULL_flag=0;LED3=1;Cipher_3=Random_Cipher(3);} //第三個柜子是空的
  elseif(!cabinet_4){cabinet_4=1;FULL_flag=0;LED4=1;Cipher_4=Random_Cipher(4);} //第四個柜子是空的
   else
   {
        //FULL_flag=1;
        WriteChar(1,0,16,"Sorry!Full load");
        WriteChar(2,0,16,"Thankyou....   ");
        BUZZER_ON();Delay_ms(2000);BUZZER_OFF();//蜂鳴器提醒
   }
   while((uchar)Key_scan()!=11);{LCD_DISP_ALL();/*LED_ALL_OFF;*/}
void Extract(void)
{
   uchar i=0,j=0;
   uint Cipher_val;
   ucharCipher_all[16]={"Cipher:        "};
   if(FULL_flag)
   {
        WriteChar(1,0,16,"Sorry!No-load  ");
        WriteChar(2,0,16,"Thankyou....   ");
        BUZZER_ON();Delay_ms(2000);BUZZER_OFF();
        Delay_ms(4000);
        LCD_DISP_ALL();
   }
   else
   {
        WriteChar(1,0,16,"Pleaseinput     ");
        WriteChar(2,0,16,Cipher_all);
        while(1)
        {
              i=Key_scan();//掃描函數0-9確認
              if(i!=11&&i!=12&&i!=13&&j<4)//4位密碼數
              {   
                   Cipher_all[8+j++]=(i+0x30);
                   WriteChar(2,0,16,Cipher_all);
              }
              if(i==11)//確認鍵,比較密碼是否正確
              {
                   Cipher_val=(Cipher_all[8]-0x30)*1000+(Cipher_all[9]-0x30)*100+(Cipher_all[10]-0x30)*10+(Cipher_all[11]-0x30);   
                  if(Cipher_val==Cipher_1||Cipher_val==default_1){cabinet_1=0;LED1=0;}
                  if(Cipher_val==Cipher_2||Cipher_val==default_2){cabinet_2=0;LED2=0;}
   if(Cipher_val==Cipher_3||Cipher_val==default_3){cabinet_3=0;LED3=0;}      if(Cipher_val==Cipher_4||Cipher_val==default_4){cabinet_4=0;LED4=0;}
   if(cabinet_1==0&&cabinet_2==0&&cabinet_3==0&&cabinet_4==0)FULL_flag=1;

               if(Cipher_val==Cipher_1||Cipher_val==Cipher_2||Cipher_val==Cipher_3||Cipher_val==Cipher_4||Cipher_val==default_1||Cipher_val==default_2||Cipher_val==default_3||Cipher_val==default_4)
                   {
                         WriteChar(1,0,16,"CipherCorrect ! ");
                         WriteChar(2,0,16,"Goodluck....    ");
                         BUZZER_ON();Delay_ms(2000);BUZZER_OFF();
                   }
                   else
                   {
                         WriteChar(1,0,16,"CipherError!   ");
                         WriteChar(2,0,16,"Reenter!!!     ");
                         BUZZER_ON();Delay_ms(6000);BUZZER_OFF();     
                   }
                   Delay_ms(4000);
                   LCD_DISP_ALL();
                   /*LED_ALL_OFF();*/
                   break;
              }
        }
   }   
}
void main(void)
{
   System_init();
   Time0_Init();

   LCD_Init();   
  LCD_DISP_ALL();
  while(1)
   {   
        if(!Save){Delay_ms(10);while(!Save);Storage();}//存鍵
        if(!Take){Delay_ms(10);while(!Take);Extract();}//取鍵
   }
}
比較難的部分都寫好注解了
其他代碼自己寫,不會就多看書,問度娘,只要你不是睿智的,只要花點時間就會寫,別給自己找太多借口,不然你永遠無法進步。

接下來是PCB的布局和成品的樣子



注意可調電阻二號腳的位置



這是成品的板子



具體效果樣圖



補充一句,如果你需要這塊板子可以私聊我,板子是白色的。

第一次發帖,請大家多多指教!!


評分

參與人數 2黑幣 +65 收起 理由
彬Lsl + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:718110 發表于 2020-4-9 13:24 | 只看該作者
頭文件可以發出來研究一下嗎
回復

使用道具 舉報

板凳
ID:718110 發表于 2020-4-9 13:25 | 只看該作者
本篇文章寫的特別好,可以把頭文件發出來研究一下嗎
回復

使用道具 舉報

地板
ID:621446 發表于 2021-4-3 19:46 | 只看該作者
您好!可以發下完整代碼嗎?小白想學習下 謝謝~
回復

使用道具 舉報

5#
ID:672473 發表于 2021-5-27 12:10 | 只看該作者
完整代碼可以分享一下嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产99久久久国产精品 | h视频免费在线观看 | 在线日韩 | 欧美日韩在线视频一区二区 | 视频在线观看一区二区 | 国产免费拔擦拔擦8x高清 | 久久亚洲二区 | 97国产精品视频人人做人人爱 | 黄色在线观看国产 | 一区二区三区四区不卡视频 | 免费黄色大片 | 99re99| 国产伦一区二区三区 | 精品久久久久久久久久久久久久 | 羞羞视频在线观看网站 | 色婷婷综合久久久中文字幕 | 久久丝袜 | 成人在线免费观看av | 中文字幕在线观看日韩 | 啪啪av| 日本一区二区在线视频 | 91久久久久久久久 | 欧美一区二区三区在线免费观看 | 国产美女一区二区三区 | 国产精品夜夜春夜夜爽久久电影 | 日本高清视频网站 | 亚洲综合五月天婷婷 | 日韩久久久久 | 日韩视频1| 91人人视频在线观看 | 国产一区中文字幕 | 精品国产乱码久久久久久88av | 国产精品久久网 | 91影库 | 国产精品www | 一级一片在线观看 | 国产精品久久久久久久久久免费看 | 国产精品一区二区三区久久 | 在线看无码的免费网站 | 免费看啪啪网站 | 成人午夜激情 |