温度采集控制汇编程序

合集下载

温度采集程序

温度采集程序
工业用水
考虑工业区的分布和各行业用水需求,合理规划工业 用水量。
公共设施用水
为满足城市公共设施(如公园、道路绿化等)的用水 需求,需进行合理规划。
水源选择与保护
当地水源
01
优先利用当地的水源,如河流、湖泊、地下水等。
水质保障
02
确保水源水质符合国家饮用水标准,采取有效措施保护水源地

水量保障
03
根据城市用水需求,确保水源的水量充足,并制定应急供水方
某市排水系统设计案例
总结词
环保、科学、实用
详细描述
该市排水系统设计以环境保护为首要目标,采用了科学合理的设计方案,确保了排水系统的实用性和 环保性。同时,该设计注重与城市规划的协调,提高了城市的整体环境质量。
某市供排水一体化设计案例
总结词
整合、优化、前瞻
详细描述
该市供排水一体化设计将供水与排水系统进行整合,优化了 系统资源配置,提高了系统的运行效率。同时,该设计具有 前瞻性,充分考虑了城市未来发展的需求,为城市的可持续 发展提供了有力保障。
加强科技创新与研发
鼓励研发新技术、新工艺,提高供排水系统的能效和环保性能。
促进公众参与与合作
加强宣传教育,提高公众对供排水系统重要性的认识,促进社会各 界的合作与支持。
05
城市供水与排水系统设计案
例分析
某市供水系统设计案例
总结词
高效、安全、可持续
详细描述
该市供水系统设计采用了先进的水处理技术和设备,确保了供水的高效性和安全性。同时,设计注重可持续发展 ,合理利用水资源,减少了水资源的浪费。
污水排放标准与处理等级
国家排放标准
根据不同地区和行业,制定相应的污 水排放标准,限制污染物排放量。

单片机温度采集程序

单片机温度采集程序

-- ------ --- - …… 时 & 诫吠 --- -- ------- --单片机温度采集程序用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在—20度到+ 100度之间,用8位数码管显示出来。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:初始化时序、读时序、写时序。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。

DS18B20在完成一个读时序过程,至少需要60us才能完成。

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us 之间能够正确地采样IO总线上的“ 0 ”电平,当要写1时-- ------- -- --- 时 & 诫吠... ..... ... ... 序时,单总线被拉低之后,在15us之内就得释放单总线。

本程序实现温度的采集并且实时在数码管上显示出来。

具体程序如下:/* ---------------------------------------------名称:18B20温度传感器日期:2009.5修改:无内容:18B20单线温度检测的应用样例程序,请将18b20插紧,然后在数码管可以显示XX.XC,C表示摄氏度,如显示25.3C表示当前温度度----------------------------------------------- */#in clude<reg52.h> 〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#in clude<math.h>#i nclude<INTRINS.H>#defi ne uchar un sig ned char#defi ne uint un sig ned int;uint temp;uchar flag_get,co unt,num,minu te,sec ond;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数码管段码表共阳uchar str[6];void delay1(uchar MS);un sig ned int ReadTemperature(void);void In it_DS18B20(void);un sig ned char ReadO neChar(void); 25.3**************************************************************定义端口***************************************************************/ sbit seg 仁P2A0;sbit seg2=P2Al;sbit seg3=P2A2;sbit DQ=P1A3;//ds18b20 端口sfr dataled=0x80;〃显示数据端口/****************************************************************/* 全局变量*/ ****************************************************************************************************************************函数声明************************************************************** *//* /*-- ------ --- --- 时 & 诫吠 --- ---- ---- -----void Write On eChar( un sig ned char dat);void delay (un sig ned int i);/******************************************************************/ /* 主函数*//******************************************************************/ main (){un sig ned char TempH,TempL; TMOD|=0x01;〃定时器设置 TH0=0xef; TL0=0xf0; IE=0x82; TR0=1; P2=0x00; coun t=0; while(1) {str[5]=0x39;//显示 C 符号str[1]=tab[TempH/100]; // 十位温度 str[2]=tab[(TempH%100)/10]; // 十位温度str[3]=tab[(TempH%100)%10]|0x80; // 个位温度,带小数点 str[4]=tab[TempL]; if(flag_get==1)〃定时读取当前温度{temp=ReadTemperature(); if(temp&0x8000){str[O]=Ox4O;〃 负号标志 temp=~temp; // 取反加 1 temp +=1; } elsestr[O]=O; TempH=temp>>4; TempL=temp&0x0F;TempL=TempL*6/10;〃小数近似处理 flag_get=0; } } }/******************************************************************/************************************************************** 定时器中断*//*void tim(void) in terrupt 1 usi ng 1〃中断,用于数码管扫描和温度检测间隔{TH0=0xef;〃定时器重装值TL0=0xf0;nu m++;if (num==50){num=0;flag_get=1;〃标志位有效second++;if(seco nd>=60){sec on d=0;minu te++;}}coun t++;if(coun t==1){P2=0;dataled=str[0];}〃数码管扫描if(coun t==2){P2=1;dataled=str[1];}if(coun t==3){ P2=2;dataled=str[2];}if(coun t==4){ P2=3;dataled=str[3];}if(coun t==5){ P2=4;dataled=str[4];}if(coun t==6){ P2=5;dataled=str[5];coun t=0;}}/******************************************************************//* 延时函数*/ /******************************************************************/void delay(unsigned int i)〃延时函数{-- ------ --- --- 时 & 诫吠 --- ---- ---- ----- while(i--);}/******************************************************************//* 初始化*//******************************************************************/void Init_DS18B20(void){un sig ned char x=0;DQ = 1; 〃DQ 复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(10);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);} /******************************************************************//* 读一个字节*//******************************************************************/un sig ned char ReadO neChar(void){un sig ned char i=0;un sig ned char dat = 0;for (i=8;i>0;i--){DQ = 0; //给脉冲信号dat>>=1;DQ = 1; //给脉冲信号if(DQ)dat|=0x80;delay(5);}return(dat);}/****************************************************************/* 写一个字节*//****************************************************************void Write On eChar( un sig ned char dat) {un sig ned char i=0;for (i=8; i>0; i--).......... ……时 & 诫吠{DQ = 0;DQ = dat&OxO1;delay(5);DQ = 1;dat>>=1;}delay(5);} /******************************************************************/ /* 读取温度/******************************************************************/un sig ned int ReadTemperature(void){un sig ned char a=0;un sig ned int b=0;un sig ned int t=0;Ini t_DS18B20();Write On eChar(OxCC); II跳过读序号列号的操作WriteO neChar(0x44); II 启动温度转换delay(200);Ini t_DS18B20();Write On eChar(OxCC); II跳过读序号列号的操作WriteOneChar(OxBE); II读取温度寄存器等(共可读9个寄存器) a=Read On eChar(); 〃低位b=Read On eChar(); 〃高位b<<=8;t=a+b;return(t);}电路板设计部分如下*I 前两个就是温度--- ------ ---- ---- 晶彳......... .... —.. ... .图一单片机原理电路图----------------- -- 啪磊-------- -- ——- ------图三液晶显示原理图Sr 忖"GC122PF*CZJ*C2u3CQN3U180C51U 怙 HC573hzzDSLhzs2 h D U2j□S18B20图四pcd 版图。

ds8b20多路温度采集程序

ds8b20多路温度采集程序

本程序为ds18b20的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4路正负温度值,并有上下限温度报警(声音、灯光报警)。

亲测,更改端口即可使用。

(主要器件:51单片机,ds18b20,lcd显示器)附有proteus仿真图,及序列号采集程序/****上限62度下限-20度****/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit ds=P1^1;sbit rs=P1^4;sbit e=P1^6;sbit sp=P1^0;sbit d1=P1^2;sbit d2=P1^3;ucharlcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e} ,{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}};unsigned char code table0[]={"TEMPERARTURE:U "}; unsigned char code table1[]={"0123456789ABCDEF"};int f[4];int tvalue;float ftvalue;uint warnl=320;uint warnh=992;/****lcd程序****/void delayms(uint ms)//延时{uint i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}void wrcom(uchar com)//写指令{delayms(1);rs=0;P3=com;delayms(1);e=1;delayms(1);e=0;}void wrdat(uchar dat)//写数据{rs=1;e=0;P3=dat;delayms(5);e=1;delayms(5);e=0;}void lcdinit()//初始化lcd {delayms(15);wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x01);delayms(5); }void display(uchar *p)//显示{while(*p!='\0'){wrdat(*p);p++;delayms(1);}}displayinit()//初始化显示{lcdinit();wrcom(0x80);display(table0);}/****ds18b20程序****/ void dsrst()//ds18b20复位{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit dsrd0()//读一位数据{uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchar dsrd()//读1个字节数据{uchar i,j,dat;dat=0;for(i=8;i>0;i--){j=dsrd0();dat=(j<<7)|(dat>>1);}return(dat);}void dswr(uchar dat)//写数据{uint i;uchar j;bit testb;for(j=8;j>0;j--){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}void tmstart()//初始化ds18b20{sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc);dswr(0x44);}void read_dealtemp()//读取并处理温度{uchar i,j,t;uchar a,b;for(j=0;j<4;j++){dsrst();delayms(1);dswr(0x55);for(i=0;i<8;i++){dswr(lcdrom[j][i]);//发送64位序列号}dswr(0xbe);a=dsrd();b=dsrd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0){d1=1;tvalue=~tvalue+1;wrcom(0xc0);wrdat(0x2d);if(tvalue>warnl){d2=0;sp=0;}else{d2=1;sp=1;}}else{d2=1;wrcom(0xc0);wrdat(' ');if(tvalue>warnh){d1=0;sp=0;}else{d1=1;sp=1;}}if(j==0){wrcom(0x8e); wrdat('2');}if(j==1){wrcom(0x8e);wrdat('3');}if(j==2){wrcom(0x8e);wrdat('4');}if(j==3){wrcom(0x8e);wrdat('5');}ftvalue=tvalue*0.0625;tvalue=ftvalue*10+0.5;ftvalue=ftvalue+0.05;f[j]=tvalue;//温度扩大十倍,精确到一位小数tvalue=f[j];t=tvalue/1000;wrcom(0x80+0x41);wrdat(table1[t]);//显示百位t=tvalue%1000/100;wrdat(table1[t]);//显示十位t=tvalue%100/10;wrdat(table1[t]);//显示个位wrdat(0x2e); //显示小数点儿t=tvalue%10/1;wrdat(table1[t]);//显示小数位delayms(5000);}}/****主函数****/void main(){d1=1;d2=1;sp=1;displayinit();//初始化显示while(1){tmstart();//初始化read_dealtemp();//读取温度}}/****序列号读取程序****/#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DQ = P1^1; //温度传感器信号线sbit rs = P1^4; //LCD数据/命令选择端(H/L)位声明sbit lcden = P1^6; //LCD使能信号端位声明void delay(uint z); //延时函数void DS18B20_Reset(void); //DQ18B20复位,初始化函数bit DS18B20_Readbit(void); //读1位数据函数uchar DS18B20_ReadByte(void); //读1个字节数据函数void DS18B20_WriteByte(uchar dat); //向DQ18B20写一个字节数据函数void LCD_WriteCom(uchar com); //1602液晶命令写入函数void LCD_WriteData(uchar dat); //1602液晶数据写入函数void LCD_Init();//LCD初始化函数void Display18B20Rom(char Rom); //显示18B20序列号函数/**********************************************//* 主函数*//**********************************************/void main(){ uchar a,b,c,d,e,f,g,h;LCD_Init();DS18B20_Reset();delay(1);DS18B20_WriteByte(0x33);delay(1);a = DS18B20_ReadByte();b = DS18B20_ReadByte();c = DS18B20_ReadByte();d = DS18B20_ReadByte();e = DS18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte();LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);}/***************************************************//* 延时函数:void delay() *//* 功能:延时函数*//***************************************************/void delay(uint z)//延时函数{uint x,y;for( x = z; x > 0; x-- )for( y = 110; y > 0; y-- );}/***************************************************//* DS18B20函数:void DS18B20_Reset() *//* 功能:复位18B20 *//***************************************************/void DS18B20_Reset(void)//DQ18B20复位,初始化函数{uint i;DQ = 0;i = 103;while( i > 0 ) i--;DQ = 1;i = 4;while( i > 0 ) i--;}/***************************************************//* DS18B20函数:void DS18B20_Readbit() *//* 功能:读1个字节数据函数*//***************************************************/bit DS18B20_Readbit(void) //读1位数据函数{uint i;bit dat;DQ = 0;i++; //i++起延时作用DQ = 1;i++;i++;dat = DQ;i = 8;while( i > 0 )i--;return( dat );}/***************************************************//* DS18B20函数:void DS18B20_ReadByte() *//* 功能:读1个字节数据函数*//***************************************************/uchar DS18B20_ReadByte(void) //读1个字节数据函数{uchar i,j,dat;dat = 0;for( i = 1; i <= 8; i++ ){j = DS18B20_Readbit();dat = ( j << 7 ) | ( dat >> 1 );}return(dat);}/***************************************************//* DS18B20函数:void DS18B20_WriteByte() *//* 功能:向DQ18B20写一个字节数据函数*//***************************************************/void DS18B20_WriteByte(uchar dat) //向DQ18B20写一个字节数据函数{uint i;uchar j;bit testb;for( j=1; j<=8; j++){testb = dat&0x01;dat= dat>>1;if(testb) //写1{DQ = 0;i++;i++;DQ = 1;i = 8;while(i>0)i--; }else{DQ = 0; //写0 i = 8;while(i>0)i--; DQ = 1;i++;i++;}}}/* LCD函数:void LCD_WriteCom() *//* 功能:向LCD写入命令*//***********************************************/void LCD_WriteCom(uchar com){rs = 0;P3= com;delay(5);lcden = 0;delay(5);lcden = 1;delay(5);lcden = 0;}/***********************************************//* LCD函数:void LCD_WriteData(uchar dat) *//* 功能:向LCD写入数据*/void LCD_WriteData(uchar dat){rs = 1; //选择LCD为写入数据状态lcden = 0;P3= dat; //将待写入数据放到总线上delay(5);lcden = 1; //给LCD使能端一个脉冲delay(5); //信号将之前放到总线上lcden = 0; //的数据写入LCDdelay(5);}/***********************************************//* LCD函数:void LCD_Init() *//* 功能:初始化LCD,设定LCD的初始状态*/void LCD_Init(){LCD_WriteCom(0x38); //LCD显示模式设定delay(15);LCD_WriteCom(0x08); //关闭LCD显示delay(3);LCD_WriteCom(0x01); //LCD显示清屏delay(3);LCD_WriteCom(0x06); //设定光标地址指针为自动加1delay(3);LCD_WriteCom(0x0c); //打开LCD显示,但不显示光标}/**********************************************//* *//* 显示18B20序列号*//* *//**********************************************/void Display18B20Rom(char Rom){uchar h,l;l = Rom & 0x0f; //取低4位h = Rom & 0xf0; //取高4位h >>= 4;if( ( h >= 0x00 )&&( h <= 0x09 ) )LCD_WriteData(h+0x30);//取ASCII码elseLCD_WriteData(h+0x37);//取ASCII码if( ( l >= 0x00 )&&( l <= 0x09 ) )LCD_WriteData(l+0x30);//取ASCII码elseLCD_WriteData(l+0x37);//取ASCII码}。

温度采集与显示设计程序详解

温度采集与显示设计程序详解

温度采集与显示设计程序详解程序流程如下:1.初始化温度传感器:连接温度传感器至控制器,并进行初始化。

这包括设置传感器接口和模式,设置精度等。

2.采集温度数据:通过温度传感器读取环境温度数据,并将其存储在变量中。

3.数据处理:对采集到的温度数据进行一定的处理,例如进行单位转换、滤波处理等。

4.数据显示:将处理后的温度数据通过显示器显示出来。

可以使用LCD液晶显示器、LED数码管、数码管等不同的显示器设备。

5.重复采集与显示:循环执行步骤2-4,以实现实时监测和显示环境温度。

实现细节如下:1. 初始化温度传感器:根据具体采用的温度传感器型号和接口类型,选择相应的初始化函数进行初始化。

例如,如果使用OneWire接口的DS18B20温度传感器,可以使用Arduino库中的OneWire库进行初始化。

2.采集温度数据:通过读取温度传感器的输出,可以获取到环境温度的原始数据。

具体的采集方法和代码取决于所采用的传感器和控制器类型。

3.数据处理:在采集到的温度数据上进行一定的处理,以满足实际需求。

例如,对于DS18B20传感器输出的12位数据,可以通过位运算进行小数点处理,从而得到实际的温度值。

4. 数据显示:根据设计需求选择相应的显示器设备,并使用相应的显示库函数将处理后的温度数据显示出来。

例如,使用LiquidCrystal库操作LCD液晶显示器进行显示。

5. 重复采集与显示:使用循环语句,如while循环,不断执行数据采集和显示的步骤,以实现实时监测和显示环境温度。

可以根据实际需求设置采集和显示的时间间隔。

总结:温度采集与显示设计主要包括温度传感器的初始化、温度数据的采集、数据的处理和显示器的选择与操作。

通过合理的程序设计和选择适合的硬件设备,可以实现实时监测和显示环境温度。

具体的实现细节和程序代码取决于具体的传感器和控制器类型,以及所采用的显示器设备。

proteus读取温度采集程序代码

proteus读取温度采集程序代码

proteus读取温度采集程序代码一、前言Proteus是一款常用的电路仿真软件,能够帮助用户快速验证电路设计的正确性。

在实际的电路设计过程中,温度采集是一个非常重要的环节,因此需要掌握如何在Proteus中读取温度采集程序代码。

二、温度采集程序代码简介温度采集程序代码是指用于读取温度传感器数据并进行处理的程序代码。

通常情况下,该代码会使用模拟输入输出(A/D)转换器将模拟信号转换为数字信号,并通过串口或USB接口将数据传输到计算机上。

三、Proteus中读取温度采集程序代码的步骤1. 打开Proteus软件,并创建一个新项目。

2. 在工具栏上选择“库管理器”,然后选择“添加库”。

3. 在弹出的对话框中选择“Arduino”库,并点击“确定”按钮。

4. 在工具栏上选择“元件模式”,然后从Arduino库中选择一个适合的板子。

5. 从左侧面板中找到并添加一个LM35温度传感器元件。

6. 连接LM35传感器与Arduino板子,并设置相应的引脚连接方式。

7. 打开Arduino IDE软件,在新建文件中编写温度采集程序代码。

8. 将编写好的程序代码上传到Arduino板子中。

9. 在Proteus软件中点击“运行”按钮,即可读取温度采集程序代码并验证其正确性。

四、LM35温度传感器元件简介LM35是一种常用的模拟温度传感器,能够将环境温度转换为电压信号输出。

其输出电压与摄氏温度呈线性关系,每摄氏度变化对应10mV的电压变化。

可以通过读取LM35传感器输出的电压值来计算环境温度。

五、Arduino IDE编写温度采集程序代码以下是一个简单的LM35温度采集程序代码示例:```void setup(){Serial.begin(9600); // 初始化串口通信}void loop(){float voltage, temperature;int sensorValue = analogRead(A0); // 读取A0引脚模拟输入值 voltage = sensorValue * (5.0 / 1023.0); // 将模拟值转换为电压值(5V参考电压)temperature = (voltage - 0.5) * 100; // 计算环境温度(单位:摄氏度)Serial.print("Temperature: ");Serial.print(temperature);Serial.println("C");}```该程序代码实现了读取LM35传感器数据并计算环境温度的功能,并通过串口通信方式将数据传输到计算机上。

基于汇编语言的八路温度采集

基于汇编语言的八路温度采集

2 仿真设计
Proteus 是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟 模型仿真软件三合一的设计平台,本设计基于 Proteus 仿真软件使用 8051 单片机处理。原理图如图 1: 参考文献: [1] 李桢桢 . 浅谈单片机汇编程序的编写技巧 [J]. 华章 ,2014(16). [2] 赵义强 , 康静 , 郭向亮 .Proteus 仿真软件在单片机设计中的应用 [J]. 济南职业学院学报 ,2007(01):58-61. [3] 刘文光 , 张铭铭 . 单片机扩展 8255 控制 LED 数码管动态显示仿真 教学 [J]. 济南职业学院学报 ,2013(01):82-84.
1 程序设计
主 程 序 代 码 如 下:MAIN: MOV P1,#0FFH MOV WHZ,#0FFH MOV WLZ,#00H ; 最高最低温度值初始值设置 MOV CLOCK,#0; 定 时初值设置 MOV DPTR,#7FFFH ;8255A 控制口地址 MOV A,#89H ;8255 控 制 字,PA 为 输 出,PB 为 输 出,PC 口 为 输 入 MOVX @ DPTR,A MOV TMOD,#01H; 定时器 0 工作于方式 1MOV TL0,#0B0H MOV TH0,#3CH; 设 定 时 时 间 为 0.05 秒, 定 时 20 次 则 一 秒 MOV TCON,#15H; 对中断进行设置 MOV IE,#87H MOV R1,#RESD MOV R2,#2H MOV R7,#8H MOV 52H,#0F7H MOV 53H,#0BFH。 1.1 测温功能设计 本设计的测量分辨率为 0.5℃,温度由 0-5V 电压信号模拟,每个 通道每隔 1S 采集 1 次。为了达到对应的分辨率,我们采用相应的数 据转化模块,主要程序代码如下:D_1: CLR C MOV A,R4 SUBB A,#255 MOV R4,A MOV A,R6 SUBB A,#0 MOV R6,A JC D_RET INC R3 SJMP D_1 双字节除单字节循环转化。模拟电压信号的采集 主要包括两部分代码如下:MOV DPL,52H MOV DPH,53H MOVX @ DPTR,A RET ;AD 采集模块 MOV DPL,52H MOV DPH,53H MOVX A,@DPTR MOV @R1,A ; 送转化结果。时间的间隔采用定时器处理, 中断采用软时钟。 1.2 显示功能 可以循环显示每一路的温度值,每一路显示 1S;可以固定显示 某一路的温度值。本设计是基于 8255 的动态显示程序,数码管显示 需要显示三位数据,主要包括 BCD 码转化和双字节减法算法和循环 显示。MOV ZHE,R3 MOV A,ZHE MOV B,#100 DIV AB MOV GA,A MOV A,B MOV B,#10 DIV AB MOV ZHO,A; 对 应 十 位 MOV DI,B; 对应个位 MOV A,ZHE MOV B,#255 MUL AB MOV ZHGO,B MOV ZHDI,A ;BCD 码转化程序设计 CLR C MOV A,CHAO SUBB A,ZHGO MOV A,CHDI SUBB A,ZHDI MOV B,#25 DIV AB MOV XIA,A; 对应小 数 RET; 双字节减法求余数。XIAOSHUXIANSHI: MOV DPTR,#TAB1 MOV A,@R0 MOVC A,@A+DPTR MOV DPTR,#7FFCH MOVX @

最新51单片机的多路温度采集控制系统设计汇总

最新51单片机的多路温度采集控制系统设计汇总

51单片机的多路温度采集控制系统设计基于51单片机的多路温度采集控制系统设计言:随着现代信息技术的飞速发展,温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以温度采集控制系统的设计与研究有十分重要的意义。

本次设计的目的在于学习基于51单片机的多路温度采集控制系统设计的基本流程。

本设计采用单片机作为数据处理与控制单元,为了进行数据处理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。

单片机数据处理之后,发出控制信息改变报警和控制执行模块的状态,同时将当前温度信息发送到LED进行显示。

本系统可以实现多路温度信号采集与显示,可以使用按键来设置温度限定值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和继电器的目的。

我所采用的控制芯片为AT89c51,此芯片功能较为强大,能够满足设计要求。

通过对电路的设计,对芯片的外围扩展,来达到对某一车间温度的控制和调节功能。

关键词:温度多路温度采集驱动电路正文:1、温度控制器电路设计本电路由89C51单片机温度传感器、模数转换器ADC0809、窜入并出移位寄存器74LS164、数码管、和LED显示电路等组成。

由热敏电阻温度传感器测量环境温度,将其电压值送入ADC0809的IN0通道进行模数转换,转换所得的数字量由数据端D7-D0输出到89C51的P0口,经软件处理后将测量的温度值经单片机的RXD端窜行输出到74LS164,经74LS164 窜并转换后,输出到数码管的7个显示段,用数字形式显示出当前的温度值。

89C51的P2.0、P2.1、P2.2分别接入ADC0809通道地址选择端A、B、C,因此ADC0809的IN0通道的地址为F0FFH。

输出驱动控制信号由p1.0输出,4个LED 为状态指示,其中,LED1为输出驱动指示,LED2为温度正常指示,LED3为高于上限温度指示,LED4为低于下限温度指示。

温度采集计算子程序

温度采集计算子程序

温度采集计算子程序DS18B20 内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

温度采集计算子程序如图4-3所示:图4-3 温度采集计算子程序流程图DS18B20工作过程一般遵循以下协议:初始化——ROM操作命令——存储器操作命令——处理数据(1)初始化单总线上的所有处理均从初始化序列开始。

初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。

存在脉冲让总线控制器知道DS1820 在总线上且已准备好操作。

(2)ROM操作命令Read ROM(读ROM)[33H]Match ROM( 符合ROM)[55H]Skip ROM( 跳过ROM )[CCH]Search ROM( 搜索ROM)[F0H]Alarm Search(告警搜索)[ECH](3)存储器操作命令Write Scratchpad(写暂存存储器)[4EH]Read Scratchpad(读暂存存储器)[BEH]Copy Scratchpad(复制暂存存储器)[48H]Convert T(温度变换)[44H]Recall E2(重新调整E2)[B8H]Read Power Supply(读电源)[B4H](4)处理数据DS18B20的高速暂存存储器由9个字节组成,其分配如表3-2所示。

当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

上表是DS18B20温度采集转化后得到的12位数据存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;-------------------------------------------------------------- ;设定地址 ;-------------------------------------------------------------- AD0809IN0 EQU 0CFA0H DA0832 EQU 0CFA8H CON8279 EQU 0CFE9H DATA8279 EQU 0CFE8H ;--------------------------------------------------------------------------- ;起始阈值 ;--------------------------------------------------------------------------- ORG 0000H LJMP MAIN ORG 4100H MAIN: MOV R5,#30H ;设置起始阈值 MOV DPTR,#CON8279 ;8279命令口地址 MOV A,#0D1H ;清除8279RAM命令 MOVX @DPTR,A WAIT: MOVX A,@DPTR ;判断 JB ACC.7,WAIT ;等待清除完成,DU=0 ;-------------------------------------------------------------------------------------- ;采集电压转化为数字量 ;--------------------------------------------------------------------------------------- START: MOV DPTR,#AD0809IN0 ;采样 MOV A,#00H ;启动A/D MOVX @DPTR,A MOV R7,#0FFH LOOP1: DJNZ R7,LOOP1 ;延时等待AD转换完成 MOVX A,@DPTR MOV R6,A ;保存温度值 TRANS: MOV A,R6 ;温度转换 CLR C SUBB A,#53H ;计算偏移地址-10度 LCALL TAB ;取伪温度植 MOV R6,A ;--------------------------------------------------------------------------------- ;温度显示 ;--------------------------------------------------------------------------------- LED1: MOV A,R6 ;显示当前温度 SWAP A ;高低字节交换 ANL A,#0FH MOV 50H,A MOV A,R6 ANL A,#0FH MOV 51H,A LOOP: MOV DPTR,#CON8279 MOV A,#90H MOVX @DPTR,A MOV R0,#50H MOV R1,#02H MOV DPTR,#DATA8279 DL0: MOV A,@R0 ACALL TABLE MOVX @DPTR,A INC R0 DJNZ R1,DL0 LCALL DEL1 ;显示完温度 ;------------------------------------------------------------------------------------ ;按键检测 ;------------------------------------------------------------------------------------ MOV DPTR,#CON8279 ;检查是否有键按下 MOVX A,@DPTR ANL A,#0FH JZ FUN2 ;无键按下 MOV A,#0A0H ;有键按下 MOVX @DPTR,A MOV A,#40H ;40H读RAM MOVX @DPTR,A MOV DPTR,#DATA8279 MOVX A,@DPTR MOV R4,A CJNE A,#0C0H,FUN1 INC R5 ;阈值加一 CJNE R5,#1AH,DJUST1 ;矫正1A为20 MOV R5,#20H DJUST1: CJNE R5,#2AH,FUN2 ;矫正2A为30 MOV R5,#30H LJMP FUN2 FUN1: CJNE A,#0C1H,FUN2 DEC R5 CJNE R5,#2FH,DJUST2 ;矫正2F为29 MOV R5,#29H DJUST2: CJNE R5,#1FH,FUN2 ;矫正1F为19 MOV R5,#19H LJMP FUN2

;------------------------------------------------------------------------------- ;比较阈值,改变转速 ;----------------------------------------------------------------------------------- FUN2: MOV A,R6 ;取温度。比较阈值 MOV 54H,R5 SUBB A,54H JC FUN4 ;c=1小于阈值 FANS1: MOV R7,#00H ;快转 MOV A,R7 LCALL DAZH LJMP LED2 FUN4: MOV R7,#0FFH ;慢转 MOV A,R7 LCALL DAZH LED2: MOV A,R5 ;显示阈值 SWAP A ANL A,#0FH MOV 52H,A MOV A,R5 ANL A,#0FH MOV 53H,A LOOP2: MOV DPTR,#CON8279 MOV A,#94H MOVX @DPTR,A MOV R0,#52H MOV R1,#02H MOV DPTR,#DATA8279 DL1: MOV A,@R0 ACALL TABLE MOVX @DPTR,A INC R0 DJNZ R1,DL1 ;阈值显示完毕 LCALL DEL1 稳定 LJMP START ;重新开始 ;-------------------------------------------------------------------------------- ;延时函数 ;-------------------------------------------------------------------------------- DEL1: MOV R2,#80H DEL2: MOV R3,#0FFH DEL3: DJNZ R3,DEL3 DJNZ R2,DEL2 RET

;--------------------------------------------------------------------------------------- ;数摸转换 ;--------------------------------------------------------------------------------------- DAZH: MOV DPTR,#DA0832 MOVX @DPTR,A ;写DA输入寄存器 INC DPTR ;指向DAC寄存器 MOVX @DPTR,A ;启动转换 RET ;-------------------------------------------------------------------------------------- ;断码表 ;-------------------------------------------------------------------------------------- TABLE: INC A ;数码管显码转换 MOVC A,@A+PC RET DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H

TAB: INC A ;温度转换 MOVC A,@A+PC RET DB 10H,10H,10H,11H,11H,12H,12H,13H,13H DB 13H,14H,14H,15H,15H,15H,16H,16H,16H DB 17H,17H,17H,18H,18H,18H,19H,19H,19H, DB 19H,19H,20H,20H,20H,21H,21H,21H,21H DB 22H,22H,23H,23H,23H,24H,24H,24H,25H DB 25H,25H,26H,26H,26H,27H,27H,27H,28H DB 28H,28H,29H,29H,29H,30H,30H,30H,31H DB 31H,31H,32H,32H,32H,33H,33H,33H,34H DB 34H,34H,35H,35H,35H,36H,36H,36H,37H DB 37H,37H,38H,38H,38H,39H,39H,39H,40H DB 40H,40H END

相关文档
最新文档