基本要求and制作过程:
#include<reg52.h>
#include<intrins.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit rs=P0^5;
sbit rw=P0^6;
sbit e =P0^7;
sbit hx711_dout=P3^3;
sbit hx711_sck =P3^4;
uint weight;
void delayms(uint z)
{
uchar i,j;
for(i=z;i>0;i--)
for(j=114;j>0;j--);
}
void write_com(uchar com)
{
rs=0;
P2=com;
delayms(1);
e=1;
delayms(1);
e=0;
}
void write_data(uchar date)
{
rs=1;
P2=date;
delayms(1);
e=1;
delayms(1);
e=0;
}
void write_string(uchar line,uchar add,uchar *p)
{
if(line==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
while(1)
{
if(*p == '\0') break;
write_data(*p);
p++;
}
}
void init_1602()
{
rw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
delayms(1);
}
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned char i;
hx711_sck=0;
Count=0;
while(hx711_dout);
for(i=0;i<24;i++)
{
hx711_sck=1;
Count=Count<<1;
hx711_sck=0;
if(hx711_dout)
Count++;
}
hx711_sck=1;
Count=Count^0x800000;
hx711_sck=0;
Count=Count/100;
return(Count);
}
void show()
{
uint y;
y=ReadCount();
weight=(uint)
((float)(y/(4.3/8.8*128*(2^24)/4.3/100)+50)*10)-50050;
write_com(0x80+7);
write_data(weight/10000+0x30);
write_data((weight%10000)/1000+0x30);
write_data(((weight%10000)%1000)/100+0x30);
write_data((((weight%10000)%1000)%100)/10+0x30);
write_com(0x80+12);
write_data((((weight%10000)%1000)%100)%10+0x30);
}
void main()
{
delayms(50);
init_1602();
write_string(1,0," Weight . g");
while(1)
{
show();
delayms(200);
if(weight>=50000)
{
write_string(2,0," WARNING!");
}
if(weight<50000)
{
write_string(2,0,"5am ");
}
}
}
实际的去皮操作需要更加细节谨慎,此项目斩获三等奖,尚有许多不足之处可以改进,以后虚心学习,慢慢进步。