基于STM32的智能电子秤原理图PCB程序设计

硬件设计

链接:https://pan.baidu.com/s/1Yi7LHfzInUBkjVrzMqM_yQ
提取码:it0s

本次设计以STM32单片机为核心,利用压力传感器监测货物的压力并转换成电流输出给AD芯片,HX711转换模块将模拟量转换成数字量并输出给单片机,STM32单片机通过公式计算出具体的货物重量,采用按键矩阵对结果进行加减乘除,得出总价或者其他的结果。LCD1602液晶屏上显示检测到的货物重量、单价和总价。
设计思路
以STM32为中央处理器,通过压力传感器监测货物对其造成的压力,并以电流变化输出给HX711AD模块,hx711AD芯片将模拟量转换成数字量并发送给单片机,经单片机计算后,得到当前的重量。通过安检矩阵设置货物的单价,通过加减乘除操作,算的货物的总价。LCD1602液晶显示屏上显示检测到的货物重量,设置的商品单价以及最后算出的货物总价。

程序设计

在这里插入图片描述

#include "hx711.h"

unsigned long ReadCount(void)
{
   unsigned long Count;
   unsigned char i;
   ADSK=0;
   Count=0;
   while(ADDO);
   for (i=0;i<24;i++)
   {
      ADSK=1;
      Count=Count<<1;
      ADSK=0;
      if(ADDO) Count++;
   }
   ADSK=1;
   Count=Count^0x800000;
   ADSK=0;
   return(Count);
}#include "keyboard.h"

//按键扫描函数 :    
//功能;只扫描一个按键,按键为号小优先  
//返回键值:
//         7    8    9    10
//         4    5    6    11
//         1    2    3    12
//         14   0    15   13

unsigned char Getkeyboard(void)
{
    unsigned char number = 0;
    unsigned char i;
    
    //行输入低电平
    ROW1=ROW2=ROW3=ROW4=0;
    //如果列输出不全为高,则说明有键按下
    if ((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1))
    {
       //输入0111
       ROW1=0;
       ROW2=ROW3=ROW4=1;
       for (i=0;i<20;i++);
       if (COL1==0) return 1;      // 7
       else if (COL2==0) return 2;  //   8
       else if (COL3==0) return 3;   // 9
       else if (COL4==0) return 10;  //  10
       //输入1011
       ROW2=0;
       ROW1=ROW3=ROW4=1;
       for (i=0;i<20;i++);
       if (COL1==0) return 4;     //4
       else if (COL2==0) return 5; //  5
       else if (COL3==0) return 6;  // 6
       else if (COL4==0) return 11;  // 11
       //输入1101
       ROW3=0;
       ROW1=ROW2=ROW4=1;
       for (i=0;i<20;i++);
       if (COL1==0) return 7;  //1
       else if (COL2==0) return 8;    // 2
       else if (COL3==0) return 9;    //   3
       else if (COL4==0) return 12;   //   12
       //输入0111
       ROW4=0;
       ROW1=ROW2=ROW3=1;
       for (i=0;i<20;i++);
       if (COL1==0) return 14;
       else if (COL2==0) return 0;
       else if (COL3==0) return 15;
       else if (COL4==0) return 13;
       //没有检测到列低电平
       return 99;
    }
    return 99;
}#include "LCD1602.h"

//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void LCD1602_delay_ms(unsigned int n)
{
    unsigned int  i,j;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}

//****************************************************
//写指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
    LCD1602_RS = 0;
    LCD1602_delay_ms(1);
    LCD1602_EN = 1;
    LCD1602_PORT = com;
    LCD1602_delay_ms(1);
    LCD1602_EN = 0;
}

//****************************************************
//写数据
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
    LCD1602_RS = 1;
    LCD1602_delay_ms(1);    
    LCD1602_PORT = dat;
    LCD1602_EN = 1;
    LCD1602_delay_ms(1);
    LCD1602_EN = 0;
}

//****************************************************
//连续写字符
//****************************************************
void LCD1602_write_word(unsigned char *s)
{
    while(*s>0)
    {
        LCD1602_write_data(*s);
        s++;
    }
}

void Init_LCD1602()
{
    LCD1602_EN = 0;
    LCD1602_RW = 0;                     //设置为写状态
    LCD1602_write_com(0x38);            //显示模式设定
    LCD1602_write_com(0x0c);            //开关显示、光标有无设置、光标闪烁设置
    LCD1602_write_com(0x06);            //写一个字符后指针加一
    LCD1602_write_com(0x01);            //清屏指令
}

#include <reg52.h>
#include <intrins.h>
#include <string.h>
#include "LCD1602.h"
#include "hx711.h"
#include "keyboard.h"
#include "eeprom52.h"

#define uchar unsigned char
#define uint  unsigned int
//定义量程系数
#define RATIO    4000/1000     //1574/1000  //2114/1623

.

.

  • 9
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值