标题:
单片机rc522的自动售货机程序电路—RFID刷卡版
[打印本页]
作者:
l'y's
时间:
2020-2-21 12:40
标题:
单片机rc522的自动售货机程序电路—RFID刷卡版
实物可用 有完整的程序和原理图
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
作者:
1111111ppp
时间:
2021-4-21 13:44
方式都是刷卡吗?
作者:
127095053
时间:
2021-4-27 11:23
设计的很好,很详细,感觉学到了很多
作者:
szzzb
时间:
2021-5-8 19:37
请问又protues仿真吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1