自動售貨機系統(tǒng)設(shè)計圖文_51單片機,Proteus仿真牲平,C程序堤框,論文,原理圖

注意:獲取全套設(shè)計纵柿,請見文末說明…

概述
本文設(shè)計了一款以AT89C51單片機為核心的自動售貨機系統(tǒng)蜈抓,并且著重詳細地介紹了自動售貨機的整體系統(tǒng)設(shè)計方案、硬件選擇基礎(chǔ)昂儒、軟件使用方法及技巧沟使。以AT89C51作為CPU處理單元連接各個功能模塊;以4×4矩陣鍵盤作為輸入控制模塊對貨物進行種類和數(shù)量的選擇以及模擬貨幣的投入功能荆忍;以LCD1602液晶作為顯示模塊來顯示當前的購物狀態(tài)以及貨幣狀態(tài)格带;以LED的顯示來表示當前選擇貨物以及出貨的狀態(tài)撤缴。

系統(tǒng)框圖.jpg

自動售貨機原理
在初始化的界面等待顧客按鍵選擇貨物的種類和數(shù)量顧客投入貨幣刹枉,按下確定購買鍵后等待售貨機自動計算所購商品的總價,然后提示顧客投入貨幣屈呕。所投的貨幣經(jīng)過外部硬件檢測傳感器檢測真假后累加計數(shù)微宝。若顧客確認購買系統(tǒng)則跳轉(zhuǎn)到下一步驟,反之取消購買即退出貨幣返回到主界面虎眨,等待顧客下一步操作蟋软。自動售貨機通過貨幣的總價與和所購商品的總價的差值來進行出貨找零。
自動售貨機框圖.jpg

自動售貨機的控制子系統(tǒng)由以下幾個部分組成嗽桩,分別是預(yù)設(shè)自動售貨系統(tǒng)岳守、金額累加和找零系統(tǒng)、售完檢測系統(tǒng)碌冶、售出累計及反饋功能系統(tǒng)湿痢。(各子系統(tǒng)詳細介紹,請見論文)

自動售貨機功能概述
系統(tǒng)通過矩陣鍵盤來選擇貨物的種類與數(shù)量過后自動售貨機提示投幣。自動售貨機的貨幣識別器對所投貨幣進行識別譬重,根據(jù)金額大小然后將商品選擇權(quán)通過LCD液晶顯示給客戶拒逮,客戶按鍵選擇后,CPU控制芯片發(fā)出指令將所選擇商品從儲備料道中送達取物口臀规。

貨物種類一共設(shè)有8種滩援,這8種商品通過選擇按鍵進行選擇確認,通過數(shù)量選擇按鍵確定購買數(shù)量塔嬉,價格規(guī)定為1-8元不等玩徊;貨幣識別器能夠識別1元硬幣、1元紙幣谨究、5元紙幣佣赖、10元紙幣、20元紙幣50元紙幣以及100元紙幣记盒。在規(guī)定的時間內(nèi)憎蛤,投了幾次貨幣后,貨幣能夠?qū)崿F(xiàn)自動累加功能纪吮,這樣設(shè)計會把投入的所有貨幣總額數(shù)目數(shù)據(jù)傳遞到中央控制元器件進行處理俩檬;在超過規(guī)定時間后投幣口自動關(guān)閉,數(shù)據(jù)處理單元按照投幣總數(shù)和購買的數(shù)量和價格乘積來進行加減運算碾盟,實現(xiàn)購買和找?guī)殴δ芘锪伞.斖度氲呢泿趴傊敌∮谏唐房偨痤~時,則不能進行購貨冰肴,投入的錢將全部退還屈藐。

本設(shè)計中有一共有16個按鍵選擇,其中有兩個是貨物選擇鍵熙尉,有兩個是數(shù)量選擇鍵联逻,此外還有6個貨幣投入鍵1個確認鍵和1個取消鍵。

系統(tǒng)仿真電路圖

完整電路圖.jpg

操作說明.jpg

原理圖
原理圖.png

仿真結(jié)果分析
(1)加載Sale.hex文件到AT89C51單片機检痰,點擊運行包归,自動售貨機系統(tǒng)進入初始化等待狀態(tài),LCD顯示“Welcome Sale”,同時等待按鍵輸入铅歼。

待機.png

(2)通過按鍵“價格+”和“價格-”來選擇貨物的種類公壤,然后通過“數(shù)量+”和“數(shù)量-”來選擇所購買貨物的數(shù)量,同時代表被選擇貨物的LED指示燈亮椎椰。
價格與數(shù)量.png

模擬顯示.png

(3)當選擇好貨物后厦幅,按下“確認OK”鍵進入到投幣系統(tǒng),此時機器會自動計算出所購貨物總金額慨飘。
計算金額

(4)當機器計算出總價等待顧客投入貨幣并按下“確認OK”鍵后确憨,當投入貨幣貨幣值大于或等于總價時就出貨并找零,若投入貨幣貨幣值小于總價則不能出貨只能按下“取消NO”退出所投貨幣或繼續(xù)增加投幣。
投幣10塊.png

出貨及找零

5)當完成以上步驟后則完成一次自動購物過程缚态,機器自動復(fù)位回到初始化界面磁椒,同時在操作過程中的任一環(huán)節(jié),都可通過按下“取消NO”鍵玫芦,是售貨機系統(tǒng)復(fù)位到初始狀態(tài)浆熔。

部分C代碼

#include<reg51.h>
#define WAIT_SALE        0            
#define NO_WATER         1                 
#define INPUT_MONEY        2 
#define SALING                3
#define CHANGE                4
#define CANCLE                5
#define NO_DATA                0
#define water_change(x, y) ((x) & (~(0x01 << y)))
#define uint unsigned int
#define uchar unsigned char

unsigned char water_total[] = {10, 10, 10, 10, 10, 10, 10, 10};   
unsigned char water_price[] = {1, 2, 3, 4, 5, 6, 7, 8};
uchar code wait_sale[]=" Welcome Sale ";    //定義所顯示的內(nèi)容
uchar code no_water[] = "No Water!";
uchar code price[] = "Price:";
uchar code number[] = "Num:";
uchar code sum[] = "SUM:";
uchar code input[] = "INPUT:";
uchar code change[] = "Change:";
uchar code put_water[] = "Get Water...";
uchar code cancle[] = "Cancle...";

unsigned char e=0x00;                    
sbit P2_0=P2^0;                       //定義接端口
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit lcd_en=P3^4;             
sbit rs=P3^2;
sbit rw = P3^3;

void lcd_1602_delay(uint z)          //延時
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_1602_write_com(uchar com)   //寫命令
{
rs=0;
rw=0;
P2=com;
lcd_1602_delay(5);
lcd_en=1;
lcd_1602_delay(5);
lcd_en=0;
}

void lcd_1602_write_data(uchar date) //寫數(shù)據(jù)
{
rs=1;
rw=0;
P2=date;
lcd_1602_delay(5);
lcd_en=1;
lcd_1602_delay(5);
lcd_en=0;
}

void lcd_1602_init()               //LCD1602初始化函數(shù)
{
lcd_en=0;
lcd_1602_write_com(0x38);
lcd_1602_write_com(0x06);
lcd_1602_write_com(0x01);
}

void lcd_1602_wait_sure()         //顯示'OK'&'NO'界面
{
lcd_1602_write_com(0x80+0x40);
lcd_1602_write_data('O');
lcd_1602_write_data('K');
                
lcd_1602_write_com(0x80+0x4e);
lcd_1602_write_data('N');
lcd_1602_write_data('O');
}

void lcd_1602_show_num(uint num)       // 1602顯示數(shù)字的函數(shù)
{
IF(num <= 9) 
 {
   lcd_1602_write_data('0'+num);
   lcd_1602_write_data(' ');
  }else if(num >= 10 ) 
 {
   lcd_1602_write_data('0'+num/10);
   lcd_1602_write_data('0'+num%10);
  }
}

void lcd1602_info_display(uint choose, uint num_type, uint num_count)  
{
int num;
lcd_1602_write_com(0x01);
switch(choose) 
  {
case WAIT_SALE:
lcd_1602_write_com(0x80+0x01);       //
for(num = 0; num < 13; num++) 
{
lcd_1602_write_data(wait_sale[num]);
}
break;
case NO_WATER:
lcd_1602_write_com(0x80+0x03);
for(num = 0; num < 9; num++)
  {
   lcd_1602_write_data(no_water[num]);        
   }
break;
case SALING:
lcd_1602_write_com(0x80+0x00);
for(num = 0; num < 6; num++) 
  {
    lcd_1602_write_data(price[num]);
   }
lcd_1602_write_data('0'+(num_type+1));
lcd_1602_write_data(' ');
lcd_1602_write_data(' ');
for(num = 0; num < 4; num++) 
          {
           lcd_1602_write_data(number[num]);
           }
lcd_1602_show_num(num_count);
break;
case INPUT_MONEY:
lcd_1602_write_com(0x80+0x00);
for(num = 0; num < 4; num++) 
    {
      lcd_1602_write_data(sum[num]);
    }
lcd_1602_show_num(num_type);
lcd_1602_write_data(' ');
lcd_1602_write_data(' ');
for(num = 0; num < 6; num++) 
        {
       lcd_1602_write_data(input[num]);
        }
lcd_1602_show_num(num_count);
break;
case CHANGE:
if(!num_count) 
                {
                //put water
       lcd_1602_write_com(0x80+0x02);
                for(num = 0; num < 13; num++)
            {
lcd_1602_write_data(put_water[num]);
            }
       }
else 
{
lcd_1602_write_com(0x80+0x02);              //取消選擇時寫命令退幣
for(num = 0; num < 9; num++) 
        {
             lcd_1602_write_data(cancle[num]);
        }
}
for(num = 0; num < 7; num++)
        {
            lcd_1602_write_data(change[num]);
        }
lcd_1602_show_num(num_type);
break;
default:
break;
}
lcd_1602_write_com(0x0c);
}
void lcd_1602_saling(uint type, uint num)
{
        lcd1602_info_display(SALING, type, num);
        lcd_1602_wait_sure();
}

void lcd_1602_inputing(uint need, uint input)
{
  lcd1602_info_display(INPUT_MONEY, need, input);
  lcd_1602_wait_sure();
}

資源分享內(nèi)容有:
(1)【完整終版畢業(yè)論文】基于AT89C51單片機的自動售貨機系統(tǒng)設(shè)計.doc
(2)Proteus仿真;
(3)Keil C程序桥帆;
(4)參考資料医增;
(5)Visio流程圖文件;
(6)原理圖文件老虫;

資源截圖:

資源1.png

資源2.png

資源3.png

資源4.png

資源5.png

資源獲取方法
資源獲取方法
資源獲取方法
重要的事情說三遍R豆恰!F沓住:龉簟!6嵊9虻邸!P┰摹I〗!!
由于本設(shè)計為作者原創(chuàng)設(shè)計市埋,
獲取以上所有資源內(nèi)容黎泣,請搜索關(guān)注我的公眾號:交院小智

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缤谎,隨后出現(xiàn)的幾起案子抒倚,更是在濱河造成了極大的恐慌,老刑警劉巖弓千,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡便,死亡現(xiàn)場離奇詭異献起,居然都是意外死亡洋访,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門谴餐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姻政,“玉大人,你說我怎么就攤上這事岂嗓≈梗” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長食绿。 經(jīng)常有香客問我侈咕,道長,這世上最難降的妖魔是什么器紧? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任耀销,我火速辦了婚禮,結(jié)果婚禮上铲汪,老公的妹妹穿的比我還像新娘熊尉。我一直安慰自己,他們只是感情好掌腰,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布狰住。 她就那樣靜靜地躺著,像睡著了一般齿梁。 火紅的嫁衣襯著肌膚如雪催植。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天勺择,我揣著相機與錄音查邢,去河邊找鬼。 笑死酵幕,一個胖子當著我的面吹牛扰藕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芳撒,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼邓深,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笔刹?” 一聲冷哼從身側(cè)響起芥备,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舌菜,沒想到半個月后萌壳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡日月,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年袱瓮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爱咬。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡尺借,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出精拟,到底是詐尸還是另有隱情燎斩,我是刑警寧澤虱歪,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站栅表,受9級特大地震影響笋鄙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怪瓶,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一局装、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劳殖,春花似錦铐尚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至矛缨,卻和暖如春爹脾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箕昭。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工灵妨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人落竹。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓泌霍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親述召。 傳聞我的和親對象是個殘疾皇子朱转,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353