如果想知道更多的东西,建议看一本书:吴鉴鹰单片机实战精讲,网上能找到,代码我给你了。
/******************************************************
*程序:吴鉴鹰基于单片机的电子秤的设计程序
** 这一讲的主要内容: 电子称是什么,讲的专业点就是:
利用物体的重力作用来确定物体质量的测量仪器,也可用来确定与物体质量相关的其他量的大小,
参数,或特性用我们自己话讲就是测重量的。
** 功能描述:
** 输 入:
** 内容:
** 输 出:
**
** 全局变量:
** 调用模块:
**
** 作 者: 吴鉴鹰
** 日 期: 14.02.22
备注:有什么错误的地方,欢迎各大烧友指正
O(∩_∩)O~
*******************************************************/
#include reg51.h
#include intrins.h
#includestdlib.h
#includemath.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;i120;i++);
}
/*********************************************************************************
** 函数名称: SendByte
** 功能描述: 串口给液晶发送数据
** 输 入: Dbyte
**
**
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 吴鉴鹰
** 日 期: 14.02.28
************************************************************************************/
void SendByte(uchar Dbyte)
{
uchar i;
for(i=0;i8;i++)
{
SCLK = 0;
Dbyte=Dbyte1; //左移一位
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(0xf0data0); //高四位
SendByte(0xf0data04); //低四位(先执行)
RS=0;
}
/*******************************************************************************
** 函数名称: lcd_mesg
** 功能描述: 写数据,
** 输 入: data1
**
**
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 吴鉴鹰
** 日 期: 14.02.28
*****************************************************************************/
void TransferData(uchar data1)
{
RS=1;
SendByte(0xfa); //11111ABC,RW(0),RS(1),0
SendByte(0xf0data1); //高四位
SendByte(0xf0data14); //低四位(先执行)
RS=0;
}
原件:压力传感器、A/D芯片、单片机、显示器,以及构建电路的电阻和芯片。
原理:利用压力传感器采集因压力变化产生的电压信号,经过电压放大电路放大,然后再经过模数转换器转换为数字信号,最后把数字信号送入单片机。单片机经过相应的处理后,当前所称物品的重量,通过显示器显示。
实际放大电路跟仿真的会有些出入,需要自己调节电阻阻值从而达到放大要求。
传感器很多 ,型号可以再查一下 一般来说都没多大问题 主要跟你的硬件电路有关
但你采用的ADC0832? 8bit的吧? 它的测量精度就不够 肯定做不到0.01kg的分辨率(更不用说精度)
ADC 选用 10位以上的吧 最好是12位以上
硬件电路还有好多设计的方面要注意 ,比如 电源纹波、AD采样参考电压 放大电路……这些设计好了 才能达到设计要求
可以采用电桥→差分放大 注意 模拟电源和数字电源要分开
这是你下载的程序,但其中的LCD驱动程序.h也要下载源文件的,否则编译时找不到就出错的。你肯定是没有下载这个程序,或者就没有吧。
如果你下载这些程序只是作为毕业设计,书面打印出来是没有什么问题。
可是你真的要用keilc来编译,那肯定是有错误的,因你并没有全部程序。
假如,你还想仿真就更不要想了,网上的这些像是论文的东西都是纸上谈兵的,也都不能给全部的资料的。
你就当是玩玩而已了。
另外,你给的链接是打不开的,原文件已经删掉了。
51单片机设计新型电子秤的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:51单片机设计新型电子秤