實物可用 有完整的程序和原理圖
51hei.png (68.35 KB, 下載次數: 26)
下載附件
2020-2-21 15:46 上傳
51hei.png (28 KB, 下載次數: 19)
下載附件
2020-2-21 15:46 上傳
單片機源程序如下:
- #include "include.h"
- #include "key.h"
- #include "stc89c5x_eeprom.h"
- #include "lcd12864.h"
- #include "typedef.h"
- INT8U CardRevBuf[16] = { 0 };
- void init_all(void)
- {
- EA = 0;
- init_rc522();
-
- EA = 1;
- }
- void ctrl( void )
- {
- if( PcdRequest( PICC_REQIDL, &CardRevBuf[0] ) != MI_OK )//尋天線區內未進入休眠狀態的卡,返回卡片類型 2字節
- {
- if( PcdRequest( PICC_REQIDL, &CardRevBuf[0] ) != MI_OK )//尋天線區內未進入休眠狀態的卡,返回卡片類型 2字節
- {
- //display_no_id();
- CardRevBuf[2]=0;
- return;
- }
- }
- if( PcdAnticoll( &CardRevBuf[2] ) != MI_OK ) //防沖撞,返回卡的序列號 4字節
- {
- //display_no_id();
- CardRevBuf[2]=0;
- return;
- }
- if( PcdSelect( &CardRevBuf[2] ) != MI_OK )//選卡 卡片序列號,4字節
- {
- //display_no_id();
- CardRevBuf[2]=0;
- return;
- }
- }
- /**************************** 延時子程序 ************************/
- void Delay11(void)
- {
- uchar i,j,k;
- for(i=500;i>0;i--)
- for(j=50;j>0;j--)
- for(k=5;k>0;k--)
- ;
- }
- uint8_t flag8=255;
- uint8_t i=0;
- void ICcard()
- { uint8_t i=0;
- ctrl();
- if(CardRevBuf[2]!=0X00)
- {
- if(CardRevBuf[2]==0X53)
- { Beep_key();Beep_key();
- flag8=1;
- }
- else flag8=0;
- }
- }
- unsigned char code F_Rotation[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//正轉表格
- unsigned char code B_Rotation[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//反轉表格
- void delay11(uint a)//數碼管顯示部分延時函數
- {
- while(--a);
- }
- void zhengzhuan()
- {
- uchar k,i;
- for(k=0;k<8;k++)
- for(i=0;i<8;i++)
- {
- P1=B_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
- delay11(300);
- }
-
- }
- void fanzhuan()
- {
- unsigned char i,j;
- for (j=0;j<8;j++) //電機旋轉一周不是外面的 是里面的一周
- for(i=0;i<8;i++)
- {
- P1=F_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
- delay11(300);
- }
- }
- void UP()
- { uchar i=0;
- for(i=0;i<20;i++)
- zhengzhuan();
- }
- void DOWN()
- { uchar i=0;
- for(i=0;i<20;i++)
- fanzhuan();
- }
- int16_t num_1=99;
- int16_t num_2=99;
- int16_t num_3=99;
- int16_t num_4=99;
- int16_t num_5=99;
- int16_t JE=1000;
- uchar flag_biaozhi=0;
- int jiage_1=0;
- int jiage_2=0;
- void main(void)
- { init_all();
- num=255;
- beep=1;
- v_Lcd12864Init_f( );
- while(1)
- {
- v_Lcd12864PutString_f(2,0,"歡迎使用");
- v_Lcd12864PutString_f(0,1,"全自助售貨機,請");
- v_Lcd12864PutString_f(0,2,"按鍵選擇需要購買");
- v_Lcd12864PutString_f(0,3,"的物品!");
- num=keyscan();//反復掃描4*4鍵盤獲得按鍵參數
- if(num==1) //商品1
- {
- num=255; flag_biaozhi=1;
- v_Lcd12864Init_f( );
- jiage_1=3;
- jiage_2=0;
- flag8=0;
- while(1)
- { ICcard();
- v_Lcd12864PutString_f(0,0,"商品:可樂");
- v_Lcd12864PutString_f(0,1,"價格:03元 ");
- v_Lcd12864PutString_f(0,2,"付款:");v_Lcd12864PutString_f(4,2,"元");
- v_Lcd12864PutString_f(0,3,"請刷卡或投幣付款");
-
- num=keyscan();//反復掃描4*4鍵盤獲得按鍵參數
- if(num==8)
- {
- num=255;flag_biaozhi=0;
- v_Lcd12864Init_f( );
- break;
- }
- if(num==6)
- {
- num=255;
- jiage_2++;
- }
- if(num==7)
- {
- num=255;
- jiage_2--;
- if(jiage_2<=0) jiage_2=0;
- }
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_1%100/10+0x30);v_Lcd12864SendData_f(num_1%10+0x30);
- v_Lcd12864SetAddress_f(3,2);
- v_Lcd12864SendData_f(jiage_2%100/10+0x30);v_Lcd12864SendData_f(jiage_2%10+0x30);
- //投幣完成,電機轉動出貨,退出購物界面
- if(jiage_2>=jiage_1||flag8==1)
- {
- num=255;flag_biaozhi=0;
- if(flag8==1)
- {
- v_Lcd12864PutString_f(0,3,"余額: 元 ");
- JE=JE-jiage_1;
- if(JE<=0)
- {
- JE=1000; Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();
- v_Lcd12864PutString_f(0,3,"余額不足!!!!");
- }
- else
- {
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- num_1--;if(num_1<=0) num_1=0;
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_1%100/10+0x30);v_Lcd12864SendData_f(num_1%10+0x30);
- Beep_key();Beep_key();Beep_key();
- UP();
- P1=0XFF;
- DOWN();
- P1=0XFF;
- v_Lcd12864Init_f( ); flag8=0;
- break;
- }
- }
- }
- if(num==2) //商品2
- {
- num=255; flag_biaozhi=1;
- v_Lcd12864Init_f( );
- jiage_1=4;
- jiage_2=0;
- while(1)
- { ICcard();
- v_Lcd12864PutString_f(0,0,"商品:雪碧 ");
- v_Lcd12864PutString_f(0,1,"金額:04元 ");
- v_Lcd12864PutString_f(0,2,"付款:");v_Lcd12864PutString_f(4,2,"元");
- v_Lcd12864PutString_f(0,3,"請刷卡或投幣付款");
-
- num=keyscan();//反復掃描4*4鍵盤獲得按鍵參數
- if(num==8)
- {
- num=255;flag_biaozhi=0;
- v_Lcd12864Init_f( );
- break;
- }
- if(num==6)
- {
- num=255;
- jiage_2++;
- }
- if(num==7)
- {
- num=255;
- jiage_2--;
- if(jiage_2<=0) jiage_2=0;
- }
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_2%100/10+0x30);v_Lcd12864SendData_f(num_2%10+0x30);
- v_Lcd12864SetAddress_f(3,2);
- v_Lcd12864SendData_f(jiage_2%100/10+0x30);v_Lcd12864SendData_f(jiage_2%10+0x30);
- //投幣完成,電機轉動出貨,退出購物界面
- if(jiage_2>=jiage_1||flag8==1)
- {
- num=255;flag_biaozhi=0;
- if(flag8==1)
- {
- v_Lcd12864PutString_f(0,3,"余額: 元 ");
- JE=JE-jiage_1;
- if(JE<=0)
- {
- JE=1000; Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();
- v_Lcd12864PutString_f(0,3,"余額不足!!!!");
- }
- else
- {
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- num_2--;if(num_2<=0) num_2=0;
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_2%100/10+0x30);v_Lcd12864SendData_f(num_2%10+0x30);
- Beep_key();Beep_key();Beep_key();
- UP();
- P1=0XFF;
- DOWN();
- P1=0XFF;
- v_Lcd12864Init_f( ); flag8=0;
- break;
- }
- }
- }
- if(num==3) //商品3
- {
- num=255; flag_biaozhi=1;
- v_Lcd12864Init_f( );
- jiage_1=4;
- jiage_2=0;
- while(1)
- { ICcard();
- v_Lcd12864PutString_f(0,0,"商品:脈動 ");
- v_Lcd12864PutString_f(0,1,"金額:04元 ");
- v_Lcd12864PutString_f(0,2,"付款:");v_Lcd12864PutString_f(4,2,"元");
- v_Lcd12864PutString_f(0,3,"請刷卡或投幣付款");
-
- num=keyscan();//反復掃描4*4鍵盤獲得按鍵參數
- if(num==8)
- {
- num=255;flag_biaozhi=0;
- v_Lcd12864Init_f( );
- break;
- }
- if(num==6)
- {
- num=255;
- jiage_2++;
- }
- if(num==7)
- {
- num=255;
- jiage_2--;
- if(jiage_2<=0) jiage_2=0;
- }
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_3%100/10+0x30);v_Lcd12864SendData_f(num_3%10+0x30);
- v_Lcd12864SetAddress_f(3,2);
- v_Lcd12864SendData_f(jiage_2%100/10+0x30);v_Lcd12864SendData_f(jiage_2%10+0x30);
- //投幣完成,電機轉動出貨,退出購物界面
- if(jiage_2>=jiage_1||flag8==1)
- {
- num=255;flag_biaozhi=0;
- if(flag8==1)
- {
- JE=JE-jiage_1;
- if(JE<=0)
- {
- JE=1000; Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();
- v_Lcd12864PutString_f(0,3,"余額不足!!!!");
- }
- else
- {
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- if(flag8==1)
- { v_Lcd12864PutString_f(0,3,"余額: 元 ");
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- }
- num_3--;if(num_3<=0) num_3=0;
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_3%100/10+0x30);v_Lcd12864SendData_f(num_3%10+0x30);
- Beep_key();Beep_key();Beep_key();
- UP();
- P1=0XFF;
- DOWN();
- P1=0XFF;
- v_Lcd12864Init_f( );
- flag8=0;
- break;
- }
- }
- }
- if(num==4) //商品4
- {
- num=255; flag_biaozhi=1;
- v_Lcd12864Init_f( );
- jiage_1=5;
- jiage_2=0;
- while(1)
- { ICcard();
- v_Lcd12864PutString_f(0,0,"商品:橙汁 ");
- v_Lcd12864PutString_f(0,1,"金額:05元 ");
- v_Lcd12864PutString_f(0,2,"付款:");v_Lcd12864PutString_f(4,2,"元");
- v_Lcd12864PutString_f(0,3,"請刷卡或投幣付款");
-
- num=keyscan();//反復掃描4*4鍵盤獲得按鍵參數
- if(num==8)
- {
- num=255;flag_biaozhi=0;
- v_Lcd12864Init_f( );
- break;
- }
- if(num==6)
- {
- num=255;
- jiage_2++;
- }
- if(num==7)
- {
- num=255;
- jiage_2--;
- if(jiage_2<=0) jiage_2=0;
- }
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_4%100/10+0x30);v_Lcd12864SendData_f(num_4%10+0x30);
- v_Lcd12864SetAddress_f(3,2);
- v_Lcd12864SendData_f(jiage_2%100/10+0x30);v_Lcd12864SendData_f(jiage_2%10+0x30);
- //投幣完成,電機轉動出貨,退出購物界面
- if(jiage_2>=jiage_1||flag8==1)
- {
- num=255;flag_biaozhi=0;
- if(flag8==1)
- {
- JE=JE-jiage_1;
- if(JE<=0)
- {
- JE=1000; Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();
- v_Lcd12864PutString_f(0,3,"余額不足!!!!");
- }
- else
- {
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- v_Lcd12864PutString_f(0,3,"余額: 元 ");
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- num_4--;if(num_4<=0) num_4=0;
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_4%100/10+0x30);v_Lcd12864SendData_f(num_4%10+0x30);
- Beep_key();Beep_key();Beep_key();
- UP();
- P1=0XFF;
- DOWN();
- P1=0XFF;
- v_Lcd12864Init_f( );
- flag8=0;
- break;
- }
- }
- }
- if(num==5) //商品5
- {
- num=255; flag_biaozhi=5;
- v_Lcd12864Init_f( );
- jiage_1=3;
- jiage_2=0;
- while(1)
- { ICcard();
- v_Lcd12864PutString_f(0,0,"商品:汽水 ");
- v_Lcd12864PutString_f(0,1,"金額:03元 ");
- v_Lcd12864PutString_f(0,2,"付款:");v_Lcd12864PutString_f(4,2,"元");
- v_Lcd12864PutString_f(0,3,"請刷卡或投幣付款");
-
- num=keyscan();//反復掃描4*4鍵盤獲得按鍵參數
- if(num==8)
- {
- num=255;flag_biaozhi=0;
- v_Lcd12864Init_f( );
- break;
- }
- if(num==6)
- {
- num=255;
- jiage_2++;
- }
- if(num==7)
- {
- num=255;
- jiage_2--;
- if(jiage_2<=0) jiage_2=0;
- }
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_5%100/10+0x30);v_Lcd12864SendData_f(num_5%10+0x30);
- v_Lcd12864SetAddress_f(3,2);
- v_Lcd12864SendData_f(jiage_2%100/10+0x30);v_Lcd12864SendData_f(jiage_2%10+0x30);
- //投幣完成,電機轉動出貨,退出購物界面
- if(jiage_2>=jiage_1||flag8==1)
- {
- num=255;flag_biaozhi=0;
- if(flag8==1)
- {
- v_Lcd12864PutString_f(0,3,"余額: 元 ");
- JE=JE-jiage_1;
- if(JE<=0)
- {
- JE=1000; Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();Beep_key();
- v_Lcd12864PutString_f(0,3,"余額不足!!!!");
- }
- else
- {
- v_Lcd12864SetAddress_f(3,3);
- v_Lcd12864SendData_f(JE%10000/1000+0x30);v_Lcd12864SendData_f(JE%1000/100+0x30);v_Lcd12864SendData_f(JE%100/10+0x30);v_Lcd12864SendData_f(JE%10+0x30);
- }
- }
- num_5--;if(num_5<=0) num_5=0;
- v_Lcd12864SetAddress_f(7,0);
- v_Lcd12864SendData_f(num_5%100/10+0x30);v_Lcd12864SendData_f(num_5%10+0x30);
- Beep_key();Beep_key();Beep_key();
- UP();
- P1=0XFF;
- DOWN();
- P1=0XFF;
- v_Lcd12864Init_f( );
- flag8=0;
- break;
- }
- }
- }
- }
- }
復制代碼 全部資料51hei下載地址:
自動售貨機.7z
(186.44 KB, 下載次數: 90)
2020-2-21 15:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|