发布网友 发布时间:2022-04-23 15:44
共3个回答
热心网友 时间:2023-08-20 21:25
我有一个现成的,就是对温度控制,经过了Protues仿真。没有问题。
图没有办法弄上,我qq14998096
#include<reg51.h>
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;/////数码管1断码控制///////////////
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P32=P3^2;/////数码管2段码控制////////////////
sbit up=P3^7;
sbit down=P3^6; ////按键操作端口//////////////////
sbit P35=P3^5; ////////控制晶闸管端口/////////
sbit DQ =P3^3; ///////温度传感器端口/////////
#define THCO 0xee
#define THLO 0x00
unsigned char code an[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,};
//////////////////////////////////////////
int b=0;
char pwm=0;
int k;
char r=0,q=0;
static char wen_1;
char hao=20;
//////////////////////////////////////////////
void delay(unsigned int i)
{
while(i--);
}
//////////////////////////////////////////
Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(20);
}
////////////////////////////////////////////
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
////////////////////////////////////////////////
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
//delay(4);
}
///////////////////////////////////////////////
//DS18B20程序读取温度
ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(t);
}
xianshi()
{
/////////////////当前温度显示/////////////////////////////
P11=1;
P0=an[wen_1/1000];
for(k=0;k<1000;k++);
P1=0;
P12=1;
P0=an[wen_1/100%10];
for(k=0;k<1000;k++);
P1=0;
P13=1;
P0=an[wen_1%100/10];
for(k=0;k<1000;k++);
P1=0;
P14=1;
P0=an[wen_1%10];
for(k=0;k<1000;k++);
P1=0;
///////////////////////////目标电压显示///////////////
P15=1;
P2=an[hao/1000];
for(k=0;k<1000;k++);
P1=0;
P16=1;
P2=an[hao/100%10];
for(k=0;k<1000;k++);
P1=0;
P17=1;
P2=an[hao%100/10];
for(k=0;k<1000;k++);
P1=0;
P32=1;
P2=an[hao%10];
for(k=0;k<1000;k++);
P32=0;
//////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////
main(void)
{
P11=0;
P12=0;
P13=0;
P14=0;
P15=0;
P16=0;
P17=0;
P32=0;
P35=0;
///////////////////////////////////////////////////////////
while(1)
{
wen_1=ReadTemperature()/16;//读温度
xianshi(); ///显示系统数据////////////////////
/////////////////操作函数////////////////////////////////////
if(down==0) {hao--;}
if(up==0){hao++;}
//////////////////////////////////////////////////////////////
/////hao为理想温度
/////wen_1为实际环境温度
/////////////////////////////////////////////////////////////
////P35为高时 led灯工作/////////////////////////////////////
P35=0;
pwm=hao-wen_1;
if(pwm>0) {P35=1;}
if(pwm<0) {P35=0;}
if(pwm==0) {P35=0;}
/////////////////////////////////////////////////////////////////
}
}
热心网友 时间:2023-08-20 21:26
呵呵!这个题目有点意思!过程控制里的重点锅炉控制。呵呵!只续对信号进行检测啊?还是也需要控制输出的啊?
热心网友 时间:2023-08-20 21:26
这个你很急着要吗???