基于51单片机的电子秤设计参考代码
时间: 2023-09-15 17:18:41 浏览: 137
基于51单片机电子秤的代码
3星 · 编辑精心推荐
以下是一个基于51单片机的电子秤设计的参考代码:
```c
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DOUT=P1^0; // 模拟输入口
sbit SCK=P1^1; // 时钟线
sbit LED1=P2^0; // 7段LED数码管1
sbit LED2=P2^1; // 7段LED数码管2
sbit LED3=P2^2; // 7段LED数码管3
sbit LED4=P2^3; // 7段LED数码管4
void delay_us(uint us) // 延时函数,精度为1us
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
uchar read_data() // 读取模拟输入口的数据
{
uchar i, dat=0;
for(i=0; i<8; i++)
{
SCK=0;
delay_us(1);
dat<<=1;
SCK=1;
delay_us(1);
if(DOUT==1)
dat++;
}
return dat;
}
uint get_weight() // 计算重量
{
uchar i;
uint sum=0;
for(i=0; i<10; i++) // 采集10次数据,取平均值
{
sum+=read_data();
delay_us(5);
}
return sum/10;
}
void display(uint weight) // 显示重量
{
uchar i, digit;
digit=weight%10;
LED1=1; LED2=1; LED3=1; LED4=1; // 先清空LED数码管
for(i=0; i<digit; i++) // 显示个位
{
LED1=0;
delay_us(500);
LED1=1;
delay_us(500);
}
weight/=10;
digit=weight%10;
for(i=0; i<digit; i++) // 显示十位
{
LED2=0;
delay_us(500);
LED2=1;
delay_us(500);
}
weight/=10;
digit=weight%10;
for(i=0; i<digit; i++) // 显示百位
{
LED3=0;
delay_us(500);
LED3=1;
delay_us(500);
}
weight/=10;
digit=weight%10;
for(i=0; i<digit; i++) // 显示千位
{
LED4=0;
delay_us(500);
LED4=1;
delay_us(500);
}
}
void main()
{
while(1)
{
uint weight=get_weight();
display(weight);
}
}
```
以上代码仅供参考,具体实现要根据硬件设计和实际需求进行修改。
阅读全文