基于labview的温度采集系统 - 图文(7)

2019-04-22 11:51

河南师范大学本科毕业论文(设计)

附录三 元器件清单 名称 型号 备注 数量 在原理图上的标号 AVR单片机 Atmega16 1 固态继电器 GTJ24-2A 1 温度传感器 DS18B20 1 晶体振荡器 7.3728MHz 1 瓷片电容 30pF 2 电解电容 25V/10uF 4 排插 2x5 2 排插底座 2x5 1 插针底座 1x3 1 排线 1x3 1 插针 1x2 1 音频头 1 接线柱 1x2 2 铜柱 8 排线 1排6根 1 串口头 DB9 公头 1 水泥电阻 8W2K2 3 铜板 万用板 1

30

河南师范大学本科毕业论文(设计)

附录四 单片机程序

下位机程序 主程序

#include

/*包含相关头文件*/

#include #include #include \#include \#include \#include \#define OCR OCR1A

//全局变量声明

unsigned char Temp_H,Temp_L; //主函数 void main(void) {

float temp,a,b,c=0;

int middle,j,k,l; unsigned char f_to_p;

unsigned int i;

unsigned char t[6]; unsigned char *p; unsigned char tmp=0; Temp_H = 0;

Temp_L = 0; port_init(); pwm_init(); OCR=0;

port_1820(); Uart_Init();

//温度高位,低位,复位成功标志 //用于暂存读回的16位温度值 //用于存温度数值及单位 //端口初始化 //pwm初始化 //DS18B20对应单片机端口初始化 //波特率9600 初始化串口

31

河南师范大学本科毕业论文(设计)

while (1) {

for(k=0;k<=9;k++) {

ds1820_reset(); ds1820_start(); longdelay(); longdelay();

//读取温度数值,读得的温度值为16位

//复位D18B20 //启动一次转换

//等待转换结束

i = ds1820_read_temp(); //用于调试的原始温度数据

//i=0x07d0; //当温度为125oC时的i值

//i=0xff5e; //负10.125度 //i=0xfebe; //负20.125度 //i=0x0191; //正25.0625度 //i=0x0550; //正85度

if(i&0x8000) //判断温度正负 {

/温度为负时

//一个字长的温度值转换成两个字节,分別放在Temp_L,Temp_H中

Temp_L=(char)(i&0x00ff); //取i中的低8位 Temp_H=(char)((i&0xff00)>>8); //取i中的高8位

i=Temp_H; //高8位放回i中 i=(i<<8)|Temp_L; //低8位放回i中 temp=(float)(i*0.0625);

32

Temp_H = ~Temp_H; //负温度。取反加1 Temp_L = ~Temp_L;

asm(\ //清零进位位标志 Temp_L++; //温度低字节加1 if((SREG&0x01)!=0x01) //有进位吗? {

Temp_H++; //有进位,则温度高字节加1 }

河南师范大学本科毕业论文(设计)

middle=(int)(temp*100); //取整数带小数点后两位

t[0]=middle/10000+0x30; t[1]=(middle000)/1000+0x30; t[2]=(middle00)/100+0x30;

t[3]=0x2e; //value_1[3]为小数点存放单元 t[4]=(middle0)/10+0x30; t[5]=(middle)+0x30;

Uart_Transmit(0x2d); for(j=0;j<=5;j++) {

Uart_Transmit(t[j]); }

Uart_Transmit(0x0d); }

else {

//溫度為正 temp=(float)(i*0.0625);

middle=(int)(temp*100); t[0]=middle/10000+0x30; t[1]=(middle000)/1000+0x30; t[2]=(middle00)/100+0x30;

t[3]=0x2e; t[4]=(middle0)/10+0x30; t[5]=(middle)+0x30;

Uart_Transmit(0x2b); for(j=0;j<=5;j++) {

Uart_Transmit(t[j]); }

Uart_Transmit(0x0d);

}

//取整数带小数点后两位 //value_1[3]为小数点存放单元 33

河南师范大学本科毕业论文(设计)

} }

DS18B20函数 #include #include

#define DQ_IN DDRA &= ~(1 << PA7) #define DQ_OUT #define DQ_CLR

DDRA |= (1 << PA7)

/*设置输入*/ /*设置输出*/ /*置高电平*/

Uart_Transmit(0x24); //和上位机握手 for(l=0;l<=4;l++) {

Uart_Receive(); a=UDR-0x30; b=a*pow(10,l-2); c+=b; }

OCR=(20*c); //根据PID输出的控制调节占空比

}

PORTA &= ~(1 << PA7) /*置低电平*/

/*读了电平*/ /*中断标志缓存*/

#define DQ_SET PORTA |= (1 << PA7) #define DQ_R PINA & (1 << PA7)

unsigned char flag;

/*DS18B20复位函数*/

unsigned char ds1820_reset(void) {

unsigned char i; flag = SREG; CLI(); DQ_OUT;

/*中断保护*/ /*关中断*/

34


基于labview的温度采集系统 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:采购业务行为准则

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: