基于51单片机的电子秤程序

基于51单片机的电子秤程序
基于51单片机的电子秤程序

#include

#include

//#include "LCD1602.h"

//#include "HX711.h"

#define uint unsigned int

#define uchar unsigned char

sbit LCD1602_RS = P2^5;

sbit LCD1602_RW = P2^6;

sbit LCD1602_EN = P2^7;

sbit HX711_DOUT=P2^0;

sbit HX711_SCK=P2^1;

unsigned long HX711_Buffer = 0;

unsigned long Weight_Maopi = 0,Weight_Shiwu = 0;

char Price_Count = 0;

uchar KEY_NUM = 0;

uchar Price_Buffer[3] = {0x00,0x00,0x00};

unsigned long Money = 0;

bit Flag_OK = 0;

uchar com;

//延时函数

//**************************************************** void Delay__hx711_us(void)

{

_nop_();

_nop_();

}

void LCD1602_delay_ms(unsigned int n)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<123;j++);

}

void Delay_ms(unsigned int n)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<123;j++);

}

//**************************************************** //写指令

//**************************************************** void LCD1602_write_com( uchar com)

{

LCD1602_RS = 0;

LCD1602_delay_ms(1);

LCD1602_EN = 1;

P0 = com;

LCD1602_delay_ms(1);

LCD1602_EN = 0;

}

//****************************************************

//写数据

//****************************************************

void LCD1602_write_data( uchar dat)

{

LCD1602_RS = 1;

LCD1602_delay_ms(1);

P0 = dat;

LCD1602_EN = 1;

LCD1602_delay_ms(1);

LCD1602_EN = 0;

}

//****************************************************

//连续写字符

//****************************************************

void LCD1602_write_word(unsigned char *s)

{

while(*s>0)

{

LCD1602_write_data(*s);

s++;

}

}

void Init_LCD1602()

{

LCD1602_EN = 0;

LCD1602_RW = 0; //设置为写状态

LCD1602_write_com(0x38); //显示模式设定

LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置LCD1602_write_com(0x06); //写一个字符后指针加一

LCD1602_write_com(0x01); //清屏指令

}

//**************************************************** //矩阵键盘扫描

//**************************************************** unsigned char KEY_Scan()

{

unsigned char temp = 0;

unsigned char com = 0x55 , com1 = 0 , com2 = 0;

P3=0xf0;

if(P3!=0xf0)

{

com1=P3;

P3=0x0f;

com2=P3;

}

P3=0xf0;

while(P3!=0xf0);

temp=com1|com2;

if(temp==0xee)com=1;//数字1

if(temp==0xed)com=4;//数字4

if(temp==0xeb)com=7;//数字7

if(temp==0xe7)com=11;//备用键*号键

if(temp==0xd7)com=0;//数字0

if(temp==0xb7)com=14;//备用键*号键

if(temp==0xde)com=2; //数字2

if(temp==0xdd)com=5; //数字5

if(temp==0xdb)com=8;//数字8

if(temp==0xbe)com=3;//数字3

if(temp==0xbd)com=6; //数字6

if(temp==0xbb)com=9;//数字9

if(temp==0x7e)com=16;//数字A键,去皮功能

if(temp==0x7d)com=15;//数字B键清除键,二次测量

if(temp==0x7b)com=12;//数字C输入单价错误时返回上一步if(temp==0x77)com=13;//数字D键,计算总价

return(com);

}

unsigned long HX711_Read(void) //增益128

{

unsigned long count;

unsigned char i;

HX711_DOUT=1;

Delay__hx711_us();

HX711_SCK=0;

count=0;

while(HX711_DOUT);

for(i=0;i<24;i++)

{

HX711_SCK=1;

count=count<<1;

HX711_SCK=0;

if(HX711_DOUT)

count++;

}

HX711_SCK=1;

count=count^0x800000;//第25个脉冲下降沿来时,转换数据

Delay__hx711_us();

HX711_SCK=0;

return(count);

}

//****************************************************

//称重

//****************************************************

void Get_Weight()

{

HX711_Buffer = HX711_Read();

HX711_Buffer = HX711_Buffer/100;

if(HX711_Buffer > Weight_Maopi)

{

Weight_Shiwu = HX711_Buffer;

Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取实物的AD采样数值。

Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.22+0.05); //计算实物的实际重量

//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。

//当发现测试出来的重量偏大时,增加该数值。

//如果测试出来的重量偏小时,减小改数值。

//该数值一般在4.0-5.0之间。因传感器不同而定。

//+0.05是为了四舍五入百分位

// Buzzer = 1; //关闭警报

}

// else if(HX711_Buffer < Weight_Maopi - 30)

// {

// Buzzer = 0; //负重量报警

// }

// else if(HX711_Buffer > Weight_Maopi + 24970) //大于5Kg的最大量程,报警

// {

// Buzzer = 0;

// }

// if(Weight_Shiwu > 5000 || HX711_Buffer < Weight_Maopi - 30)

// {

// Buzzer = 0;

// }

// else

// {

// Buzzer = 1;

// }

//

//

}

//****************************************************

//获取毛皮重量

//****************************************************

void Get_Maopi()

{

HX711_Buffer = HX711_Read();

Weight_Maopi = HX711_Buffer/100;

}

//****************************************************

//主函数

//****************************************************

void main()

{

Init_LCD1602(); //初始化LCD1602

LCD1602_write_com(0x80); //指针设置

LCD1602_write_word("Welcome to use! "); //开机画面第一行

Delay_ms(2000); //延时2s

loop:Price_Count = 0;

Price_Buffer[0] = 0;

Price_Buffer[1] = 0;

Price_Buffer[2] = 0;

Flag_OK = 0;

LCD1602_write_com(0x80); //指针设置

LCD1602_write_word("WEI g|PRI | MON ");

LCD1602_write_com(0x80+0x40); //指针设置

LCD1602_write_word("0.000| . | . ");

Get_Maopi(); //称毛皮重量

while(1)

{

if( Flag_OK == 0)

{

Get_Weight(); //称重

//显示当前重量

LCD1602_write_com(0x80+0x40);

LCD1602_write_data(Weight_Shiwu/1000 + 0x30);

LCD1602_write_data('.');

LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);

LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);

LCD1602_write_data(Weight_Shiwu%10 + 0x30);

}

KEY_NUM = KEY_Scan();

if( KEY_NUM != 0x55) //当返回的不是初值时候,确认按键按下。

{

if(KEY_NUM == 16) //数字A键,去皮功能

{

Get_Maopi(); //去皮

}

if(KEY_NUM == 15) //数字B键清除键,二次测量

{

goto loop;

}

if(KEY_NUM == 12) //数字C输入单价错误时返回上一步

{

Price_Count--;

if( Price_Count < 0)

{

Price_Count = 0;

}

Price_Buffer[Price_Count] = 0; //清除上一个输入的数据

switch(Price_Count)

{

case 0:

LCD1602_write_com(0x80+0x40+6);

LCD1602_write_data(' ');

break;

case 1:

LCD1602_write_com(0x80+0x40+7);

LCD1602_write_data(' ');

break;

case 2:

LCD1602_write_com(0x80+0x40+9);

LCD1602_write_data(' ');

break;

default : break;

}

}

if(KEY_NUM == 13) //数字D键,计算总价

{

Money = Price_Buffer[0] * 100 + Price_Buffer[1] * 10 + Price_Buffer[2];

Money = Money * Weight_Shiwu / 1000;

LCD1602_write_com(0x80+0x40+11);

LCD1602_write_data(Money/1000 + 0x30);

LCD1602_write_data(Money%1000/100 + 0x30);

LCD1602_write_data(Money%100/10 + 0x30);

LCD1602_write_data('.');

LCD1602_write_data(Money%10 + 0x30);

Flag_OK = 1;

}

if(KEY_NUM >= 0 && KEY_NUM <= 9) //显示输入的价值

{

Price_Buffer[Price_Count] = KEY_NUM;

switch(Price_Count)

{

case 0:

LCD1602_write_com(0x80+0x40+6);

LCD1602_write_data(Price_Buffer[0] + 0x30);

break;

case 1:

LCD1602_write_com(0x80+0x40+7);

LCD1602_write_data(Price_Buffer[1] + 0x30);

break;

case 2:

LCD1602_write_com(0x80+0x40+9);

LCD1602_write_data(Price_Buffer[2] + 0x30);

break;

default : break;

}

Price_Count++;

if( Price_Count >= 3)

{

Price_Count = 3;

}

}

}

}

}

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

单片机中断程序大全

单片机中断程序大全公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

//实例42:用定时器T0查询方式P2口8位控制L E D闪烁#include // 包含51单片机寄存器定义的头文件void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 //实例43:用定时器T1查询方式控制单片机发出1KHz音频

#include // 包含51单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为P3.7引脚 void main(void) {// EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0; while(1)//无限循环等待查询 { while(TF1==0); TF1=0; sound=~sound; //将P3.7引脚输出电平取反 TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%256; //定时器T0的高8位赋初值 } } //实例44:将计数器T0计数的结果送P1口8位LED显示 #include // 包含51单片机寄存器定义的头文件sbit S=P3^4; //将S位定义为P3.4引脚

51单片机中断程序大全

//实例42 :用定时器T0 查询方式 P2 口8 位控制LED 闪烁 //#include单片机寄存器定义的头文件 51包含 /******************************************************* *******函数功能:主函数 ******************************************************** ******/void main(void){ // EA=1;开总中断// 中断允许T0 // 定时器// ET0=1; 1的模式TMOD=0x01;// 使用定时器T0 位赋初值定时器T0 的高8 TH0=(65536-46083)/256; // 位赋初值的高8 TL0=(65536-46083)%6; // 定时器T0 T0启动定时器TR0=1;// TF0=0;P2=0xff; 无限循环等待查询while(1)// {while(TF0==0); TF0=0;P2=~P2; 位赋初值的高8 定时器TH0=(65536-46083)/256; // T0 位赋初值T0 TL0=(65536-46083)%6; //

定时器的高8 }} 1KHzT1:用定时器43 实例// 音频查询方式控制单片机发出 #include 单片机寄存器定义的头文件51 // 包含sbit sound=P3^7;将// 引脚sound P3.7 位定义为 /********************************************************** **** 函数功能:主函数 ******************************************************** ******/void main(void){// EA=1;开总中断// 中断允许ET0=1;// // 定时器T0 1的模式使用定时器// T1 TMOD=0x10; 位赋初值// TH1=(65536-921)/256; T1 定时器的高8 TL1=(65536-921)%6; // 定时器T1 的高8 位赋初值 TR1=1;// 启动定时器T1TF1=0; while(1)// 无限循环等待查询{while(TF1==0); TF1=0;

基于51单片机的电子秤的设计

学号: 毕业设计 G RADUATE T HESIS 论文题目:基于51单片机的电子秤的设计 学生姓名: 专业班级: 学院: 指导教师: 2017年06月12日

第一章功能说明 本设计系统以单片机AT89S52为控制核心,实现电子秤的基本控制功能。在设计系统时,为了更好地采用模块化设计法,分步设计了各个单元功能模块。 系统的硬件部分包括最小系统部分、数据采集部分、人机交互界面和系统电源四大部分。最小系统部分主要包括AT89S52和扩展的外部数据存储器;数据采集部分由称重传感器,信号的前期处理和A/D转换部分组成,包括运算放大器AD620和A/D转换器ICL7135;人机界面部分为键盘输入,四位LED数码显示器,可以直观的显示重量的具体数字以及方便的输入数据,使用方便;系统电源以LM317和LM337为核心设计电路以提供系统正常工作电源。 系统的软件部分应用单片机C语言进行编程,实现了该设计的全部控制功能。该电子秤可以实现基本的称重功能(称重范围为0~9.999Kg,重量误差不大于±0.005Kg),并发挥部分的显示购物清单的功能,可以设置日期和设定十种商品的单价,还具有超量程和欠量程的报警功能。 本系统设计结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。称重传感器原理 即由非电量(质量或重量)转换成电量的转换元件,它是把支承力变换成电的或其它形式的适合于计量求值的信号所用的一种辅助手段。 按照称重传感器的结构型式不同,可以分直接位移传感器(电容式、电感式、电位计式、振弦式、空腔谐振器式等)和应变传感器(电阻应变式、声表面谐振式)或是利用磁弹性、压电和压阻等物理效应的传感器。 对称重传感器的基本要求是:输出电量与输入重量保持单值对应,并有良好的线性关系;有较高的灵敏度;对被称物体的状态的影响要小;能在较差的工作条件下工作;有较好的频响特性;稳定可靠。 传感器下的定义是:“能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成”。其中敏感元件指传感器中能直接感受被测量的部分,转换元件指传感器中能将敏感元件输出量转换为适于传输和测量的电信号部分。此外传感器是一种检测装置,能感受到被测量的信息,并能将检测感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的首要环节。 称重传感器在电子秤中占有十分重要的位置,被喻为电子秤的心脏部件,它的性能好坏很大程度上决定了电子秤的精确度和稳定性。通常称重传感器产生的误差约占电子秤整机误差的50%~70%。若在环境恶劣的条件下(如高低温、湿热),传感器所占的误差比例就更大,因此,在人们设计电子秤时,正确地选用称重传感器非常重要。 称重传感器的种类很多,根据工作原理来分常用的有以下几种:电阻应变式、电容式、压磁式、压电式、谐振式等。(本设计采用的是电阻应变式)电阻应变式称重传感器包括两个主要部分,一个是弹性敏感元件:利用它将被测的重量转换为弹性体的应变值;另一个是电阻应变计:它作为传感元件将弹性体的应变,同步地转换为电阻值的变化。电阻应变片所感受的机械应变量一般

51单片机中断程序大全

//实例42:用定时器T0查询方式P2口8位控制LED闪烁#include // 包含51单片机寄存器定义的头文件 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 } } //实例43:用定时器T1查询方式控制单片机发出1KHz音频#include // 包含51单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为P3.7引脚 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值

51单片机指令表汇总

51单片机指令表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器内容传送到累加器 1 1 MOV A,direct 直接地址内容传送到累加器 2 1 MOV A,@Ri 间接RAM内容传送到累加器 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器内容传送到寄存器 1 1 MOV Rn,direct 直接地址内容传送到寄存器 2 2 MOV Rn,#data 立即数传送到寄存器 2 1 MOV direct,Rn 寄存器内容传送到直接地址 2 2 MOV direct,direct 直接地址传内容传送到直接地址 3 2 MOV direct,A 累加器内容传送到直接地址 2 1 MOV direct,@Ri 间接RAM内容传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 累加器内容传送到间接RAM 1 1 MOV @Ri,direct 直接地址内容传送到间接RAM 2 2 MOV @Ri,#data 立即数传送到间接RAM 2 1 MOV DPTR,#data16 16 位地址传送到数据指针 3 2 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8位地址)内容传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16位地址)内容传送到累加器 1 2 MOVX @Ri,A 累加器内容传送到外部RAM(8位地址) 1 2 MOVX @DPTR,A 累加器内容传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址内容压入堆栈 2 2 POP direct 堆栈内容弹出到直接地址 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1

基于51单片机电子秤设计

摘要 电子秤是日常生活中常用的称重设备,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。 微电子技术的发展为电子秤提出了改进的空间。电子秤向着简单、便宜发展,智能化、精确的电子秤成为了人们的追求。本简易电子秤以常见的AT89C51为核心,以电阻应变片采集应变数据,通过HX711放大并进行AD转换供单片机处理,用LCD1602显示所测量的重量,同时本电子秤系统还提供单价设置进行求价格的计算以及去皮功能,通过一些简单低成本的元器件就完成了一个功能齐全的电子秤的制作,将传统电子秤的成本进行了缩减。 关键词:电阻应变片 AT89C51 HX711 电子秤

第一章方案与论证 一、方案类型 (一)方案一 通过单片机为主控芯片,用应变片采集应变数据,通过专用仪表放大器INA128对采集到的信号进行放大,在配上模数转换芯片对放大了的模拟信号转化为数字信号,传入单片机中进行数据处理,找出函数关系并转化关系。通过数字信号转化为重量值显示在LDC1602上,同时通过键盘进行数据输入,输入单价、去皮等功能。通过蜂鸣器和二极管实现超额报警功能。 (二)方案二 以单片机为主控芯片,应变片采集应变数据,将放大和模数转换用HX711芯片来同时进行实现,将模拟量传入主控芯片单片机中进行数据转换,通过函数关系转换为重量显示到LED 上或者LCD1602上,同时通过键盘按键进行数据输入,输入单价、去皮等功能,并通过蜂鸣器进行数据处理。 (三)方案三 运用PLC作为主控制器,PLC运用广泛,它具有接线简单,通用性好,编程简单,使用方便,可连接为控制网络系统,易于安装,便于维护等优点。 二、方案论证与选定 运用51单片机作为主控芯片,AT89C51是一种高效微控制器。它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。但方案一中,放大和AD转换模块为独立模块,它们的独立设计费事费力且还会存在误差较大的情况。相比于方案一,方案二一HX711作为放大和AD 转换芯片,简化了电路结构。HX711是一款专为高精度电子秤设计的24位AD转换器芯片。与同类型其他芯片相比,该芯片集成了包括文雅电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。精度方面很好的满足了题目中的要求,相比于方案一,方案二根据可行性。 方案三采用PLC作为主控芯片,但其价格昂贵,违背了我们制作电子秤的简单、便捷、便宜的原则,所以我们并没考虑选用PLC作为主控芯片。 综合考虑后,我们决定选择方案二来进行本简易电子秤系统的设计与制作。通过精度、价格、简单程度出发考虑,方案二是最合适的。

51单片机的电子秤设计

万方数据

51单片机的电子秤设计 作者:郭伦伦 作者单位:江汉大学文理学院,湖北,武汉,430056 刊名: 科技创业月刊 英文刊名:PIONEERING WITH SCIENCE & TECHNOLOGY MONTHLY 年,卷(期):2010,23(4) 被引用次数:0次 参考文献(1条) 1.张培仁.基于C语言编程MCS-51单片机原理及应用[M].北京:清华大学出版社,2003 相似文献(10条) 1.期刊论文周华鹏.毛建国.顾筠.李芳培.柏方超.卢文玉.ZHOU Hua-peng.MAO Jian-guo.GU Jun.LI Fang-pei.BO Fang-chao.LU Wen-yu高精度电容式压力传感器测量方法-传感器与微系统2010,29(2) 提出了一种高精度、低成本的电容式压力传感器的测量方法.用RC振荡器将电容式传感元件的变化调制为时变频率信号,用SSP1492芯片测量该频率变化量,并送入C8051F021单片机,用高阶多项式完成频率变化到压力变化的解算,实现了高精度压力测量.实验结果显示:该方法用于电容式压力传感器的测量精度优于0.02%FS. 2.学位论文张翼飞基于压力传感器的风速风压测量与无线数据传输2008 风速和风压的测量在很多领域都有很重要的作用,对于航海、航空、渔业和农业以及风力发电站等部门来说,风压和风速则更为重要。在工业生产中,监测和控制系统均离不开数据信息的传输,很多情况下,由于条件所限,采用普通有线电缆引出信号是无法满足要求或者跟本无法实现的。 本文设计了用MCS-52系列单片机设计的监测风压风速的数据采集和处理系统。该系统采用单片机技术,以AT89S52为核心,把压力传感器安装在步进电机上,使步进电机带动传感器转动来测量风压,由压力传感器采集数据,单片机接收并处理数据,LED数码管显示测量风压值。在软件上采用的是由孙以材教授提出的归十法的算法。来改进测量数据的准确性。描述了系统的硬件设计及软件实现,给出了程序编制的基本流程图,从而降低了系统成本,提高了测量精度。 本文设计了具有无线数据传输功能的测压装置、包括硬件结构设计、软件系统工作流程及实验结果,该装置以单片机为核心,利用发射器芯片、接收器芯片构成的无线收发模块PTR8000,设计出数据采集与无线传输系统。该系统的无线数据采集模块体积小、功耗低、电路构造简单,可以方便地嵌入被监测系统中,利用上位机实现对被测数据的实时监测。 3.期刊论文张翼飞.孙以材.潘国峰.Zhang Yi-fei.SUN Yi-cai.PAN Guo-feng基于压力传感器的风速风压测量系统与无线数据传输-传感器世界2009,15(3) 本文介绍了用MCS-52系列单片机设计的监测风压风速的数据采集和处理系统.该系统采用单片机技术,以AT89S52为核心, 把高性能低量程压力传感器安装在步进电机上,使步进电机带动传感器转动来测量风压.另外将无线收发模块PTR800应用于该系统,实现测量系统所测数据的无线传输,用户可在接收端对系统进行控制.该系统避免了复杂的现场连线,应用灵活,提高了工作效率,降低了工作成本. 4.学位论文李国玉智能压力传感器的设计2004 压阻型扩散硅压力传感器以其低价格得到广泛应用,基于单片机技术的智能压力传感器以其使用方便,测量精确而得以推广.压力传感器的核心是扩散硅电阻桥,智能压力传感器应用单片机技术采集数据、处理并输出显示结果.扩散硅的压阻系数是温度的函数,所以存在灵敏度温漂,而影响温度的因素是多方面的:测量环境的变化,测量电路产生的热量的影响等等,所以要想得到比较精确的压力值,必须对压力传感器进行校正.压力传感器的零点存在热漂移、电漂移和时间漂移,减小压力传感器的热零点漂移的措施是各力敏电阻的电阻值及其温度系数的相等性.本论文应用曲线拟合方法,神经网络算法和多项式拟合的规范化方法校正零点,降低成本且精确度提高.压力传感器的压力灵敏度与压阻系数成比例关系,而压阻系数是温度的函数,所以非线性补偿的实质是消除温度对灵敏度的影响.可应用的方法很多:二极管补偿法,恒流源补偿法,热敏电阻补偿法等.本论文利用集成的温度传感器AD590获得温度信息,应用曲线拟合技术,融入温度信息,得出带有温度信息的压力解析表达式,此方法简化硬件电路且可实现自校正自补偿功能.本论文根据压力传感器零点补偿与非线性补偿原理,设计出了测量压力传感器的硬件电路及C51软件编程,应用单片机技术测量电路简单,成本低,应用面广,但是由于自身的稳定性其测量结果仍存在误差. 5.期刊论文刘元宾.靳世久.陈世利.Liu Yuanbin.Jin Shijiu.Chen Shili压力传感器SP12在胎压监视系统中的应用-电子测量技术2008,31(2) 汽车胎压是汽车安全行驶的重要保证之一.本文详细介绍了在胎压监视系统中应用的压力传感器SP12的功能、特点、数据传输格式;设计了SP12与单片机的硬件接口电路,对电路组成、功能以及SPI串口通信协议进行了说明;给出了软件控制流程图以及软件程序编写中应注意的问题. 6.期刊论文张劼.景博.谢红星基于振筒式压力传感器的某型检测系统设计-传感器技术2005,24(1) 针对飞行器全静压系统的检测需求,设计实现了以80C552单片机为控制核心、基于振筒式压力传感器的自动检测系统,论述了系统的总体构成,重点设计了提高振筒式传感器测量准确度配套电路和测量显示组件.系统的实现提高了飞行器全静压系统的检测自动化程度,具有检测速度快、准确度高、判读直观、可靠性高和操作简单的特点,在实际测试中运行良好,性能稳定. 7.期刊论文陈延奎智能压阻压力传感器的设计-中国测试技术2008,34(4) 为克服传统压阻压力传感器的不足,设计出一种智能型压阻压力传感器.根据智能传感器的系统组成和应用范围,在充分考虑各元器件之间连接的参数配合的基础上,选择实用性好,可靠性高,成本低的元器件组成整个测量系统,该系统在89C51单片机的控制和处理下,同时具备温度和压力参数的自动测量、放大、A/D转换和结果显示,而且具有自检、自动补偿和现场通讯等功能. 8.期刊论文王瑜.WANG Yu基于C8051F020单片机的多路压力测量仪-国外电子元器件2008,16(11) 介绍了一种基于C8051F020单片机的多路压力测量仪.该测量仪选用电阻应变式压力传感器采集压力信号,并经放大电路处理后送入C8051F020单片机,再由C8051F020单片机内部的A/D转换器将采集到的压力信号进行模数转化,然后分别对数据进行存储和显示.该测量仪能测量6路压力信号,并且各测量点都能单独检测和设置.由于采用了C8051F020单片机,简化了硬件电路,增强了抗干扰能力,使得测量仪具有测量精度高,冲击小等特点. 9.学位论文刘新月压力传感器温度漂移补偿的电路设计2006 压阻型扩散硅压力传感器以其低价格得到广泛应用,基于单片机技术的智能压力传感器以其使用方便,测量精确高而得以推广。

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

基于51单片机控制的电子秤设计与实现--update

基于51单片机的可穿戴式电子秤设计与实现 作者翟成英指导老师徐冬寅 【摘要】本设计以51单片机模块设计、A/D转换模块、传感器为核心部份,实现人体尺度的基本系统的硬件部分包括数据采集与处理模块、CPU控制模块、液晶显示模块、电源模块。数据采集及处理模块由称重传感器,放大电路和A/D转换电路组成,本设计采用的是HX711集成芯片。CPU控制模块主要外部扩展电路;液晶屏显示模块。可以直接在显示屏上显示,非常人性化;无线传输模块采用FBT06_V2进行数据的发送与接收。系统电源使用220V进行降压处理所得正常工作电源。本智能秤平衡系统的设计,显示器可以拿在手上读数据,用户不要低头看体重。使用方便,具有一定的开发价值。 【关键词】 51单片机;传感器;A/D转换模块 Wearable wireless weight measurement instrument research and implementation 【Abstract】The design system microcontroller to STM8S003F3P6 to control the core hardware part of the basic system of the human scale, including data acquisition and processing module, CPU control module, wireless transmission module and LCD touch screen display module, clock module, power supply module and five. Data acquisition module by the load cell amplification circuit and A / D conversion circuit, the design is the HX711 integrated chip. CPU control module including STM8S003F3P6 and external expansion circuit; LCD touch screen display module for touch color display, intuitive display that was the historical weight value on the display, and can be directly related to the operation, is very user-friendly 。System power 220V-buck treating the resulting work properly power.The intelligent wireless body scale system uses a split design, you can display in your hand to read the data, users do not have to look down at the weight. users to be able to clearly see the changes in their weight, easy to use, has a certain value for development. 【Keywords: hotel】stc89c51;single chip;

C51单片机指令集大全

格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1 ADD A,@Ri 累加器加内部RAM单元 1 1 ADD A, direct 累加器加直接寻址单元 2 1 ADD A, #data 累加器加立即数 2 1 ADDC A, Rn 累加器加寄存器和进位标志 1 1 ADDC A,@Ri 累加器加内部RAM单元和进位标志 1 1 ADDC A, #data 累加器加立即数和进位标志 2 1 ADDC A, direct 累加器加直接寻址单元和进位标志 2 1 INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1

51单片机常用数码管显示程序

51单片机常用数码管显示程序---之汇编篇 2010-07-21 03:35:46| 分类:单片机| 标签:51单片机数码管汇编程序|字号大中小订阅一)显示数据缓存寄存器70H,71H,72H,73H,74H,75H,76H,77H。 START: MOV 70H,#1 MOV 71H,#2 MOV 72H,#3 MOV 73H,#4 MOV 74H,#5 MOV 75H,#6 MOV 76H,#7 MOV 77H,#8 ACALL DISP AJMP START DISP: MOV R1,#70H MOV R5,#0FEH PLAY: MOV P0,#0FFH MOV A,R5 ANL P2,A

MOV A,@R1 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A LCALL DL1MS INC R1 MOV A,P2 JNB ACC.7,ENDOUT RL A MOV R5,A MOV P2,#0FFH AJMP PLAY ENDOUT: MOV P2,#0FFH MOV P0,#0FFH RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;共阳数码管 ; 1MS延时子程序,LED显示用 DL1MS: MOV R6,#14H ; DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET END 二)

START:;ORG 00H MOV 70H,#0C0H;0 MOV 71H,#0F9H;1 MOV 72H,#0A4H;2 MOV 73H,#0B0H;3 MOV 74H,#99H ;4 MOV 75H,#92H ;5 MOV 76H,#82H ;6 MOV 77H,#0F8H;7 ACALL DISP AJMP START DISP: MOV P0,70H CLR P2.7 ACALL DL1MS SETB P2.7 MOV P0,71H CLR P2.6 ACALL DL1MS SETB P2.6 MOV P0,72H CLR P2.5 ACALL DL1MS SETB P2.5 MOV P0,73H CLR P2.4 ACALL DL1MS SETB P2.4 MOV P0,74H CLR P2.3 ACALL DL1MS SETB P2.3 MOV P0,75H CLR P2.2 ACALL DL1MS SETB P2.2 MOV P0,76H CLR P2.1 ACALL DL1MS SETB P2.1 MOV P0,77H CLR P2.0 ACALL DL1MS SETB P2.0 RET

51单片机中断程序大全

//实例42 :用定时器TO查询方式P2 口8位控制LED闪烁#include // 包含 51 单片机寄存器定义的头文件/************************************************************** 函数功能:主函数 void main(void) { // EA=1; // 开总中断 // ETO=1; // 定时器 TO 中断允许 TMOD=OxO1; // 使用定时器 TO 的模式 1 THO=(65536-46O83)/256; // 定时器 TO 的高 8 位赋初值 TLO=(65536-46O83)%256; // 定时器 TO 的高 8 位赋初值 TRO=1; // 启动定时器 TO TFO=O; P2=Oxff; while(1)// 无限循环等待查询 { while(TFO==O) TFO=O; P2=~P2; THO=(65536-46O83)/256; // 定时器 TO 的高 8 位赋初值

TL0=(65536-46083)%256; // 定时器 T0 的高 8 位赋初值 } // 实例43 :用定时器T1 查询方式控制单片机发出1KHz 音频#include // 包含 51 单片机寄存器定义的头文件 sbit sou nd=P3^7; // 将 sound 位定义为 P3.7 引脚 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { // EA=1; // 开总中断 // ET0=1; // 定时器 T0 中断允许 TMOD=0x10; // 使用定时器 T1 的模式 1 TH1=(65536-921)/256; // 定时器 T1 的高 8 位赋初值 TL1=(65536-921)%256; // 定时器 T1 的高 8 位赋初值 TR1=1; // 启动定时器 T1 TF1=0; while(1)// 无限循环等待查询 {

小只推荐:51单片机知识大汇总看你了解有多少

小只推荐:51单片机知识大汇总看你了解有多少 基于51单片机的函数信号发生器利用单片机AT89C52 采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A 转换器DAC0832 将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生10Hz—10kHz 的波形。下面就对51单片机进行详细论述。 ? ?1.取指译码执行模型:首先我们来看看单片机是如何工作的,我们拿电脑的主板来作为对比,我们买电脑时,总是追求处理器的主频。处理器的工作原理是从存储器上取出一条指令,然后对指令译码,译码完后执行。然后取下一条指令,译码,执行。它为什幺能这幺有序的工作?是因为它有一个工作时钟,在这个工作时钟的统一管理下,处理器有序的工作,这里的主频就是工作时钟的速度,当然,现在你可能也知道主频越高,取指译码速度越快,性能越好。那幺你可能会问,这跟51单片机有什幺关系,OK,切入正题,单片机的工作也是这个原理,从存储器上取指,译码,执行。但是单片机的存储器在哪?在单片机的内部,对于电脑来说,是把处理器,内存集中在一块主板上。而现在你应该很明确,对于单片机它就相当于一块电脑主板,把处理器,存储器集中到一块芯片内部。从这个宏观的角度看,所有的单片机是不是都是一个原理,服从于取指,译码,执行的基本模型。OK,继续…… 2. 51单片机的外设:我们在学习单片机时,所做的第一个实验都是一样的,点灯。也许你已经学会了用单片机做出好看的花样灯,或者用单片机驱动数码管显示出数字或字母。或者可以检测按键了。不错,我们仔细想想这些是什幺,无非,你就是控制那一排排引脚输出高低电平,我们称这些引脚叫I/O口,输入输出,按键是输入,点灯是输出。其实你以为你学了三样东

(完整word版)基于51单片机的智能电子秤--开题报告

南京理工大学泰州科技学院 毕业设计(论文)开题报告 学生姓名:XXX 学号:XXX 专业:电气工程及其自动化 设计(论文)题目:智能电子秤的设计 指导教师:XX 2010 年1月 6日

开题报告填写要求 1.开题报告(含“文献综述”)作为毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一。此报告应在指导教师指导下,由学生在毕业设计(论文)工作前期内完成,经指导教师签署意见及所在专业审查后生效; 2.开题报告内容必须用黑墨水笔工整书写或按教务处统一设计的电子文档标准格式(可从教务处网页上下载)打印,禁止打印在其它纸上后剪贴,完成后应及时交给指导教师签署意见; 3.“文献综述”应按论文的格式成文,并直接书写(或打印)在本开题报告第一栏目内,学生写文献综述的参考文献应不少于15篇(不包括辞典、手册); 4.有关年月日等日期的填写,应当按照国标GB/T 7408—94《数据元和交换格式、信息交换、日期和时间表示法》规定的要求,一律用阿拉伯数字书写。如“2008年3月15日”或“2008-03-15”。

毕业设计(论文)开题报告 1.结合毕业设计(论文)课题情况,根据所查阅的文献资料,每人撰写2000字左右的文献综述: 文献综述 摘要本设计系统以单片机AT89C51为控制核心,实现电子秤的基本控制功能。在设计系统时,为了更好地采用模块化设计法,分步设计了各个单元功能模块。 系统的硬件部分包括最小系统部分、数据采集部分、人机交互界面和系统电源四大部分。最小系统部分主要包括AT89C51和扩展的外部数据存储器;数据采集部分由称重传感器,信号的前期处理和A/D转换部分组成,包括运算放大器ADC0832和双通道A/D转换;人机界面部分为键盘输入,四位LED数码显示器,可以直观的显示重量的具体数字以及方便的输入数据,使用方便;系统电源以LM317和LM337为核心设计电路以提供系统正常工作电源。 系统的软件部分应用单片机C语言进行编程,实现了该设计的全部控制功能。该电子秤可以实现基本的称重功能(称重范围为0~9.999Kg,重量误差不大于±0.005Kg),可以设置日期和设定商品的单价,还具有超量程和欠量程的报警功能。 本系统设计结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。 关键词单片机A/D转换数据处理 1. 电子秤概述 称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。因此,称重技术的研究和衡器工业的发展各国都非常重视。 我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。我国电子衡器的技术装备和检测试验手段基本达到国际水平。电子衡器制造技术及应用得到

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

相关文档
最新文档