数显温度及报警系统 (单片机原理)有能力的帮做份吧过了有重谢!

数显温度及报警系统 (单片机原理)有能力的帮做份吧过了有重谢!,第1张

第二阶段 温度变送器的应用

一、实习内容和要求:

1、 采用Pt100热电阻作为温度传感器,测量范围为0~200度;

2、 设计热电阻传感器的测量转换电路、信号放大电路;

3、 设计仪烂亮猛表供电电路,已知外部输入的电源为24V直流电源;

4、 搭建8051单片机最小系统、LM032L液晶显示、基本按键输入电路;

5、 基于AD1674芯片开发A/D转换电路,正确连接AD1674与8051,实现热电阻转换后的信号采集;

6、 采用D/A转换芯片DAC1230实现4~20mA的信饥桥号输出;

7、 编写程序代码,实现热电键岁阻信号采集、仪表信号输出、测量值显示、仪表必须的参数设置等智能仪表的基本功能。

二:温度变送器的设计程序:

#include<REG52.h>

#include<stdio.h>

#include<intrins.h>

/* ---------------*/

sbit ADC_STS=P1^0

sbit ADC_CS=P1^1

sbit ADC_A0=P1^2

sbit ADC_CE=P1^3

sbit ADC_RC=P1^4

sbit L_RS=P1^5

sbit L_RW=P1^6

sbit L_E=P1^7

sbit DAC_CS=P3^0

sbit DAC_WR=P3^1

sbit DAC_XFER=P3^2

float ADC_data

/*----------------*/

void delay(void)

{

unsigned int j,k

for(j=20j>0j--)

for(k=200k>0k--)

}

/* --------ADC--------*/

void ADC_C( void)

{

P0=0xff

DAC_CS=1

_nop_()

ADC_CE=0

ADC_CS=1

ADC_RC=1

ADC_A0=1

_nop_()

ADC_CS=0

_nop_()

ADC_RC=0

_nop_()

ADC_CE=1

_nop_()

ADC_CE=0

ADC_CS=1

ADC_RC=1

}

void ADC_R(void)

{ ADC_CS=0

_nop_()

ADC_A0=0

_nop_()

ADC_RC=1

_nop_()

ADC_CE=1

_nop_()

ADC_data=P0

}

/* ------LCD-------*/

void LCD_init(void)

{ ADC_CS=1

_nop_()

P2=0x38

L_RS=1L_RW=1L_E=0

_nop_()

L_RS=0L_RW=0

_nop_()

L_E=1

_nop_()

L_E=0

delay()

L_RS=1L_RW=1P2=0x0e

_nop_()

L_RS=0L_RW=0

_nop_()

L_E=1

_nop_()

L_E=0

delay()

L_RS=1L_RW=1_nop_()

}

void LCD_display(unsigned char L_data)

{ P2=L_data

L_RS=1L_RW=0

_nop_()

L_E=1

_nop_()

L_E=0

delay()

L_RS=1L_RW=1_nop_()

}

void LCD_clc(void)

{

P2=0x01

L_RS=1L_RW=1L_E=0

_nop_()

L_RS=0L_RW=0

_nop_()

L_E=1

_nop_()

L_E=0

delay()

L_RS=1L_RW=1

}

void LCD_shift(void)

{

P2=0xc0

L_RS=1L_RW=1L_E=0

_nop_()

L_RS=0L_RW=0

_nop_()

L_E=1

_nop_()

L_E=0

delay()

L_RS=1L_RW=1

}

/* ---DAC-------*/

void DAC(int DAC_data)

{ P2=DAC_data

DAC_CS=1

DAC_XFER=1

DAC_WR=1

_nop_()

DAC_CS=0

_nop_()

DAC_WR=0

delay()

DAC_WR=1

_nop_()

DAC_CS=1

_nop_()_nop_()

P2=0x00DAC_CS=0DAC_XFER=0

_nop_()

DAC_WR=0

delay()

DAC_WR=1

DAC_CS=1

}

/*------MAIN------*/

void main(void)

{ int length,t

unsigned char tt[]="TEMPRETURE"

while(1)

{ADC_C()

ADC_R()

//转换温度的程序,不太清楚。

LCD_init()

LCD_clc()

for(length=0length<15length++)

{LCD_display(tt[length])}

LCD_shift()

DAC(t)

delay()

}

}

对应的电路图如下:

三、思考题

1、 仪表零点、量程如何调整?

2、 你所设计的仪表应该采用哪一种线制连接方式?

3、 考虑Pt100热电阻非线性补偿问题该如何处理,可能的同学请实现非线性补偿,测试补偿前后的变送器特性。

四、实习总结

图传不上去

最简单的方法是,你在U3输出后,再跟一个1倍的反相比例放大宏纯器,相位刚好反转过来举神,形成一个正电压。这里的蔽答咐运放也不用LF356,国内356很多假货,质量还不如TL082,082里面有两个运放单元,正好符合你的设计。

程序很简单的,关键在写程序的时候告雀祥要注意DAC0832的保持时间和转换速度。

建议你先弄个单缓冲或者直接控制岁晌的。

接着控制的会比较简单:

就是DAC8032

1,2,3,10,17,18脚GND。20,19,8脚VCC

能明白吧!程袜搏序自己写比较好,这样能学到更多东西

给你点参考,这个程序能让你对它的工作方式更熟悉!!

ORG

0000H

MAIN:MOV

A,P1

MOV

R0,A

设置高电平

MOV

R1,#00H

设置低电平

LCALL

BOXING

SJMP

MAIN

BOXING:

JNB

P1.0,SANJIAO

P1.0控制三角波的输出

JNB

P1.1,JUXING

P1.1控制矩形波的输出

JNB

P1.2,JUCHI

P1.2控制锯齿波的输出

RET

三角波

SANJIAO:

MOV

DPTR,#7FFFH

选中DA0832

MOV

A,#00H

UP1:

MOVX

@DPTR,A

向0832输出数据

INC

A

JNZ

UP1

A=!0

跳转反之顺序执行

DOWN1:DEC

A

MOVX

@DPTR,A

JNZ

DOWN1

RET

矩形波

JUXING:

MOV

DPTR,#7FFFH

LP:MOV

A,R0

设置输出上限

MOVX

@DPTR,A

LCALL

DEL_H

调高电平延时程序

MOV

A,R1

MOVX

@DPTR,A

LCALL

DEL_L

调低电平延时程序

RET

锯齿波

JUCHI:

MOV

DPTR,#7FFFH

MOV

A,#00H

LOOP:MOVX

@DPTR,A

INC

A

SJMP

LOOP

RET

延时程序

DEL_H:

高电平

MOV

R7,#250

DE:MOV

R6,#4

DJNZ

R6,$

DJNZ

R7,DE

RET

DEL_L:

低电平

MOV

R7,#250

DEL:MOV

R6,#4

DJNZ

R6,$

DJNZ

R7,DE

RET

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12363197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存