基于51单片机的HX711传感器电子秤设计方案

使用LCD1602显示相关信息,HX711传感器测试物体重量,

通过按键输入对应数值、有删除键、去皮、价格清零、超重警报等功能

部分程序:

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535

#define ulong unsigned long

#include

uchar code table_num[]=”0123456789abcdefg”;

sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit e =P1^2; //片选信号 下降沿触发

sbit hx711_dout=P2^1;

sbit hx711_sck=P2^0;

sbit beep = P1^3; //蜂鸣器

long weight;

uint temp,qi_weight;

bit chaozhong_flag;

bit leiji_flag;

bit flag_300ms ;

ulong price,z_price; //单价 总价

uchar flag_p;

/***************

删除键

去皮

价格清零

***************/

/ 1ms延时函数12M晶振 ***********/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/********************************************************************

名称 : delay_uint()功能 : 小延时。输入 : 无输出 : 无***********************************************************************/

void delay_uint(uint q)

{

while(q–);

}

/********************************************************************

名称 : write_com(uchar com)功能 : 1602命令函数输入 : 输入的命令值输出 : 无***********************************************************************/

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/********************************************************************

名称 : write_data(uchar dat)功能 : 1602写数据函数输入 : 需要写入1602的数据输出 : 无***********************************************************************/

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/ lcd1602上显示这字符函数 */

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == ‘�’) break;

write_data(*p);

p++;

}

}

/ lcd1602初始化设置 */

void init_1602() //lcd1602初始化设置

{

write_com(0x38); //

write_com(0x0c);

write_com(0x06);

delay_uint(1000);

}

////////////////在指定位置显示指定字符//////////

void write_zifu(uchar hang,uchar add,uchar dat)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(dat);

}