完整word版基于51单片机的电子秤程序Word格式文档下载.docx
《完整word版基于51单片机的电子秤程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《完整word版基于51单片机的电子秤程序Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
![完整word版基于51单片机的电子秤程序Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/19/5997c0cc-b6b5-4c58-a2c5-8957c2877278/5997c0cc-b6b5-4c58-a2c5-8957c28772781.gif)
ucharPrice_Buffer[3]={0x00,0x00,0x00};
unsignedlongMoney=0;
bitFlag_OK=0;
ucharcom;
//延时函数
//****************************************************
voidDelay__hx711_us(void)
{
_nop_();
}
voidLCD1602_delay_ms(unsignedintn)
unsignedinti,j;
for(i=0;
i<
n;
i++)
for(j=0;
j<
123;
j++);
voidDelay_ms(unsignedintn)
//写指令
voidLCD1602_write_com(ucharcom)
LCD1602_RS=0;
LCD1602_delay_ms
(1);
LCD1602_EN=1;
P0=com;
LCD1602_EN=0;
//写数据
voidLCD1602_write_data(uchardat)
LCD1602_RS=1;
P0=dat;
//连续写字符
voidLCD1602_write_word(unsignedchar*s)
while(*s>
0)
{
LCD1602_write_data(*s);
s++;
}
voidInit_LCD1602()
LCD1602_RW=0;
//设置为写状态
LCD1602_write_com(0x38);
//显示模式设定
LCD1602_write_com(0x0c);
//开关显示、光标有无设置、光标闪烁设置
LCD1602_write_com(0x06);
//写一个字符后指针加一
LCD1602_write_com(0x01);
//清屏指令
//矩阵键盘扫描
unsignedcharKEY_Scan()
unsignedchartemp=0;
unsignedcharcom=0x55,com1=0,com2=0;
P3=0xf0;
if(P3!
=0xf0)
com1=P3;
P3=0x0f;
com2=P3;
while(P3!
=0xf0);
temp=com1|com2;
if(temp==0xee)com=1;
//数字1
if(temp==0xed)com=4;
//数字4
if(temp==0xeb)com=7;
//数字7
if(temp==0xe7)com=11;
//备用键*号键
if(temp==0xd7)com=0;
//数字0
if(temp==0xb7)com=14;
if(temp==0xde)com=2;
//数字2
if(temp==0xdd)com=5;
//数字5
if(temp==0xdb)com=8;
//数字8
if(temp==0xbe)com=3;
//数字3
if(temp==0xbd)com=6;
//数字6
if(temp==0xbb)com=9;
//数字9
if(temp==0x7e)com=16;
//数字A键,去皮功能
if(temp==0x7d)com=15;
//数字B键清除键,二次测量
if(temp==0x7b)com=12;
//数字C输入单价错误时返回上一步
if(temp==0x77)com=13;
//数字D键,计算总价
return(com);
unsignedlongHX711_Read(void)//增益128
unsignedlongcount;
unsignedchari;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;
24;
{
HX711_SCK=1;
count=count<
<
1;
if(HX711_DOUT)
count++;
}
count=count^0x800000;
//第25个脉冲下降沿来时,转换数据
HX711_SCK=0;
return(count);
//称重
voidGet_Weight()
HX711_Buffer=HX711_Read();
HX711_Buffer=HX711_Buffer/100;
if(HX711_Buffer>
Weight_Maopi)
Weight_Shiwu=HX711_Buffer;
Weight_Shiwu=Weight_Shiwu-Weight_Maopi;
//获取实物的AD采样数值。
Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/4.22+0.05);
//计算实物的实际重量
//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该数值一般在4.0-5.0之间。
因传感器不同而定。
//+0.05是为了四舍五入百分位
//Buzzer=1;
//关闭警报
//elseif(HX711_Buffer<
Weight_Maopi-30)
//{
//Buzzer=0;
//负重量报警
//}
//elseif(HX711_Buffer>
Weight_Maopi+24970)//大于5Kg的最大量程,报警
//if(Weight_Shiwu>
5000||HX711_Buffer<
//else
//
//
//获取毛皮重量
voidGet_Maopi()
Weight_Maopi=HX711_Buffer/100;
}
//主函数
voidmain()
Init_LCD1602();
//初始化LCD1602
LCD1602_write_com(0x80);
//指针设置
LCD1602_write_word("
Welcometouse!
"
);
//开机画面第一行
Delay_ms(2000);
//延时2s
loop:
Price_Count=0;
Price_Buffer[0]=0;
Price_Buffer[1]=0;
Price_Buffer[2]=0;
Flag_OK=0;
WEIg|PRI|MON"
LCD1602_write_com(0x80+0x40);
//指针设置
0.000|.|."
Get_Maopi();
//称毛皮重量
while
(1)
if(Flag_OK==0)
{