文章目录
- 一、主要功能
- 二、硬件资源
-
- 1.硬件准备
- 2.硬件连接
- 三、软件设计
-
- 1.软件结构
- 2.主要代码
- 四、实验现象
- 联系作者
一、主要功能
启动前如需去毛皮,将货架提前放在称重模块上,系统运行后,LCD初始界面可通过12864显示S1/S2键修改单价,支持连按操作。将所需称重物品放在传感器上,显示单价和重量S3键时计算物品总价,蜂鸣器发出提示声,支持连续定价和价格修改;按下S4键时,总价清零。
二、硬件资源
1.硬件准备
项目所需的硬件资源如下: 1.51单片机开发板1 2、HX711称重模块1个 3、LCD12864液晶模块1个 4、USB线1(供电和程序下载) 几条杜邦线
2.硬件连接
按键模块-->单片机IO 矩阵
键盘(S1-S16)-->P1 蜂鸣器模块-->单片机IO BEEP-->P25 LCD12864液晶-->单片机IO RS->P26 RW->P25 E->P27 DB0-DB7-->P00-P07 PSB->P32 HX711称重模块(5KG)-->单片机IO DOUT-->P21 SCK-->P20 红色导线-->5V 黑色导线-->GND 白色导线-->A-/B- 绿色导线-->A /B
三、软件设计
1.软件结构
2.主要代码
///单价调整,商品计价 void unit_price_adjust(void) {
u8 key=0; while(1) {
sys_str.mode=key_matrix_flip_scan(); if(sys_str.mode==1)//加 {
sys_str.unitprice =UNIT_PRICE_PER_VALUE; if(sys_str.unitprice>=1000)sys_str.unitprice=0; } else if(sys_str.mode==2)//减 {
sys_str.unitprice-=UNIT_PRICE_PER_VALUE; if(sys_str.unitprice<1)sys_str.unitprice=999; } else if(sys_str.mode==3)//计价 {
sys_str.cnt++;
//计算商品价格,保留小数点后1位
sys_str.price+=(((float)sys_str.unitprice/10)*(float)hx_str.suttle/1000)*10;
beep_alarm(100,20);
}
else if(sys_str.mode==4)//清零
{
sys_str.price=0;
sys_str.cnt=0;
}
break;
}
}
//单价调整,商品重量,商品价格数据显示
void unit_price_show(void)
{
u8 buf[6];
u8 res=0;
while(1)
{
//单价调整数据显示
buf[0]=sys_str.unitprice/100+0x30;
if(buf[0]==0x30)buf[0]=' ';
buf[1]=sys_str.unitprice%100/10+0x30;
buf[2]='.';
buf[3]=sys_str.unitprice%100%10+0x30;
buf[4]='\0';
lcd12864_show_string(3,1,buf);
//获取净重
res=get_suttle();
if(res==0)
{
//商品重量显示
buf[0]=hx_str.suttle/1000+0x30;
if(buf[0]==0x30)buf[0]=' ';
buf[1]=hx_str.suttle%1000/100+0x30;
if(buf[0]==' '&&buf[1]==0x30)
{
buf[0]=' ';
buf[1]=' ';
}
buf[2]=hx_str.suttle%1000%100/10+0x30;
if(buf[0]==' '&&buf[1]==' '&&buf[2]==0x30)
{
buf[0]=' ';
buf[1]=' ';
buf[2]=' ';
}
buf[3]=hx_str.suttle%1000%100%10+0x30;
buf[4]='g';
buf[5]='\0';
lcd12864_show_string(3,2,buf);
}
//商品计价显示
buf[0]=sys_str.price/1000+0x30;
if(buf[0]==0x30)buf[0]=' ';
buf[1]=sys_str.price%1000/100+0x30;
if(buf[0]==' '&&buf[1]==0x30)
{
buf[0]=' ';
buf[1]=' ';
}
buf[2]=sys_str.price%1000%100/10+0x30;
buf[3]='.';
buf[4]=sys_str.price%1000%100%10+0x30;
buf[5]='\0';
lcd12864_show_string(3,3,buf);
break;
}
}
//应用控制系统
void app_control_sys(void)
{
time0_init();//初始化定时器0
time0_start();//开启定时器0
lcd12864_init();//LCD12864初始化
sys_parm_init();//系统参数初始化
open_show();//开机界面显示
while(1)
{
unit_price_adjust();//单价调整,计价
unit_price_show();//单价调整,商品重量,商品价格数据显示
}
}
四、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
作者B站链接:https://space.bilibili.com/444388619 可提供手把手教学服务,资料获取请联系作者QQ:3443792007 专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。