最近设计了一个项目基于单片机的RFID餐饮自助结算控制系统,与大家分享一下:
一、基本介绍
项目名:基于单片机的RFID餐饮自助结算控制系统设计
项目编号:mcuclub-dz-004
单片机类型:STC89C52
具体功能:
1、通过三个纽扣标签识别不同菜品和单价(青椒土豆丝 12元/千克 | 木须肉 20元/kg | 鱼香肉丝 22元/kg)
2、通过称重模块测量重量(*.*kg),按下“A”键确认称重完成,则显示该菜品价格(**.*元)
3、通过“B”键按下,显示总价(**.*元),并通过语音播报总价
4、通过LCD12864显示数据
二、51实物图
单片机型号:STC89C52
板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。
供电接口:TYPE-C
三、51仿真图
仿真软件版本:proteus8.9
电路连线方式:网络标号连线方式
注意:部分实物元器件仿真中没有,仿真中会用其他工作原理相似的元件代替,这样可能导致实物程序和仿真程序不一样
四、PCB图
由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,
隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
五、系统框图
本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成RFID刷卡的整个系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STC89C52单片机,其主要作用是获取输入部分数据,经过内部处理,控制输出部分。输入由四部分组成,第一部分是RFID刷卡模块,通过该模块检测当前用户需要购买的商品;第二部分是称重模块,通过该模块可以检测当前顾客购买该商品的重量;第三部分是独立按键,通过独立按键完成称重和语音播报;第四部分是供电电路,给整个系统进行供电。输出由两部分组成,第一部分是LCD12864显示模块,通过该模块可以显示当前总重量、当前购买的物品、总价格等;第二部分是语音播报当前购买的总价格。
六、软件设计流程
七、部分程序展示
软件版本:keil5
逻辑程序和驱动程序分开,分布于main.c和其他.c文件
/****
*******显示函数
*****/
void Display_function(void)
{
if(flag_display == 0)
{
flag_xss = 0;
switch(flag_menu) //显示菜品名
{
case 0:
LCD12864_Display_Hanzi(1,3," 欢迎光临");
break;
case 1:
LCD12864_Display_Hanzi(1,3,"青椒土豆丝");
break;
case 2:
LCD12864_Display_Hanzi(1,3," 木须肉 ");
break;
case 3:
LCD12864_Display_Hanzi(1,3," 鱼香肉丝");
break;
default:
break;
}
memset(display_buf,' ',16);
sprintf(display_buf,"单价:%d元/千克",(int)flag_price); //显示单价
LCD12864_Display_Hanzi(2,1,display_buf);
memset(display_buf,' ',16);
sprintf(display_buf,"重量:%ld.%ldkg ",weight_value/1000,(weight_value%1000)/100); //显示重量
LCD12864_Display_Hanzi(3,1,display_buf);
memset(display_buf,' ',16);
sprintf(display_buf,"价格:%02d.%d元 ",price/10,price%10); //显示单次价格
LCD12864_Display_Hanzi(4,1,display_buf);
}
else
{
if(flag_xss == 0)
{
flag_xss = 1;
if(price_qjtds > 0)
{
flag_xs++;
memset(display_buf,' ',16);
sprintf(display_buf,"土豆丝:%02d.%d元 ",price_qjtds/10,price_qjtds%10); //显示青椒土豆丝价格
LCD12864_Display_Hanzi(flag_xs,1,display_buf);
}
if(price_mxr > 0)
{
flag_xs++;
memset(display_buf,' ',16);
sprintf(display_buf,"木须肉:%02d.%d元 ",price_mxr/10,price_mxr%10); //显示木须肉价格
LCD12864_Display_Hanzi(flag_xs,1,display_buf);
}
if(price_yxrs > 0)
{
flag_xs++;
memset(display_buf,' ',16);
sprintf(display_buf,"鱼香肉丝:%02d.%d元 ",price_yxrs/10,price_yxrs%10); //显示鱼香肉丝价格
LCD12864_Display_Hanzi(flag_xs,1,display_buf);
}
}
flag_xs = 0;
memset(display_buf,' ',16);
sprintf(display_buf,"总价:%02d.%d元 ",total_price/10,total_price%10); //显示总价
LCD12864_Display_Hanzi(4,1,display_buf);
}
}
/****
*******处理函数
*****/
void Manage_function(void)
{
if(flag_5s) //5s后回到点餐界面
{
flag_price = 0;
flag_5s = 0;
flag_timer_begin = 0;
flag_menu = 0;
flag_display = 0;
total_price = 0;
price_qjtds = 0;
price_mxr = 0;
price_yxrs = 0;
flag_display = 0;
LCD12864_Clean_All();
}
if(weight_value <= 50)
{
price_value = 0;
price = 0;
}
else
{
price_value = flag_price*(weight_value/100); //单次价格,角
}
}
http://资料点击该链接到官网下载:www.mcubee.comhttp://资料点击该链接到官网下载:www.mcubee.com