飲料自動自助售賣機(jī)的設(shè)計(jì)【含CAD圖紙和說明書】
程序單1. 程序1(紙杯選擇控制程序):按照逆時針B-BC-C-CA-A-AB-B-BC-C通電,每相鄰一拍延時0.2s,最后一拍完成后延時10s電機(jī)順時針轉(zhuǎn)延 時 10s 鐘電機(jī)逆時針轉(zhuǎn)靜止并鎖定P1.2P1.1P1.0置為“010”保持P1.2P1.1P1.0始終不變 步進(jìn)電機(jī)轉(zhuǎn)回最初位置并鎖定位置步進(jìn)電機(jī)控制程序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電機(jī)正轉(zhuǎn)(逆時針)收取硬幣電機(jī)逆轉(zhuǎn)(順時針)退幣NOYESYES發(fā)現(xiàn)抽飲料按鈕信號否?即P1.3=1?等待2分鐘,并不斷檢查抽飲料按鈕信號NO YES;*步進(jìn)電機(jī)的驅(qū)動; DESIGN BY BENLADN911 FOSC = 12MHz 2010.05.10; -; 步進(jìn)電機(jī)的驅(qū)動信號必須為脈沖信號! 轉(zhuǎn)動的速度和脈沖的頻率成正比!; 本步進(jìn)電機(jī)步進(jì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 ;為控制做準(zhǔn)備ANL P1,#03H ;為檢查控制條件做準(zhǔn)備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 的判斷,當(dāng) 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 ;步進(jìn)電機(jī)的轉(zhuǎn)速M(fèi)3: 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(飲料抽取量控制程序):準(zhǔn)備開始發(fā)現(xiàn)出飲料信號否,即P1.6=1?發(fā)現(xiàn)假幣否?沒發(fā)現(xiàn)抽飲料信號?即P1.7=0?檢測硬幣投入量的多少,即檢查P1.4P1.3=?按硬幣投入量控制電機(jī)開啟時間,并根據(jù)飲料桶中信號的反饋隨時等待使電機(jī)停轉(zhuǎn)!開啟電機(jī),即使P1.5=1維持電機(jī)停轉(zhuǎn)維持電機(jī)停轉(zhuǎn)使電機(jī)停轉(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?開啟電機(jī),即使得P1.5=1并維持狀態(tài)使電機(jī)停轉(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;/初始化,確保電機(jī)在停轉(zhuǎn)狀態(tài)while (L7=0 ) /如果L7=0維持電機(jī)停轉(zhuǎn)狀態(tài)L5=1; while (L6=0 ) while (L7=1 ) while (L0=0) /檢查容器中液位到了50ml否 if(L4=0&L3=1) L5=0; /開啟電機(jī)并延時1.0s Delay1s();L5=1; while (L1=0 ) /檢查容器中液位到了100ml否 if (L4=1&L3=0 ) L5=0;/開啟電機(jī)并延時2.0sDelay1s(); Delay1s();L5=1; while (L2=0 ) /檢查容器中液位到了150ml否 if (L4=1&L3=1 ) L5=0; /開啟電機(jī)并延時3.0sDelay1s(); Delay1s(); Delay1s(); L5=1; L5=1; /如果檢查到假幣信號或者沒有按下抽飲料按鈕的信號就保持電機(jī)停轉(zhuǎn)狀態(tài)L5=1; /如果檢查到出飲料按鈕信號就馬上停止電機(jī)4. 單片機(jī)組優(yōu)化后的電路、控制流程圖及其程序設(shè)計(jì)思路分析:硬幣檢測裝置在檢測到假幣的時候發(fā)出“1”信號,檢測到0.5元硬幣的時候發(fā)出“1”信號并傳送到P1.3端口,檢測到1.0元或兩枚0.5元硬幣的時候發(fā)出“1”信號并傳送到P1.4端口。如上面電路所示,硬幣真假識別信號經(jīng)非門負(fù)變之后與抽飲料按鈕信號相與,如果硬幣識別裝置沒檢測到假幣,而消費(fèi)者并不按下抽飲料按鈕,收取硬幣的電機(jī)和抽飲料的電機(jī)并不動作,而是保持原狀態(tài)并等待2分鐘,若沒等到抽飲料按鈕信號則自動退幣,否則兩電機(jī)都動作實(shí)現(xiàn)收取硬幣和抽飲料的目的。在電路中我們還看到硬幣真假識別信號與退幣按鈕信號相或,只要消費(fèi)者按下退幣按鈕或者硬幣檢測裝置檢測到假幣就馬上退幣。上面電路中我們另一個至關(guān)重要的是出飲料按鈕電路。我們該怎么讓出飲料按鈕信號對單片機(jī)起控制作用呢?投機(jī)取巧的消費(fèi)者可能會因?yàn)榕既粰C(jī)會發(fā)現(xiàn)邊抽飲料邊出飲料會得到多一點(diǎn)。為了防止這種投機(jī)取巧的行為,我們可以將出飲料按鈕信號電路經(jīng)非門負(fù)變之后與抽飲料按鈕信號和硬幣真假信號相與再連接到P1.0端口或者直接把出飲料按鈕信號連接到P1.2口,我們選擇的是后者,如此一來一旦消費(fèi)者按下出飲料按鈕信號售貨機(jī)便停止抽飲料。上面電路中我們沒有畫出螺線管的連接電路,我們將其驅(qū)動電路連接在P0.0口。具體的程序及其流程圖如下面所示。準(zhǔn)備開始發(fā)現(xiàn)假幣否初始化各電機(jī),使各電機(jī)都保持停轉(zhuǎn)狀態(tài)檢測硬幣的總投入量發(fā)現(xiàn)退幣信號否發(fā)現(xiàn)抽飲料信號否開啟收硬幣電機(jī)收取硬幣和抽飲料電機(jī)抽取飲料NONO, 等待2分鐘 YES開啟電機(jī)退幣YESYESNO檢查出飲料信號,按下了否?開啟收硬幣電機(jī)收取硬幣和抽飲料電機(jī)抽取飲料繼續(xù)抽飲料,直到結(jié)束并停止電機(jī)中斷抽飲料電機(jī)等待下次交易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?開啟電機(jī),即使得P3.7=1并維持狀態(tài)使電機(jī)停轉(zhuǎn)并維持,即使得P3.7=0維持等待下次交易YESYESYESNONONOORG 0000H LJMP MAINORG 0100HMAIN: ANL P3,#23H ;初始化電機(jī)狀態(tài),使兩電機(jī)保持停轉(zhuǎn)和鎖定狀態(tài)ANL P1,#FFH ;為檢測外部輸入的控制信號做準(zhǔn)備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)紙杯;-硬幣去留電機(jī)正轉(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 的判斷,當(dāng) A = 0 時則轉(zhuǎn)到 STARTMOV P3,ALCALL DELAYINC R0DJNZ R3,START1MOV P3,#00HLCALL DELAY1SJMP AP1;-硬幣去留電機(jī)反轉(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 ;-紙杯電機(jī)正轉(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 的判斷,當(dāng) 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,其他位不變;-紙杯電機(jī)反轉(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 ;返回到原始位置鎖定電機(jī) LCALL DELAY1 SJMP LOOP8 ;紙杯銷售完后馬上抽200ml飲料;-紙杯電機(jī)反轉(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,其他位不變進(jìn)行挖紙杯動作LCALL DELAY3ANL P0,7FH ;使P0.0=0,其他位不變;-紙杯電機(jī)正轉(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 的判斷,當(dāng) 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 ;檢查容器中液位達(dá)到100ml否LCALL DELAY3 ;延時0.5S SJMP FW ;抽完飲料就等待下次交易 LOOP9: ORL P3,80H ;抽300ml飲料 JB ACC.2,TZ JB ACC.4,MAIN ;檢查飲料桶中液位達(dá)到300ml否 LCALL DELAY3 ;延時1.5S LCALL DELAY3 LCALL DELAY3 SJMP FW ;抽完飲料就等待下次交易 LOOP10: ORL P3,80H ;抽200ml飲料 JB ACC.2,TZ JB ACC.5,MAIN ;檢查飲料桶中液位達(dá)到200ml否 LCALL DELAY3 ;延時1s LCALL DELAY3 SJMP FW ;抽完飲料就等待下次交易TZ: ANL P3,7FH ;檢測到出飲料按鈕信號則使電機(jī)停轉(zhuǎn)FW: ANL P3,#23H ;使兩步進(jìn)電機(jī)在原始位置維持鎖定狀態(tài) ANL P1,00H ;使控制信號口都置零,等待下次交易 SJMP MAIN ;循環(huán)檢查;-一些延時子程序-DELAY: MOV R7,#40 ;步進(jìn)電機(jī)的轉(zhuǎn)速M(fèi)3: 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 ;硬幣控制電機(jī)正轉(zhuǎn)表DB 00 ;正轉(zhuǎn)結(jié)束DB 03H,09H,0CH,06H ;硬幣控制電機(jī)反轉(zhuǎn)表DB 00 ;反轉(zhuǎn)結(jié)束 TABLE2: DB 20H,30H,10H,50H,40H,60H ;紙杯電機(jī)正轉(zhuǎn)表 DB 00 ;正轉(zhuǎn)結(jié)束 DB 20H,60H,40H,50H,10H,30H ;紙杯電機(jī)反轉(zhuǎn)表 DB 00 ;反轉(zhuǎn)結(jié)束 END27
收藏