求讲解51单片机电子秤的程序,分模块详细点

#include<reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char

sbit ADDO=P1^1;
sbit ADSK=P1^0;
/////////数码管位选控制端/////////////////////////
sbit w1=P2^4;
sbit w2=P2^5;
sbit w3=P2^6;
sbit w4=P2^7;
/////四位共阴数码管段选//////////////////////////////////////////////
uchar table[22]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,
0xDF,0xD7,0xCF,0xDA,0x1B,0xDC,0x9B,0x8B,//0-F, 0-15
0x80,0x1a,0xce,0x00,0xff,0x4f};//'-',L,H,灭,全亮,n 16-21
long Lheight,Lheight1;
float j;
long k;

void delay(uint i)
{
uchar j;
for(i;i>0;i--)
for(j=110;j>0;j--);
}
//读711 AD数据子程序
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned int ADval;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for(i=0;i<24;i++) //读24个bit
{
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO)Count++;
}
ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
ADSK=0;
ADval=(int)(Count>>8);
return(ADval);
}
//重量值数码管显示子程序
void display(void)
{
w1=0;P0=table[Lheight1%10000/1000];delay(10);
w1=1;P0=0x00;delay(1);
w2=0;P0=table[Lheight1%1000/100];delay(10);
w2=1;P0=0x00;delay(1);
w3=0;P0=table[Lheight1%100/10];delay(10);
w3=1;P0=0x00;delay(1);
w4=0;P0=table[Lheight1%10];delay(10);
w4=1;P0=0x00;delay(1);
}
void main()
{
uchar i;
for(i=0;i<10;i++)k=ReadCount();
while(1)
{
Lheight=ReadCount();
Lheight1=Lheight-k;
if(Lheight1<=2)Lheight1=0;
Lheight1=Lheight1*2;
for(i=0;i<20;i++)display();
}
}

如果想知道更多的东西,建议看一本书:吴鉴鹰单片机实战精讲,网上能找到,代码我给你了。

/******************************************************
*程序:吴鉴鹰基于单片机的电子秤的设计程序                                                      
** 这一讲的主要内容: 电子称是什么,讲的专业点就是:
利用物体的重力作用来确定物体质量的测量仪器,也可用来确定与物体质量相关的其他量的大小,
参数,或特性用我们自己话讲就是测重量的。                                                                                  
** 功能描述:  
** 输 入:         
** 内容:     
** 输 出: 
**         
** 全局变量:
** 调用模块: 
**
** 作 者:    吴鉴鹰
** 日 期:     14.02.22

备注:有什么错误的地方,欢迎各大烧友指正

O(∩_∩)O~
*******************************************************/
#include <reg51.h>
#include <intrins.h>
#include<stdlib.h>
#include<math.h>                
#define uchar unsigned char  //宏的定义变量类型 uchar 代替 unsigned char
#define uint  unsigned int  //宏的定义变量类型 uint  代替 unsigned int
#define delay_time_max   50   //按键去抖动延时阀值
sbit    RS = P2^0;
sbit    RW = P2^1;
sbit    SCLK = P2^2;
sbit    LCDRST = P2^3;
sbit         ST=P3^6;                //启动信号
sbit         EOC=P3^3;                //转换结束信号,连到外部中断1口,转换结束后进入外部中断
sbit         OE=P3^7;                //输出使能
uchar          KEY_VALUE;
uchar          key_data;
uchar          dis_buf;            //显示缓存
uchar          temp;
uchar          key;                //键顺序码
uchar         result;
uint         f;
void delay(uchar x);      //x*0.14MS
// 此表为 LED 的字模              0   1  2  3    4  5  6  7  8  9   a    b    c d   e   f
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
unsigned char  ADC0809[],KONGBVAI[],DANJIA[];
void ADC0809_change(); 


/*************************************************************************************
** 函数名称:  delayms
** 功能描述:  译码功能,将需要显示的数字转成相应的七段译码表
              如要显示的字符为“0”,则为7e ---0111 1111,就中间的一个LED不亮
** 输 入:    ms:需要延时的长度
**         
**        
** 输 出: 
**         
** 全局变量: 
** 调用模块: 
**
** 作 者:     吴鉴鹰
** 日 期:     14.02.22
**-----------------------------------------------------------------------------------
** 修改人:吴鉴鹰
** 日 期:
**----------------------------------------------------------------------------------
****************************************************************************************/
void delayms(uint ms)
{
        uchar i;
        while(ms--) for(i=0;i<120;i++);
}

/*********************************************************************************
** 函数名称:   SendByte  
** 功能描述:   串口给液晶发送数据  
                                                         
** 输 入:  Dbyte
**         
**         
** 输 出: 
** 全局变量:
** 调用模块: 
**
** 作 者:    吴鉴鹰
** 日 期:    14.02.28
************************************************************************************/
void SendByte(uchar Dbyte)
{
     uchar i;
     for(i=0;i<8;i++)
     {
           SCLK = 0;
           Dbyte=Dbyte<<1;      //左移一位
           RW = CY;            //移出的位给RW
           SCLK = 1;
           SCLK = 0;
     }
}
/***********************************************************************************
** 函数名称:   TransferCom  
** 功能描述:   串口给液晶发送命令  
                                                         
** 输 入:  data0
**         
**         
** 输 出: 
** 全局变量:
** 调用模块: 
**
** 作 者:    吴鉴鹰
** 日 期:    14.02.28
**********************************************************************************/
void    TransferCom(uchar data0)  
{
   RS=1;
   SendByte(0xf8);            //11111ABC,RW(0),RS(1),0
   SendByte(0xf0&data0);      //高四位
   SendByte(0xf0&data0<<4);   //低四位(先执行<<)
   RS=0;            
}
/*******************************************************************************
** 函数名称:   lcd_mesg  
** 功能描述:   写数据,
                                                          
** 输 入:  data1
**         
**         
** 输 出: 
** 全局变量:
** 调用模块: 
**
** 作 者:    吴鉴鹰
** 日 期:    14.02.28
*****************************************************************************/
void    TransferData(uchar data1)  
{
   RS=1;
   SendByte(0xfa);            //11111ABC,RW(0),RS(1),0
   SendByte(0xf0&data1);      //高四位
   SendByte(0xf0&data1<<4);   //低四位(先执行<<)
   RS=0;

}

温馨提示:内容为网友见解,仅供参考
无其他回答

求讲解51单片机电子秤的程序,分模块详细点
sbit RW = P2^1;sbit SCLK = P2^2;sbit LCDRST = P2^3;sbit ST=P3^6; \/\/启动信号sbit EOC=P3^3; \/\/转换结束信号,连到外部中断1口,转换结束后进入外部中断sbit OE=P3^7; \/\/输出使能uchar KEY_VALUE;uchar key_data;uchar dis_buf; \/\/显示...

单片机电子秤设计如何标定?
基于51单片机的称重系统设计 本系统采用单片机AT89S52为控制核心,实现电子秤的基本控制功能。主要分 为五个模块:物体重量采集模块、AD转化模块、单片机处理模块、数据显示模块及电源模块。通过四个压力传感器采集参数,经过放大电路放大信号,在通过AD转换芯片变成数字信号,经单片机处理,显示在液晶屏上。本系统...

HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理...
本文详细解析了基于51单片机的HX711电子秤称重系统的设计,包括其功能要求、系统架构、数据采集与处理、人机交互以及仿真和编程细节。系统目标是实现精确称重(±0.005Kg),具备单价输入、总价计算、超重报警和校准功能。系统由单片机最小系统、数据采集、键盘显示、报警系统构成,其中,数据采集部分的核心是高...

51单片机电子秤(HX711,数码管,去皮)
电子秤基于51单片机,结合HX711传感器进行重量测量。系统具备去皮功能,允许用户通过按键设置初始重量;并且能设定报警值,当重量超过此值时,蜂鸣器会发出警报。以下是实现过程的概述。系统配置包含按钮和数码管接口,使用HX711来读取压力电桥的重量值。主函数中,通过设置定时器和中断,实现重量数据的实时更新。...

hx711的51单片机电子秤求指点
我也是毕业生,现在我在实习 前不久,我接了一个项目。称重系统;我做的是在轨道上动态称重。现在已经做好了。测量的是矿车的重量。本来我开始打算选择的AD也是hx711;但是最后我没有用,我用的是MAX1167;可惜现在我手上没有hx711;

基于51单片机的电子秤【HX711,4种商品】(仿真)
基于51单片机的电子秤【HX711】,通过仿真在protue 8.6环境中实现,具有多种实用功能。首先,它利用HX711测量压力电桥的重量,并具备去皮功能,能够针对四种不同的商品进行单个价格计算,但不支持多商品价格累积。此外,该电子秤还支持温度和湿度的测量,并提供了相应的校正算法,确保数据准确性。仿真过程中...

有计数功能的电子秤要如何使用
计数秤使用步骤:机零按设定或计数键进入计数程序(数定数量产品五或十)放秤再按设定或计数键进入计数…(计数显示量秤定)再按设定或计数键退计数系统。操作方法如下:1、计数秤开机预热10分钟(为了使电子秤电路系统的电子元件达到热稳定状态);2、单重取样:人工数出100个单重相同的元件(数量越多...

计算器的芯片是怎么构成的
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。3.在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备...

在P3口占用的情况下,怎么用51单片机编写电子秤去皮程序
P3口碑占用,那么就不能用中断方式来做了,将原来的程序改为查询方式即可。

谁能帮我看看我编的电子秤程序,现在就是串口通信实现不了,我需要把显示...
你的控制器采用的是51单片机还是其他类型单片机、DSP、RAM等?建议你现在一个最简单的串口通信程序,上位机就用串口助手接收数据,如果能接收到数据,说明程序编写正确,然后你再考虑程序的优化,上位机界面的编写等,如果需要51单片机的串口程序,留下邮箱我发给你。

相似回答