当前位置:文档之家› 压力传感器 HX711 程序

压力传感器 HX711 程序

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code table[]="0123456789";
uchar code table1[]=".Kg";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit ADDO=P2^3;
sbit ADSK=P2^4;
sbit beep=P2^2;
uint shiqian,qian,bai,shi,ge;
ulong zhl;
void delay(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
lcdrs=0;
P1=com;
delay(10);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);//0011 1000 显示模式16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//0000 1100 开显示不显示光标光标不闪烁
write_com(0x06);//0000 0110 当读或写一字符后地址指针加一且光标加一,显示不移动write_com(0x01);//0000 0001 显示清零数据指针清零
}
void write_data(uchar date)
{
P1=date;
delay(10);
lcden=1;
delay(5);
lcden=0;
}
void display()
{
ulong tamp,zhl;
if(zhl>0||zhl<16777216)//进行判断是否满足条件
{
tamp=((zhl*298)/100000)-24714;//进行AD转换计算
shiqian=tamp/10000; //进行计算
qian=tamp%10000/1000;
bai=tamp%10000%1000/100;
shi=tamp%10000%1000%100/10;
ge=tamp%10000%1000%100%10;
write_com(0x80+0x05); //表示使用哪个1602中的地址显示
write_data(table[shiqian]); // 显示值
delay(50);
write_com(0x80+0x06); //表示使用哪个1602中的地址显示
write_data(table[qian]); // 显示值
delay(50); //延时,主要是用来解决显示屏是否忙还是不忙
write_com(0x80+0x07);
write_data(table1[0]);
delay(50);
write_com(0x80+0x08);
write_data(table[bai]);
delay(50);
write_com(0x80+0x09);
write_data(table[shi]);
delay(50);
write_com(0x80+0x0A);
write_data(table[ge]);
write_com(0x80+0x0B);
write_data(table[1]);
delay(50);
write_com(0x80+0x0C);
write_data(table1[2]);
delay(50);
}
else
{
uint z;
for(z=0;z<=15;z++)//判断条件是否超出量程,报警。

{
beep=1;
delay(50);
beep=0;
delay(50);
}
}
}
ulong hx711()
{
ulong Count;
uchar z;
ADSK=0;//PD_SCK置低
Count=0;
while(ADDO);//AD转换结束时DO置0,退出读取
for(z=0;z<24;z++)
{
ADSK=1;
Count=Count<<1;//下降沿来时左移一位,右补0
ADSK=0;
if(ADDO)
Count++;
}
ADSK=1;
Count=Count^0x800000;//第25个脉冲下降沿来时转换数据ADSK=0;
return(Count);
}
void main()
{
init();
while(1)
{
zhl=hx711();
display();
}
}。

相关主题