飲料自動自助售賣機的設(shè)計【含CAD圖紙和說明書】
程序單1. 程序1(紙杯選擇控制程序):按照逆時針B-BC-C-CA-A-AB-B-BC-C通電,每相鄰一拍延時0.2s,最后一拍完成后延時10s電機順時針轉(zhuǎn)延 時 10s 鐘電機逆時針轉(zhuǎn)靜止并鎖定P1.2P1.1P1.0置為“010”保持P1.2P1.1P1.0始終不變 步進電機轉(zhuǎn)回最初位置并鎖定位置步進電機控制程序P1.4P1.3=01P1.4P1.3=11P1.4P1.3=10P1.1置為“1”按照逆時針B-BA-A-AC-C-CB-B-BA-A通電,每相鄰一拍延時0.2s,最后一拍完成后延時10sP1.5=1?即發(fā)現(xiàn)假幣否?保持靜止并鎖定YESNO#include sbit L0=P10; /定義端口,A相;sbit L1=P11;/B相;sbit L2=P12;/C相;sbit L3=P13;sbit L4=P14;sbit L5= P15;sbit L6=P16;void delay10s(void) /延時10秒子程序unsigned char i,j,k;for(i=019H;i0;i-)for(j=085H;j0;j-)for(k=0FAH;k0;k-);void delay02s(void) /延時0.2秒子程序unsigned char i,j,k;for(i=20;i0;i-)for(j=20;j0;j-)for(k=248;k0;k-);void main(void)while(L5=0)if(L4=1)&(L3=1)/選擇1.5元的紙杯L1=1; /順時針方向轉(zhuǎn)過15L2=1;L0=0;Delay02s();L1=0; / 順時針方向轉(zhuǎn)過15L2=1;L0=0;Delay02s();L0=1; / 順時針方向轉(zhuǎn)過15 L1=0; L2=1;Delay02s();L0=1; / 順時針方向轉(zhuǎn)過15 L1=0; L2=0; Delay02s();L0=1; / 順時針方向轉(zhuǎn)過15 L1=1; L2=0; Delay02s();L0=0; / 順時針方向轉(zhuǎn)過15 L1=1; L2=0; Delay02s();L0=0; / 順時針方向轉(zhuǎn)過15 L1=1; L2=1; Delay02s();L0=0; / 繼續(xù)順時針方向轉(zhuǎn)過15并鎖定等待挖紙杯 L1=0; L2=1; L6=1; Delay02s(); /預(yù)留6ms的時間給螺線管挖紙杯Delay02s();Delay02s();L6=0; L1=1; /逆時針方向轉(zhuǎn)過15 L2=1; L0=0;Delay02s();L1=1; /逆時針方向轉(zhuǎn)過15 L2=0;L0=0;Delay02s();L0=1; /逆時針方向轉(zhuǎn)過15 L1=1; L2=0;Delay02s(); L0=1; /逆時針方向轉(zhuǎn)過15 L1=0; L2=0;Delay02s(); L0=1; /逆時針方向轉(zhuǎn)過15 L1=0; L2=1;Delay02s(); L0=0; /逆時針方向轉(zhuǎn)過15 L1=0; L2=1;Delay02s(); L0=0; /逆時針方向轉(zhuǎn)過15 L1=1; L2=1;Delay02s(); L0=0; /逆時針方向轉(zhuǎn)過15并鎖定 L1=1; L2=0; Else if(L4=0)&(L3=1)/選擇0.5元的紙杯L1=1; /逆時針方向轉(zhuǎn)過15 L2=0; L0=1;Delay02s();L1=0; /逆時針方向轉(zhuǎn)過15 L2=0;L0=1;Delay02s();L0=1; /逆時針方向轉(zhuǎn)過15 L1=0; L2=1;Delay02s(); L0=0; /逆時針方向轉(zhuǎn)過15 L1=0; L2=1;Delay02s(); L0=0; /逆時針方向轉(zhuǎn)過15 L1=1; L2=1;Delay02s(); L0=0; /逆時針方向轉(zhuǎn)過15 L1=1; L2=0;Delay02s(); L0=1; /逆時針方向轉(zhuǎn)過15 L1=1; L2=0;Delay02s(); L0=1; /逆時針方向轉(zhuǎn)過15并鎖定等待挖紙杯 L1=0; L2=0; L6=1; Delay02s();/預(yù)留6ms的時間給螺線管挖紙杯Delay02s();Delay02s();L6=0;L1=1; /順時針方向轉(zhuǎn)過15L2=0;L0=1;Delay02s();L1=1; / 順時針方向轉(zhuǎn)過15L2=0;L0=0;Delay02s();L0=0; / 順時針方向轉(zhuǎn)過15 L1=1; L2=1;Delay02s();L0=0; / 順時針方向轉(zhuǎn)過15 L1=0; L2=1; Delay02s();L0=1; / 順時針方向轉(zhuǎn)過15 L1=0; L2=1; Delay02s();L0=1; / 順時針方向轉(zhuǎn)過15 L1=0; L2=0; Delay02s();L0=1; / 順時針方向轉(zhuǎn)過15 L1=1; L2=0; Delay02s();L0=0; / 繼續(xù)順時針方向轉(zhuǎn)過15并鎖定 L1=1; L2=0; Else if(L4=1)&(L3=0)/選擇1.0元的紙杯并挖出紙杯 L6=1; Delay02s(); /預(yù)留6ms的時間給螺線管挖紙杯Delay02s();Delay02s();L6=0; Else() /其他情況下鎖定在B相位置 L0=0; L1=1; L2=0;2. 程序2(硬幣去留控制程序):開始發(fā)現(xiàn)假幣信號否?即P1.0=1?發(fā)現(xiàn)退幣否?即P1.1=1?NO電機正轉(zhuǎn)(逆時針)收取硬幣電機逆轉(zhuǎn)(順時針)退幣NOYESYES發(fā)現(xiàn)抽飲料按鈕信號否?即P1.3=1?等待2分鐘,并不斷檢查抽飲料按鈕信號NO YES;*步進電機的驅(qū)動; DESIGN BY BENLADN911 FOSC = 12MHz 2010.05.10; -; 步進電機的驅(qū)動信號必須為脈沖信號! 轉(zhuǎn)動的速度和脈沖的頻率成正比!; 本步進電機步進角為 7.5度 . 一圈 360 度 , 需要 48 個脈沖完成!; A組線圈對應(yīng) P2.4; B組線圈對應(yīng) P2.5; C組線圈對應(yīng) P2.6; D組線圈對應(yīng) P2.7; 正轉(zhuǎn)次序: AB組-BC組-CD組-DA組 (即一個脈沖,正轉(zhuǎn) 7.5 度);硬幣識別裝置發(fā)現(xiàn)假幣則發(fā)出“0”信號; - ORG 0000H LJMP MAINORG 0100HMAIN: ORL P2,#30H ;為控制做準備ANL P1,#03H ;為檢查控制條件做準備MOV A,P1JB ACC.1,LOOP4 ;如果發(fā)現(xiàn)假幣則自動退幣,否則等待抽飲料按鈕信號 SJMP LOOP3 ;如果P1.0=0則跳到LOOP3等待 JB ACC.0,LOOP4 ;如果發(fā)現(xiàn)退幣信號則退幣;-正轉(zhuǎn)(逆時針)收取硬幣-LOOP1: MOV R3,#48 ;正轉(zhuǎn) 1圈共48 脈沖START:MOV R0,#00HSTART1:MOV P2,#00HMOV A,R0MOV DPTR,#TABLEMOVC A,A+DPTRJZ START ;對 A 的判斷,當 A = 0 時則轉(zhuǎn)到 STARTMOV P2,ALCALL DELAYINC R0DJNZ R3,START1MOV P2,#00HLCALL DELAY1LJMP MAIN;-反轉(zhuǎn)(順時針)退幣-LOOP3: JB ACC.2,LOOP1 ; 2分鐘內(nèi)等到抽飲料按鈕信號則收取硬幣,否則退幣 JNB ACC.0,LOOP3 ;如果P1.0=0則跳到LOOP3繼續(xù)檢查 SJMP LOOP4LOOP2: LCALL DELAY2 ; 等待延時2分鐘LOOP4: MOV R3,#48; 反轉(zhuǎn)一圈共 48個脈沖START2:MOV P2,#00HMOV R0,#05START3:MOV A,R0MOV DPTR,#TABLEMOVC A,A+DPTRJZ START2MOV P2,ALCALL DELAYINC R0DJNZ R3,START3MOV P2,#00HLCALL DELAY1LJMP MAINDELAY: MOV R7,#40 ;步進電機的轉(zhuǎn)速M3: MOV R6,#248 DJNZ R6,$ DJNZ R7,M3 RETDELAY1:MOV R4,#20 ;2S 延時子程序DEL2:MOV R3,#200DEL3:MOV R2,#250DJNZ R2,$DJNZ R3,DEL3DJNZ R4,DEL2RETDELAY2: ;誤差 0us,2min延時子程序 MOV R6,#0F0HDL0: MOV R5,#0F8H DJNZ R5,$ DJNZ R6,DL0 NOP RETTABLE:DB 30H,60H,0C0H,90H ;正轉(zhuǎn)表DB 00 ;正轉(zhuǎn)結(jié)束DB 30H,90H,0C0H,60H ;反轉(zhuǎn)表DB 00 ;反轉(zhuǎn)結(jié)束END3. 程序3(飲料抽取量控制程序):準備開始發(fā)現(xiàn)出飲料信號否,即P1.6=1?發(fā)現(xiàn)假幣否?沒發(fā)現(xiàn)抽飲料信號?即P1.7=0?檢測硬幣投入量的多少,即檢查P1.4P1.3=?按硬幣投入量控制電機開啟時間,并根據(jù)飲料桶中信號的反饋隨時等待使電機停轉(zhuǎn)!開啟電機,即使P1.5=1維持電機停轉(zhuǎn)維持電機停轉(zhuǎn)使電機停轉(zhuǎn)YESNOYESNONOYES開始檢測硬幣量僅檢測到0.5元硬幣信號,即P1.4P1.3=01僅檢測到1.5元硬幣信號,即P1.4P1.3=11僅檢測到1.0元硬幣信號,即P1.4P1.3=10100ml銅電極通電否,即P1.0=1?300ml銅電極通電否,即P1.2=1?200ml銅電極通電否,即P1.1=1?開啟電機,即使得P1.5=1并維持狀態(tài)使電機停轉(zhuǎn)并維持,即使得P1.5-0維持等待下次交易YESYESYESNONONO#include sbit L0=P10; /定義端口sbit L1=P11; sbit L2=P12; sbit L3=P13; sbit L4=P14; sbit L5=P15; sbit L6=P16; sbit L7=P17;void delay1s(void) /延時1.0秒子程序unsigned char i,j,k;for(i=50;i0;i-)for(j=40;j0;j-)for(k=248;k0;k-);void main(void) sbit L5=1;/初始化,確保電機在停轉(zhuǎn)狀態(tài)while (L7=0 ) /如果L7=0維持電機停轉(zhuǎn)狀態(tài)L5=1; while (L6=0 ) while (L7=1 ) while (L0=0) /檢查容器中液位到了50ml否 if(L4=0&L3=1) L5=0; /開啟電機并延時1.0s Delay1s();L5=1; while (L1=0 ) /檢查容器中液位到了100ml否 if (L4=1&L3=0 ) L5=0;/開啟電機并延時2.0sDelay1s(); Delay1s();L5=1; while (L2=0 ) /檢查容器中液位到了150ml否 if (L4=1&L3=1 ) L5=0; /開啟電機并延時3.0sDelay1s(); Delay1s(); Delay1s(); L5=1; L5=1; /如果檢查到假幣信號或者沒有按下抽飲料按鈕的信號就保持電機停轉(zhuǎn)狀態(tài)L5=1; /如果檢查到出飲料按鈕信號就馬上停止電機4. 單片機組優(yōu)化后的電路、控制流程圖及其程序設(shè)計思路分析:硬幣檢測裝置在檢測到假幣的時候發(fā)出“1”信號,檢測到0.5元硬幣的時候發(fā)出“1”信號并傳送到P1.3端口,檢測到1.0元或兩枚0.5元硬幣的時候發(fā)出“1”信號并傳送到P1.4端口。如上面電路所示,硬幣真假識別信號經(jīng)非門負變之后與抽飲料按鈕信號相與,如果硬幣識別裝置沒檢測到假幣,而消費者并不按下抽飲料按鈕,收取硬幣的電機和抽飲料的電機并不動作,而是保持原狀態(tài)并等待2分鐘,若沒等到抽飲料按鈕信號則自動退幣,否則兩電機都動作實現(xiàn)收取硬幣和抽飲料的目的。在電路中我們還看到硬幣真假識別信號與退幣按鈕信號相或,只要消費者按下退幣按鈕或者硬幣檢測裝置檢測到假幣就馬上退幣。上面電路中我們另一個至關(guān)重要的是出飲料按鈕電路。我們該怎么讓出飲料按鈕信號對單片機起控制作用呢?投機取巧的消費者可能會因為偶然機會發(fā)現(xiàn)邊抽飲料邊出飲料會得到多一點。為了防止這種投機取巧的行為,我們可以將出飲料按鈕信號電路經(jīng)非門負變之后與抽飲料按鈕信號和硬幣真假信號相與再連接到P1.0端口或者直接把出飲料按鈕信號連接到P1.2口,我們選擇的是后者,如此一來一旦消費者按下出飲料按鈕信號售貨機便停止抽飲料。上面電路中我們沒有畫出螺線管的連接電路,我們將其驅(qū)動電路連接在P0.0口。具體的程序及其流程圖如下面所示。準備開始發(fā)現(xiàn)假幣否初始化各電機,使各電機都保持停轉(zhuǎn)狀態(tài)檢測硬幣的總投入量發(fā)現(xiàn)退幣信號否發(fā)現(xiàn)抽飲料信號否開啟收硬幣電機收取硬幣和抽飲料電機抽取飲料NONO, 等待2分鐘 YES開啟電機退幣YESYESNO檢查出飲料信號,按下了否?開啟收硬幣電機收取硬幣和抽飲料電機抽取飲料繼續(xù)抽飲料,直到結(jié)束并停止電機中斷抽飲料電機等待下次交易YESNO開始檢測硬幣量僅檢測到0.5元硬幣信號,即P1.4P1.3=01僅檢測到1.5元硬幣信號,即P1.4P1.3=11僅檢測到1.0元硬幣信號,即P1.4P1.3=10100ml銅電極通電否,即P1.7=1?300ml銅電極通電否,即P1.5=1?200ml銅電極通電否,即P1.6=1?開啟電機,即使得P3.7=1并維持狀態(tài)使電機停轉(zhuǎn)并維持,即使得P3.7=0維持等待下次交易YESYESYESNONONOORG 0000H LJMP MAINORG 0100HMAIN: ANL P3,#23H ;初始化電機狀態(tài),使兩電機保持停轉(zhuǎn)和鎖定狀態(tài)ANL P1,#FFH ;為檢測外部輸入的控制信號做準備MOV A,P1JB ACC.1,LOOP2 ;如果發(fā)現(xiàn)假幣或退幣信號則自動退幣,否則等抽飲料按鈕信號JNB ACC.0,LOOP0 ;如果P1.0=0則跳到LOOP0等待2分鐘 JB ACC.3,AP2 ;P1.3=1 跳轉(zhuǎn)到AP2 JNB ACC.4,LOOP11 ;P1.4=1,P1.3=0則跳轉(zhuǎn)LOOP11挖1元相應(yīng)紙杯 AP2: JB ACC.4,LOOP6 ;P1.4=1則跳轉(zhuǎn)到LOOP6出售1.5元相應(yīng)紙杯SJMP LOOP4 ;P1.4P1.3=01則跳轉(zhuǎn)LOOP4出售0.5元相應(yīng)紙杯;-硬幣去留電機正轉(zhuǎn)(逆時針)收取硬幣-LOOP1: MOV R3,#48 ;正轉(zhuǎn) 1圈共48 脈沖START:MOV R0,#00HSTART1:MOV P3#00HMOV A,R0MOV DPTR,#TABLE1MOVC A,A+DPTRJZ START ;對 A 的判斷,當 A = 0 時則轉(zhuǎn)到 STARTMOV P3,ALCALL DELAYINC R0DJNZ R3,START1MOV P3,#00HLCALL DELAY1SJMP AP1;-硬幣去留電機反轉(zhuǎn)(順時針)退幣-LOOP0: LCALL DELAY2 ;延時等待2分鐘 LOOP2: JB ACC.0,LOOP1 ;2分鐘內(nèi)等到抽飲料按鈕信號則收取硬幣,否則退幣 MOV R3,#48 ;反轉(zhuǎn)一圈共 48個脈沖START2:MOV P3,#00HMOV R0,#05START3:MOV A,R0MOV DPTR,#TABLE1MOVC A,A+DPTRJZ START2MOV P3,ACALL DELAY INC R0DJNZ R3,START3MOV P3,#00HLCALL DELAY1SJMP MAIN ;-紙杯電機正轉(zhuǎn)(逆時針)出售0.5元對應(yīng)的紙杯-LOOP4: MOV R3,#8 ;正轉(zhuǎn) 1/3圈共8 脈沖START4: MOV R0,#00HSTART5: MOV P3,#00H MOV A,R0 MOV DPTR,#TABLE2 ,查表程序 MOVC A,A+DPTR JZ START4 ;對 A 的判斷,當 A = 0 時則轉(zhuǎn)到 START MOV P3,A LCALL DELAY INC R0 DJNZ R3,START5 MOV P3,#20H LCALL DELAY1;-挖出0.5元紙杯- Loop13: ORL P0,#80H ;使P0.0=1,其他位不變LCALL DELAY3ANL P0,7FH ;使P0.0=0,其他位不變;-紙杯電機反轉(zhuǎn)復(fù)位鎖定-LOOP5: MOV R3,#8 ;反轉(zhuǎn)1/3圈共 8個脈沖START6: MOV P3,#00H MOV R0,#07HSTART7: MOV A,R0 MOV DPTR,#TABLE2 ;查表程序 MOVC A,A+DPTR JZ START6 MOV P3,A LCALL DELAY INC R0 DJNZ R3,START7 MOV P3,#20H ;返回到原始位置鎖定電機 LCALL DELAY1 SJMP LOOP8 ;紙杯銷售完后馬上抽200ml飲料;-紙杯電機反轉(zhuǎn)銷售1.5元相應(yīng)的紙杯-LOOP6: MOV R3,#8 ;反轉(zhuǎn)1/3圈共 8個脈沖START8: MOV P3,#00H MOV R0,#07HSTART9: MOV A,R0 MOV DPTR,#TABLE2 MOVC A,A+DPTR JZ START8 MOV P3,A LCALL DELAY INC R0 DJNZ R3,START9 MOV P3,#20H LCALL DELAY1;-挖出1.5元紙杯- LOOP12: ORL P0,#80H ;使P0.0=1,其他位不變進行挖紙杯動作LCALL DELAY3ANL P0,7FH ;使P0.0=0,其他位不變;-紙杯電機正轉(zhuǎn)(逆時針)復(fù)位鎖定-LOOP14: MOV R3,#8 ;正轉(zhuǎn) 1/3圈共8 脈沖START10: MOV R0,#00HSTART11: MOV P3,#00H MOV A,R0 MOV DPTR,#TABLE2 MOVC A,A+DPTR JZ START10 ;對 A 的判斷,當 A = 0 時則轉(zhuǎn)到 START10 MOV P3,A LCALL DELAY INC R0 DJNZ R3,START11 MOV P3,#20H LCALL DELAY1 SJMP LOOP9 ;紙杯銷售完后馬上抽300ml飲料;-挖出1.0元紙杯- LOOP11: ORL P0,#80H ;使P0.0=1,其他位不變LCALL DELAY3ANL P0,7FH ;使P0.0=0,其他位不變SJMP LOOP10 ;紙杯銷售完后馬上抽200ml飲料;-抽飲料- LOOP8: ORL P3,80H ;抽100ml飲料 JB ACC.2,TZ JB ACC.6,MAIN ;檢查容器中液位達到100ml否LCALL DELAY3 ;延時0.5S SJMP FW ;抽完飲料就等待下次交易 LOOP9: ORL P3,80H ;抽300ml飲料 JB ACC.2,TZ JB ACC.4,MAIN ;檢查飲料桶中液位達到300ml否 LCALL DELAY3 ;延時1.5S LCALL DELAY3 LCALL DELAY3 SJMP FW ;抽完飲料就等待下次交易 LOOP10: ORL P3,80H ;抽200ml飲料 JB ACC.2,TZ JB ACC.5,MAIN ;檢查飲料桶中液位達到200ml否 LCALL DELAY3 ;延時1s LCALL DELAY3 SJMP FW ;抽完飲料就等待下次交易TZ: ANL P3,7FH ;檢測到出飲料按鈕信號則使電機停轉(zhuǎn)FW: ANL P3,#23H ;使兩步進電機在原始位置維持鎖定狀態(tài) ANL P1,00H ;使控制信號口都置零,等待下次交易 SJMP MAIN ;循環(huán)檢查;-一些延時子程序-DELAY: MOV R7,#40 ;步進電機的轉(zhuǎn)速M3: MOV R6,#248 DJNZ R6,$ DJNZ R7,M3 RETDELAY1: MOV R4,#20 ;2S 延時子程序DEL2: MOV R3,#200DEL3:MOV R2,#250DJNZ R2,$DJNZ R3,DEL3DJNZ R4,DEL2RETDELAY2: ;誤差 0us,2min延時子程序 MOV R6,#0F0HDL0: MOV R5,#0F8H DJNZ R5,$ DJNZ R6,DL0 NOP RET DELAY3: ;誤差 0us,0.5s延時子程序 MOV R6,#47HDL1: MOV R5,#02H DJNZ R5,$ DJNZ R6,DL0 RETTABLE1:DB 03H,06H,0CH,09H ;硬幣控制電機正轉(zhuǎn)表DB 00 ;正轉(zhuǎn)結(jié)束DB 03H,09H,0CH,06H ;硬幣控制電機反轉(zhuǎn)表DB 00 ;反轉(zhuǎn)結(jié)束 TABLE2: DB 20H,30H,10H,50H,40H,60H ;紙杯電機正轉(zhuǎn)表 DB 00 ;正轉(zhuǎn)結(jié)束 DB 20H,60H,40H,50H,10H,30H ;紙杯電機反轉(zhuǎn)表 DB 00 ;反轉(zhuǎn)結(jié)束 END27
收藏