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

2025-03-22 17:20:14
推荐回答(1个)
回答(1):

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

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

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

O(∩_∩)O~
*******************************************************/
#include 
#include 
#include
#include                
#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;

}