c语言(温度测量)

合集下载

恒温控制算法 c语言版

恒温控制算法 c语言版

恒温控制算法c语言版全文共四篇示例,供读者参考第一篇示例:恒温控制算法是一种用于调节系统温度的智能控制算法。

该算法通过采集环境温度数据,并根据设定的目标温度进行计算,实现自动调节系统的输出控制信号,从而维持系统温度稳定在设定值附近。

在工业生产、实验室研究和家用电器等领域都广泛应用了恒温控制算法,以确保系统稳定性和高效性。

C语言是一种通用的编程语言,具有良好的可移植性和高效性。

在实际应用中,恒温控制算法通常会在嵌入式系统或工控系统中实现,而使用C语言编写程序是一种常见的选择。

下面我们将介绍一种基于C 语言的恒温控制算法实现方式。

我们需要定义一些基本的变量和常数。

我们需要设置目标温度值、温度传感器读取间隔、控制信号输出范围等。

接下来,我们将使用C语言编写一个基本的恒温控制算法框架,示例如下:```c#include <stdio.h>#include <stdlib.h>// 定义温度传感器读取间隔,单位为秒#define SENSOR_INTERVAL 1// 定义目标温度值#define TARGET_TEMPERATURE 25// 定义控制信号输出范围#define OUTPUT_MIN 0#define OUTPUT_MAX 100while(1) {// 读取温度传感器数据currentTemperature = readTemperatureSensor();// 计算控制信号outputSignal =calculateControlSignal(currentTemperature);// 等待传感器读取间隔delay(SENSOR_INTERVAL);}return 0;}int calculateControlSignal(int temperature) {// 根据当前温度和目标温度计算控制信号int error = TARGET_TEMPERATURE - temperature;int controlSignal = OUTPUT_MAX * error / TARGET_TEMPERATURE;return controlSignal;}void outputControlSignal(int signal) {// 输出控制信号,此处可与系统的执行机构进行通信实现控制printf("Control signal: %d\n", signal);}void delay(int seconds) {// 延时函数,单位为秒sleep(seconds);}```上述代码实现了一个简单的基于C语言的恒温控制算法。

c语言第03章

c语言第03章

活期存款一年后本息和为: p1=p0(1+r1) 一年期定期存款,一年后本息和为: p2=p0(1+r2) 两次半年定期存款,一年后本息和为:
r3 r3 p3 = p0(1 + )(1 + ) 2 2
6
3.1顺序程序设计举例

算法:
输入p0,r1,r2,r3的值 计算p1=p0(1+r1) 计算p2=p43; r 3 )
2 2
输出p1,p2,p3
7
3.1 顺序程序设计举例
#include <stdio.h> 定义变量同时赋予初值 int main ( ) {float p0=1000, r1=0.0036,r2=0.0225, r3=0.0198, p1, p2, p3; p1 = p0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(”%f\n%f\n%f\n”,p1, p2, p3); return 0; }
\„ \ddd \“ 单引号 例 void main() { printf(“Y\b=\n”);\xhh 3位8进制数代表的字符 aaa }
转义字符:反斜线后面跟一个字符或一个代码值表示
<
双引号 运行结果: 2位16进制数代表的字符 屏幕显示:= 15 打印机输出:¥
C语言程序设计
第3章 最简单的C程序设计
19
C语言程序设计
第3章 最简单的C程序设计

3.2.3不同类型数据间的转换
1.隐式转换
什么情况下发生
运算转换------不同类型数据混合运算时 赋值转换------把一个值赋给与其类型不同的变量时 输出转换------输出时转换成指定的输出格式

C语言温度测试程序

C语言温度测试程序
/* */
/*写显示数据到LCD */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
/* */
/*检查LCD忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
LCD_EN = 0;
}
/*******************************************************************/
/* */
#define LCD_data P0 //数据口
sbit LCD_RS = P2^0; //寄存器选择输入
sbit LCD_RW = P2^1; //液晶读/写控制
sbit LCD_EN = P2^2; //液晶使能控制
sbit LCD_PSB = P2^3; //串/并方式控制
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
delay(5);
lcd_wcmd(0x01); //清屏
delay(5);
}
/**********************************************************

c语言华氏温度转换为摄氏温度

c语言华氏温度转换为摄氏温度

c语言华氏温度转换为摄氏温度
C语言中,华氏温度转换为摄氏温度的公式为:C = (F - 32) / 1.8,其中C表示摄氏温度,F表示华氏温度。

要进行转换,首先需要在程序中定义两个变量,一个代表华氏温度,一个代表摄氏温度。

定义变量时需要指定变量类型,例如:
```c
float fahrenheit, celsius;
```
这里使用float类型来定义变量,因为温度值可以是小数。

然后需要通过用户输入获取华氏温度值,可以使用scanf函数,例如:
```c
printf('请输入华氏温度:');
scanf('%f', &fahrenheit);
```
这里使用了printf函数提示用户输入华氏温度,并使用scanf 函数将输入的值存储到fahrenheit变量中。

接下来,使用上面提到的公式进行转换,最后将结果输出,例如: ```c
celsius = (fahrenheit - 32) / 1.8;
printf('转换后的摄氏温度为:%f', celsius);
```
这里将转换后的摄氏温度值存储到celsius变量中,并使用printf函数输出结果。

温度采集C语言源代码

温度采集C语言源代码

#include <reg52.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intsbit ds=P2^2; //温度传感器信号线sbit dula=P2^6; //数码管段选线sbit wela=P2^7; //数码管位选线sbit beep=P2^3; //蜂鸣器uint temp; //定义整型的温度数据float f_temp; //定义浮点型的温度数据uint warn_l1=260; //定义温度下限值是温度值乘以10后的结果uint warn_l2=250; //定义温度下限值uint warn_h1=300; //定义温度上限值uint warn_h2=320; //定义温度上限值sbit led0=P1^0; //控制发光二极管sbit led1=P1^1; //控制发光二极管sbit led2=P1^2; //控制发光二极管sbit led3=P1^3; //控制发光二极管unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //带小数点的0~9编码0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //不带小数点的0~9编码void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void dsreset(void) //18B20复位,初始化函数{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit tempreadbit(void) //读1位数据函数{uint i;bit dat;ds=0;i++; //i++ 起延时作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return (dat);}uchar tempread(void) //读1个字节数据函数{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}void tempwritebyte(uchar dat) //向18B20写一个字节数据{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0; //写0i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) //DS18B20 开始获取温度并转换{dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}uint get_temp() //读取寄存器中存储的温度数据{uchar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低8位b=tempread(); //读高8位temp=b;temp<<=8; //两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;return temp; //temp是整型}////////////////////显示程序//////////////////////////void display(uchar num,uchar dat) //num是第几个数码管,dat是要显示的数据{uchar i;dula=0;P0=table[dat]; //编码赋给P0口dula=1;dula=0;wela=0;i=0XFF;i=i&(~((0X01)<<(num))); //用i来存储位选数据,只有一位为0P0=i;wela=1;wela=0;delay(1);}void dis_temp(uint t) //显示温度数值函数t传递的是整型的温度值{uchar i;i=t/100; //除以100得到商,为温度的十位display(0,i); //在第1个数码管上显示i=t%100/10; //100取余再除以10得到商,为温度的个位display(1,i+10); //在第2个数码管上显示i=t%100%10; //100取余再用10取余,为温度的小数位display(2,i);}//////////////////////////////////////////////void warn(uint s,uchar led) //蜂鸣器报警,灯闪烁{ //s控制音调,led控制灯uchar i;i=s;dula=0;wela=0;beep=0; //蜂鸣器响P1=(led); //控制相应的灯亮while(i--){dis_temp(get_temp()); //用温度显示函数起到延时的作用}beep=1; //蜂鸣器不响P1=0X00; //控制相应的灯灭i=s;while(i--){dis_temp(get_temp()); //用温度显示函数起到延时的作用}}void deal(uint t) //温度处理函数{uchar i;if((t>warn_l2)&&(t<=warn_l1)) //大于25度小于27度{warn(40,0x01); //第一个灯亮,蜂鸣器发出“滴”声}else if(t<=warn_l2) //小于25度{warn(10,0x03); //第一个和第二个灯亮,蜂鸣器发出“滴”声}else if((t<warn_h2)&&(t>=warn_h1)) //小于32度大于30度{warn(40,0x04); //第三个灯亮,蜂鸣器发出“滴”声}else if(t>=warn_h2) //大于32度{warn(10,0x0c); //第三个和第四个灯亮,蜂鸣器发出“滴”声}Else //在27度和30度之间时只是调用显示函数延时{i=40;while(i--){dis_temp(get_temp());}}}void init_com(void) //串口初始化函数{TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd; //波特率9600TL1 = 0xFd;TR1 = 1;}void comm(char *parr) //串口数据发送函数{do{SBUF= *parr++; //发送数据while(!TI); //等待发送完成标志为1 TI=0; //标志清零}while(*parr); //保持循环直到字符为'\0' }void main() //主函数{uchar buff[4],i;dula=0;wela=0;init_com();while(1){tempchange(); //温度转换函数for(i=10;i>0;i--){dis_temp(get_temp()); //获取温度并显示}deal(temp); //进行温度处理sprintf(buff,"%f",f_temp); //将浮点型温度格式化为字符型for(i=10;i>0;i--){dis_temp(get_temp());} //温度显示comm(buff); //串口发送数据for(i=10;i>0;i--){dis_temp(get_temp());} //温度显示}}。

温湿度 c语言的程序

温湿度 c语言的程序

#define uchar unsigned char
#define uint unsigned int
sbit P2_0 = P2^0 ;
sbit P2_1 = P2^1 ;
//----------------------------------------------//
//----------------定义区--------------------//
P0=LEDData[display[1]];
delay(5);d2=0;
d3=1;
P0=LEDData[display[2]];
delay(5);d3=0;
d4=1;
P0=LEDData[display[3]];
delay(5);d4=0;
}
void main(void)
// display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
display[4]=U8RH_data_H;
display[4]=display[4]%100;
display[3]=display[4]/10;
0x80,0x90,0xff};
uchar data display[5] = {0x00,0x00,0x00,0x00,0x00};
void Delay(U16 j)
{
U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void delay(unsigned int num)//延时函数

基于51单片机的温度检测系统_单片机C语言课题设计报告

基于51单片机的温度检测系统_单片机C语言课题设计报告

单片机C语言课题设计报告设计题目:温度检测电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来1摘要本课题以51单片机为核心实现智能化温度测量。

利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,利用单总线和单片机交换数据,最终单片机将信号转换成LCD 可以识别的信息显示输出。

基于STC90C516RD+STC90C516RD+的单片机的智能温度检测系统,的单片机的智能温度检测系统,设计采用18B20温度传感器,其分辨率可编程设计。

本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。

设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,位半,而温度测量范围为而温度测量范围为而温度测量范围为-55-55-55℃~℃~℃~+125+125+125℃,℃,则其分辨力为0.06250.0625℃。

℃。

设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息,和过温警告信息,传感器异常信息设。

传感器异常信息设。

传感器异常信息设。

计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,当温度超过当温度超过设定值时播放《卡农》,当传感器异常时播放嘟嘟音。

单片机C 语言课题设计报告语言课题设计报告电动世界,气定乾坤2目录一、设计功能一、设计功能................................. ................................. 3 二、系统设计二、系统设计................................. .................................3 三、器件选择三、器件选择................................. .................................3 3.1温度信号采集模块 (3)3.1.1 DS18B20 3.1.1 DS18B20 数字式温度传感器数字式温度传感器..................... 4 3.1.2 DS18B20特性 .................................. 4 3.1.3 DS18B20结构 .................................. 5 3.1.4 DS18B20测温原理 .............................. 6 3.1.5 DS18B20的读写功能 ............................ 6 3.2 3.2 液晶显示器液晶显示器1602LCD................................. 9 3.2.1引脚功能说明 ................................. 10 3.2.2 1602LCD 的指令说明及时序 ..................... 10 3.2.3 1602LCD 的一般初始化过程 (10)四、软件设计四、软件设计................................ ................................11 4.1 1602LCD 程序设计流程图 ........................... 11 4.2 DS18B20程序设计流程图 ............................ 12 4.3 4.3 主程序设计流程图主程序设计流程图................................. 13 五、设计总结五、设计总结................................. ................................. 2 六、参考文献六、参考文献................................. ................................. 2 七、硬件原理图及仿真七、硬件原理图及仿真......................... .........................3 7.1系统硬件原理图 ..................................... 3 7.2开机滚动显示界面 ................................... 4 7.3临界温度设置界面 ................................... 4 7.4传感器异常警告界面 (4)电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来3温度温度DS18B20 LCD 显示显示过温函数功能模块能模块传感器异常函数功能模块数功能模块D0D1D2D3D4D5D6D7XT XTAL2AL218XT XTAL1AL119ALE 30EA31PSEN29RST 9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C51X1CRYST CRYSTAL ALC122pFC222pFGNDR110kC31uFVCCGND234567891RP1RESPACK-8VCC0.0DQ 2VCC 3GND 1U2DS18B20R24.7K LCD1LM016LLS2SOUNDERMUC八、程序清单八、程序清单................................. .................................5 一、设计功能·由单片机、温度传感器以及液晶显示器等构成高精度温度监测系统。

51 温度 湿度 C语言代码

51 温度  湿度  C语言代码

{
const float C1=-4.0;
// 12 位湿度精度 修正公式
const float C2=+0.0405;
// 12 位湿度精度 修正公式
const float C3=-0.0000028;
// 12 位湿度精度 修正公式
const float T1=0.46;
// 14 位温度精度 5V 条件 修正公式
write_com(0x80+0x40+1);
for(num=0;num<16;num++) { write_data(table2[num]); delay(20); }
} void write_sfm(uchar add,uchar date) {
uchar shi,ge; shi=date/10; ge=date%10;
void calc_sth10(float *p_humidity ,float *p_temperature);
float calc_dewpoint(float h,float t);
#endif//结束#ifndef,如果已经编译过就跳过之间的部分
uchar code table1[]="00:00:00";
//测量湿度
default : break;
}
for (i=0;i<65535;i++) if(DATA==0) break; //等待测量结束
if(DATA) error+=1;
// 如果长时间数据线没有拉低,说明测量错误
*(p_value) =s_read_byte(ACK); //读第一个字节,高字节 (MSB)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
while(1)
{
delay(500);//消抖
if(set==0){源自temp1++;
while(!set)
scan();
}
if(temp1==1)
{
xianshi(high);
scan();
if(add==0)
{
while(!add)
scan();
high+=1;
}
if(dec==0)
{
while(!dec)
//共阴LED段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"
uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //个位带小数点的断码表
uchar data temp_data[2]={0x00,0x00}; //读出温度暂放
write_byte(0xcc); //Skip ROM
write_byte(0x44); //发转换命令
for(h=0;h<100;h++) //开机显示"0000"
{
scan();
}
while(1)
{
if (temp1==0)
{
work_temp(read_temp()); //处理温度数据
BEEP();
delay(6); //66 us
}
DQ=1;
return(value);
}
/*****************读出温度函数************************/
read_temp()
{
ow_reset(); //总线复位
delay(200);
write_byte(0xcc); //发命令
{
if((r>=high&&r<129)||r<low)
{
beep=!beep;
}
else
{
beep=0;
}
}
//*********设置温度显示转换************//
void xianshi(int horl)
{
int n=0;
if(horl>128)
{
horl=256-horl;n=1;
#include <REGX51.H>
#include <intrins.h > //_nop_();延时函数用
#define dm P0 //段码输出口
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^7; //温度输入口
write_byte(0x44); //发转换命令
ow_reset();
delay(1);
write_byte(0xcc); //发命令
write_byte(0xbe);
temp_data[0]=read_byte(); //读温度值的第字节
temp_data[1]=read_byte(); //读温度值的高字节
}
}
}
//***************DS18B20复位函数************************/
ow_reset(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;
delay(50); //550 us
DQ=1;
delay(6); //66 us
presence=DQ; //presence=0复位成功,继续下一步
}
delay(45); //延时500 us
presence=~DQ;
}
DQ=1; //拉高电平
}
/****************DS18B20写命令函数************************/
int temp1=0; //显示当前温度和设置温度的标志位为0时显示当前温度
uint h;
uint temp;
uchar r;
uchar high=35,low=20;
uchar sign;
uchar q=0;
uchar tt=0;
uchar scale;
//**************温度小数部分用查表法***********//
uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用
/*****************11us延时函数*************************/
void delay(uint t)
{
for (;t>0;t--);
}
void scan()
{
int j;
for(j=0;j<4;j++)
{
switch (j)
{
case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshu
case 1: dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//gewei
}
}
}
}
/****************主函数************************/
void main()
{
dm=0x00; //初始化端口
w0=0;
w1=0;
w2=0;
w3=0;
for(h=0;h<4;h++) //开机显示"0000"
{
display[h]=0;
}
ow_reset(); //开机先转换一次
}
display[3]=horl/100;
display[3]=display[3]&0x0f;
display[2]=horl%100/10;
display[1]=horl%10;
display[0]=0;
if(!display[3])
{
display[3]=0x0a; //最高位为0时不显示
if(!display[2])
display[3]=display[4]/100; //取百位数据暂存
display[1]=display[4]%100; //取后两位数据暂存
display[2]=display[1]/10; //取十位数据暂存
display[1]=display[1]%10; //个位数据
r=display[1]+display[2]*10+display[3]*100;
//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩
//下的低字节的低半字节转化成十进制后,就是温度值的小数部分
/********************************************************/
work_temp(uint tem)
{
uchar n=0;
delay(6); //66 us
val=val/2; //右移1位
}
DQ=1;
delay(1);
}
/****************DS18B20读1字节函数************************/
//从总线上取1个字节
uchar read_byte(void)
{
uchar i;
uchar value=0;
scan(); //显示温度值
keyscan();
}
else
keyscan();
}
}
//***********************结束**************************//
//DS18B20的读写程序,数据脚P2.7 //
//温度传感器18B20汇编程序,采用器件默认的12位转化//
//最大转化时间750微秒,显示温度-55到+125度,显示精度//
//为0.1度,显示采用4位LED共阳显示测温值//
//P0口为段码输入,P34~P37为位选//
/***************************************************/
sbit w0=P2^0; //数码管4
sbit w1=P2^1;//数码管3
sbit w2=P2^2;//数码管2
sbit w3=P2^3;//数码管1
sbit beep=P1^7; //蜂鸣器和指示灯
sbit set=P2^6; //温度设置切换键
sbit add=P2^4; //温度加
sbit dec=P2^5; //温度减
{
display[2]=0x0a; //次高位为0时不显示
}
}
if(n)
{
display[3]=0x0b; //负温度时最高位显示"-"
}
}
//*********按键查询程序**************//
void keyscan()
{
相关文档
最新文档