自動售貨機仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (25.51 KB, 下載次數: 89)
下載附件
2019-11-23 17:34 上傳
單片機源程序如下:
- #include<reg52.h>
- sbit key1=P1^0;
- sbit key2=P1^1;
- sbit key3=P1^2;
- sbit key4=P1^3;
- sbit key5=P1^4;
- sbit key6=P1^5;
- sbit key7=P1^6;
- sbit key8=P1^7;
- sbit led1=P3^0;
- sbit led2=P3^1;
- sbit led3=P3^2;
- int step=1;
- int price=0;
- int num=1;
- int table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; //數碼管顯示0-9
- unsigned char dispbuf[8]={0,0,0,0,0,0,0,};
- int table2[]={0xe0,0xc0,0xa0,0x80,0x20};//控制退幣
- int total_money=0;//所選商品總價格
- int back_money=0; //應退金額
- int in_money=0;
- /*
- 延時功能
- */
- void delay(int z)
- {
- int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- //?調用時重新初始化??復位函數
- void reset()
- {
- step=1;
- price=0;
- num=1;
- total_money=0;
- back_money=0;
- in_money=0;
- }
- /*
- 選擇商品函數?每個按鍵對應不同的物品價格及數量
- */
- void choose()
- {
- if(key1==0)
- {
- delay(80);
- if(key1==0)
- {
- num=1;
- price=4;
- }
- }
- else if(key2==0)
- {
- delay(80);
- if(key2==0)
- {
- price=6;
- num=1;
- }
- }
- else if(key3==0)
- {
- delay(80);
- if( key3==0)
- {
- price=10;
- num=1;
- }
- }
- }
- /*
- 確定及取消
- 確定則執行?step加一?取消則執行step減一
- */
- void apply()
- {
- if(key7==0)
- {
- delay(80);
- if(key7==0)
- {
- step++;
- }
- }
- else if(key8==0)
- {
- delay(80);
- if(key8==0)
- {
- step--;
- }
- }
- }
- /*
- 計算所選商品所需金額
- */
- void totalmoney()
- {
- total_money=price*num;
- }
- /*
- //累加投入幣值
- */
- void inmoney()
- {
- if(key4==0)
- {
- delay(80);
- if(key4==0)
- in_money+=1;
- }
- else if(key5==0)
- {
- delay(80);
- if(key5==0)
- in_money+=5;
- }
- else if(key6==0)
- {
- delay(80);
- if(key6==0)
- in_money+=10;
- }
- }
- /*
- 計算所需退還幣值
- */
- void backmoney()
- {
- back_money=in_money -total_money;
- }
- /*
- 顯示函數?每一步顯示不同的內容
- */
- void display ()
- {
- if(step==1)
- {
- P2=0x04;
- totalmoney();
- P0 =table1[total_money%10];
- delay(80);
- P2 = 0x08;
- P0 = table1[total_money/10];
- delay(80);
- }
- else if(step==2)
- {
- P2=0x04;
- inmoney();
- P0=table1[in_money%10];
- delay(80);
- P2=0x08;
- P0=table1[in_money/10];
- delay(80);
- }
- else if(step==3)
- {
- P2=0xf0;
- backmoney();
- if(back_money<0)
- {
- step--;
- P0=table1[in_money];
- }
- if(back_money>=0)
- {
- P2=0x04;
- backmoney();
- P0=table1[back_money%10];
- delay(80);
- P2=0x08;
- P0=table1[back_money/10];
- delay(80);
- reset();
- }
- else
- P0=table1[1];
- }
- }
- /*
- //主函數
- */
- void main()
- {
- while(1)
- {
- choose();
- apply();
- display();
- }
- /*?if(back_money>=10)
- {int?s=back_money/10;
- for(s;s>0;s--?)
- {led2=0;
- delay(1000);
- led2=1;
- back_money-=10;
- }
- }
- if(back_money<10&&back_money>0?)
- {
- led3=0;
- delay(1000);
- led3=1;
- }
- delay(1000);
- {
- led1=0;
- delay(1000);
- led1=1;
- delay(1000);
- led1=0;
- delay(1000);
- led1=1;
- delay(1000);
- led1=0;
- delay(1000);
- led1=1;
- delay(1000);
- }*/
- }
復制代碼
所有資料51hei提供下載:
自動售貨機.rar
(22.78 KB, 下載次數: 126)
2019-11-23 09:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
自動售貨機控制系統設計.doc
(511.95 KB, 下載次數: 94)
2019-11-23 09:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|