用C语言写出基于单片机的数字温度计程序,要求能下图仿真能运行,如图有问题,则请另附图,谢谢

用C语言写出基于单片机的数字温度计程序,要求能下图仿真能运行,如图有问题,则请另附图,谢谢,第1张

#include <reg51H>

#define uint unsigned int

#define uchar unsigned char

#define Alarm_Value 30 //温度报警值

sbit rs = P2^0;

sbit lcdcs = P2^2;

sbit buzzer = P3^4; //蜂鸣器报警

sbit OUT = P3^5; //光的检测

sbit DQ = P3^7; //温度传送数据IO口

uchar TempBuffer[8];

uint temp_value; //温度值

light_flag=1; //标志位

uchar value1[]=;

uchar value2[]=;

uchar value3[]=;

uchar value4[]=;

/ds18b20子程序/

/ds18b20延迟子函数(晶振12MHz )/

void delay_18B20(unsigned int i)

{

while(i--);

}

/ds18b20初始化函数/

void Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1;

delay_18B20(8);

DQ = 0;

delay_18B20(80);

DQ = 1;

delay_18B20(14);

x=DQ;

delay_18B20(20);

}

/ds18b20读一个字节/

unsigned char ReadOneChar(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80; //先读入低字节

delay_18B20(4);

}

return(dat);

}

/ds18b20写一个字节/

void WriteOneChar(uchar dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1;

}

}

/读取ds18b20当前温度/

void ReadTemp(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned char t=0;

float tt;

Init_DS18B20();

WriteOneChar(0xCC); //Skip ROM command

WriteOneChar(0x44); //启动DS18B20进行温度转换

delay_18B20(100);

Init_DS18B20();

WriteOneChar(0xCC); //Skip ROM command

WriteOneChar(0xBE); // 读暂存器9个字节内容

delay_18B20(100);

a=ReadOneChar(); //读温度值低位

b=ReadOneChar(); //读温度值高位

temp_value=b;

temp_value<<=8;

temp_value=temp_value|a;

tt=temp_value00625;

temp_value=tt100+05; /经典:处理保留几位小数(此列为2位);/

}

/温度值转换为字符串/

void temp_to_str()

{

TempBuffer[0]=temp_value/1000+'0'; //十位

TempBuffer[1]=temp_value%1000/100+'0'; //个位

TempBuffer[2]=''; //小数点

TempBuffer[3]=temp_value%1000%100/10+'0'; //小数点后一位

TempBuffer[4]=temp_value%1000%100%10+'0'; //小数点后二位

TempBuffer[5]=0xdf; //温度符号

TempBuffer[6]='C';

TempBuffer[7]='\0';

}

void delay(uint ms)

{

uint i,j;

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

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

}

Check_light()

{

if(out==0)

{

light_flag=1;

}

else

{

light_flag=0;

}

}

/1602显示开始 /

void write_command(uchar command)

{

rs=0;

P0=command;

lcdcs=1;

lcdcs=0;

}

void write_data(uchar data0)

{

rs=1;

P0=data0;

lcdcs=1;

lcdcs=0;

}

void init_1602()

{

delay(15);

write_command(0x38);

delay(5);

write_command(0x0c);

delay(5);

write_command(0x06);

delay(5);

}

/1602显示结束

void show()

{

uchar i;

init_1602(); //初始化lcd

write_command(0x80); //液晶显示位置第一行第一个

Init_DS18B20();

ReadTemp();

temp_to_str();

for (i=0;i<sizeof(value1)-1;i++)

{

write_data(value1[i]);

delay(5);

}

for (i=0;i<sizeof(TempBuffer)-1;i++)

{

write_data(TempBuffer[i]);

delay(5);

}

write_command(0x80+0x40); //液晶显示位置 第二行第一个

delay(100);

for (i=0;i<sizeof(value2)-1;i++)

{

write_data(value2[i]);

delay(5);

}

if(light_flag== 1 )

{

for(i=0;i<sizeof(value3)-1;i++)

{

write_data(value3[i]);

delay(5);

}

}

else

{

for(i=0;i<sizeof(value4)-1;i++)

{

write_data(value4[i]);

delay(5);

}

}

}

void Temperature_Alarm() //温度报警

{

if(temp_value/100>=Alarm_Value) //取temp_value前两位

{

buzzer = 0; //不要用端口赋值

}

else

{

buzzer = 1;

}

}

/主函数/

void main()

{

while(1)

{

show();

Temperature_Alarm();

Check_light();

}

}

我做的液晶是1602的

D0为从温度模块中读取到的当前温度值,D128为设定温度和D156回差温度。可以在触摸屏上设置。设置温度45度后,温度会在30-60度之间工作。如图所示:

一、控制要求

将被控系统的温度控制在某一范围之间,当温度低于下限或高于上限时,应能自动进行调整,如果调整一定时间后仍不能脱离不正常状态。

则采用声光报警,来提醒 *** 作人员注意,排除故障。系统设置一个启动按钮来启动控制程序,设置绿、红、黄三台指示灯来指示温度状态。

当被控系统的温度在要求范围内,则绿灯亮,表示系统运行正常;当被控系统的温度超过上限或低于下限时,经调整且在设定时间内仍不能回到正常范围,则红灯或黄灯亮,并伴有声音报警,表示温度超过上限或低于下限。

该系统充分利用电气智能平台现有设备,引入PLC和变频器于系统中,将硬件模拟和软件仿真有机结合,有效的运用了平台资源。本文通过对该系统的阐述,详细介绍了PLC和变频器在模拟量信号监控中的运用。

扩展资料:

转换原理:

1、数模转换器是将数字信号转换为模拟信号的系统,一般用低通滤波即可以实现。数字信号先进行解码,即把数字码转换成与之对应的电平,形成阶梯状信号,然后进行低通滤波。

根据信号与系统的理论,数字阶梯状信号可以看作理想冲激采样信号和矩形脉冲信号的卷积,那么由卷积定理,数字信号的频谱就是冲激采样信号的频谱与矩形脉冲频谱(即Sa函数)的乘积。这样,用Sa函数的倒数作为频谱特性补偿。

由采样定理,采样信号的频谱经理想低通滤波便得到原来模拟信号的频谱。一般实现时,不是直接依据这些原理。

因为尖锐的采样信号很难获得,因此,这两次滤波(Sa函数和理想低通)可以合并(级联),并且由于这各系统的滤波特性是物理不可实现的,所以在真实的系统中只能近似完成。

2、模数转换器是将模拟信号转换成数字信号的系统,是一个滤波、采样保持和编码的过程。模拟信号经带限滤波,采样保持电路,变为阶梯形状信号,然后通过编码器,使得阶梯状信号中的各个电平变为二进制码。

参考资料来源:百度百科-可编程逻辑控制器

以上就是关于用C语言写出基于单片机的数字温度计程序,要求能下图仿真能运行,如图有问题,则请另附图,谢谢全部的内容,包括:用C语言写出基于单片机的数字温度计程序,要求能下图仿真能运行,如图有问题,则请另附图,谢谢、PLC温度控制梯形图 用三菱plc编写一段温度控制梯形图,控制温度30-60℃,可用触摸屏设置温度、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9354189.html

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

发表评论

登录后才能评论

评论列表(0条)

保存