设计任务: 完成一个简单数字电子秤的硬件电路部分和软件部分的设计 要 求: 1. 利用单片机对数字电子秤的各种功能进行控制。 2. 数字电子秤能够显示商品的名称,价格,总重,总价。 3. 数字电子秤能够自动完成商品的价格计算。 4. 数字电子秤具有储存几种简单商品价格的功能。 5. 数字电子秤具有超重提醒功能,一旦重量超出了自身测量重量的范围,即发出警报。 6. 数字电子秤的测量范围要求达到5KG,测量精度要求达到0.001。 |
232-基于51单片机电子秤(程序+仿真+原理图+论文)
程序部分展示,有中文注释,新手容易看懂
uchar Adc0832(unsigned char channel) //AD转换,返回结果
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉搞CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
void data_pro(void)
{
unsigned int;
if(0<ad_data<256)
{
int vary=ad_data;
press=(0.019531*vary);
temp1=(int)(press*1000); //放大1000倍,便于后面的计算
abc[0]=temp1/1000+48; //取压力值百位
abc[1]=46;
abc[2]=(temp1%1000)/100+48; //取压力值十位
abc[3]=((temp1%1000)%100)/10+48; //取压力值个位
abc[4]=((temp1%1000)%100)%10+48; //取压力值十分位
}
}
/*****************报警子函数*******************/
void alarm(void)
{
if(ad_data>=256)
beep=0; //则启动报警
else
beep=1;
}