资讯详情

STC89C51单片机+HX711称重模块电子秤程序

#include "main.h"

#include "HX711.h"

#include "eeprom52.h"

#define uchar unsigned char

#define uint unsigned int

unsigned long HX711_Buffer = 0;

unsigned long Weight_Maopi = 0;

unsigned long Weight_Maopi_0 = 0;

long Weight_Shiwu = 0;

unsigned int qupi=0;

unsigned char p=0;

///键盘处理变量

unsigned char keycode;

unsigned char key_press_num=0;

uint GapValue,GapValue1;

bit flag_cz=0;

uchar code LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B}; ///数字管显示码表

//定义标识

volatile bit FlagTest = 0; ///定期测试标志,每0.5秒位置,测完清0

volatile bit FlagKeyPress = 0; //有键按下标志,处理后清除0

///校准参数

///由于不同传感器的特性曲线不太一致,每个传感器都需要在这里纠正这个参数,使测量值非常准确。

//当发现测试重量过大时,增加值。

//如果测试出来的重量太小,减少改变值。

///值可以是小数

//#define GapValue 349

sbit LED=P1^1;

sbit ROW1=P3^0;

sbit ROW2=P3^1;

sbit ROW3=P3^2;

sbit ROW4=P3^3;

sbit DIAN = P0^5; //小数点

volatile bit ClearWeighFlag = 0; ///传感器调零标志位,清除0漂

/******************将数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

SectorErase(0x2000);

GapValue1=GapValue&0x00ff;

byte_write(0x2000, GapValue1);

GapValue1=(GapValue&0xff00)>>8;

byte_write(0x2001, GapValue1);

byte_write(0x2060, a_a);

}

/******************单片机内部的数据eeprom中读出来*****************/

void read_eeprom()

{

GapValue = byte_read(0x2001);

GapValue = (GapValue<<8)|byte_read(0x2000);

a_a = byte_read(0x2060);

}

/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

read_eeprom(); //先读

if(a_a != 1) ////新单片机初始单片机eeprom

{

GapValue = 3500;

a_a = 1;

write_eeprom(); //保存数据

}

}

/*****显示启动初始化等待画面*****/

void Disp_init(void)

{

P0 = ~0x80; //显示----

P2 = 0xBF; //依次打开你

Delay_ms(1); //延时

P2 = 0xEF;

Delay_ms(1);

P2 = 0xFB;

Delay_ms(1);

P2 = 0xFE;

Delay_ms(1);

P2 = 0xFF; //关闭显示器

}

//显示重量,单位kg,两位整数,三位小数

void Display_Weight()

{

P0 = ~LEDData[Weight_Shiwu]; //

P2 = 0xBF; //打开位

Delay_ms(1); //延时

P2 = 0xff; //关闭显示器

P0=~LEDData[Weight_Shiwu0/10]; //显示个位

P2 = 0xEF;

Delay_ms(1);

P2 = 0xff; //关闭显示器

P0 =~LEDData[Weight_Shiwu00/100]; //显示十位

P2 = 0xFB;

Delay_ms(1);

P2 = 0xff; //关闭显示器

P0 =~LEDData[Weight_Shiwu000/1000]; //显示百位

DIAN = 0; //显示小数点

P2 = 0xFE;

Delay_ms(1);

P2 = 0xff; //关闭显示器

}

///定时器0初始化

void Timer0_Init()

{

ET0 = 1; //允许定时器0中断

TMOD = 1; ////选择定时器的工作方式

TL0 = 0xb0;

TH0 = 0x3c; ///定时器赋予初始值

TR0 = 1; ///启动定时器

}

///定时器0中断

void Timer0_ISR (void) interrupt 1 using 0

{

uchar Counter;

TL0 = 0xb0;

TH0 = 0x3c; ///定时器赋予初始值

//每0.5秒刷新重量

Counter ;

if (Counter >= 10)

{

FlagTest = 1;

Counter = 0;

}

}

//按响应程序,参数是键值

//返回键值:

//         7          8    9      10(清0)

//         4          5    6      11(删除)

//         1          2    3      12(未定义)

//         14(未定义) 0    15(.)  13(确定价格)

void KeyPress()

{

if(ROW1==0)   //清零键

{

Display_Weight();

if(ROW1==0)

{

if(qupi==0)

qupi=Weight_Shiwu;

else

qupi=0;

Buzzer=0;

for(p=0;p<10;p++)

Display_Weight();

Buzzer=1;

while(ROW1==0) Display_Weight();

}

}

if(ROW2==0)           //加

{

Display_Weight();

if(ROW2==0)

{

while(!ROW2)

{

key_press_num++;

if(key_press_num>=100)

{

key_press_num=0;

while(!ROW2)

{

if(GapValue<10000)

GapValue+=10;

Buzzer=0;

for(p=0;p<2;p++)

Display_Weight();

Buzzer=1;

for(p=0;p<2;p++)

Display_Weight();

Get_Weight();

}

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2]

标签: 配料计量传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台