標題:
單片機rc522的自動售貨機程序電路—RFID刷卡版
[打印本頁]
作者:
l'y's
時間:
2020-2-21 12:40
標題:
單片機rc522的自動售貨機程序電路—RFID刷卡版
實物可用 有完整的程序和原理圖
51hei.png
(68.35 KB, 下載次數(shù): 26)
下載附件
2020-2-21 15:46 上傳
51hei.png
(28 KB, 下載次數(shù): 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 )//尋天線區(qū)內未進入休眠狀態(tài)的卡,返回卡片類型 2字節(jié)
{
if( PcdRequest( PICC_REQIDL, &CardRevBuf[0] ) != MI_OK )//尋天線區(qū)內未進入休眠狀態(tài)的卡,返回卡片類型 2字節(jié)
{
//display_no_id();
CardRevBuf[2]=0;
return;
}
}
if( PcdAnticoll( &CardRevBuf[2] ) != MI_OK ) //防沖撞,返回卡的序列號 4字節(jié)
{
//display_no_id();
CardRevBuf[2]=0;
return;
}
if( PcdSelect( &CardRevBuf[2] ) != MI_OK )//選卡 卡片序列號,4字節(jié)
{
//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)//數(shù)碼管顯示部分延時函數(shù)
{
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鍵盤獲得按鍵參數(shù)
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鍵盤獲得按鍵參數(shù)
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鍵盤獲得按鍵參數(shù)
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鍵盤獲得按鍵參數(shù)
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鍵盤獲得按鍵參數(shù)
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鍵盤獲得按鍵參數(shù)
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, 下載次數(shù): 90)
2020-2-21 15:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
1111111ppp
時間:
2021-4-21 13:44
方式都是刷卡嗎?
作者:
127095053
時間:
2021-4-27 11:23
設計的很好,很詳細,感覺學到了很多
作者:
szzzb
時間:
2021-5-8 19:37
請問又protues仿真嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1