标题:
关于单片机温度控制系统的课设 有源代码和仿真文件
[打印本页]
作者:
清水有鱼
时间:
2018-6-7 23:17
标题:
关于单片机温度控制系统的课设 有源代码和仿真文件
做了两周的课程设计,是关于温度控制系统的
附件里有源代码,和仿真文件,
第一次做,也在图书馆里查询了一些资料
解决了一些问题
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(17.71 KB, 下载次数: 79)
下载附件
2018-6-8 04:45 上传
0.png
(47.57 KB, 下载次数: 87)
下载附件
2018-6-8 04:45 上传
单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
unsigned char code digit[10]={"0123456789"};
unsigned char code D1[]={"Temp: C"};
unsigned char code Error[]={"Error!Check!"};
unsigned char code D2[]={"Motor: "};
unsigned char code TS1[]={"COOL DOWN!"};
unsigned char code TS2[]={" STOP! "};
unsigned char code TS3[]={"HOT UP!"};
sbit LED_RED=P2^3;
sbit LED_GREEN=P2^4;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
unsigned char cwFlag;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
void delay(unsigned int m)
{
unsigned int i,j;
for(i=m;i>0;i--)
for(j=110;j>0;j--);
}
bit BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
void WriteInstruction(unsigned char dictate)
{
while(BusyTest()==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80);
}
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void LcdInitiate(void)
{
delay(15);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x0c);
delay(5);
WriteInstruction(0x06);
delay(5);
WriteInstruction(0x01);
delay(5);
}
sbit DQ=P3^3;
unsigned char time;
bit Init_DS18B20(void)
{
bit flag;
DQ=1;
for(time=0;time<2;time++);
DQ=0;
for(time=0;time<200;time++);
DQ=1;
for(time=0;time<10;time++);
flag=DQ;
for(time=0;time<200;time++);
return(flag);
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
dat>>=1;
_nop_();
DQ=1;
for(time=0;time<2;time++);
if(DQ==1)
dat|=0x80;
else
dat|=0x00;
for(time=0;time<8;time++);
}
return(dat);
}
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
DQ=dat&0x01;
for(time=0;time<10;time++);
DQ=1;
for(time=0;time<1;time++);
dat>>=1;
}
for(time=0;time<4;time++);
return(dat);
}
void red(void)
{
LED_RED=0;
delay(200);
LED_RED=1;
delay(200);
}
void green(void)
{
LED_GREEN=0;
delay(200);
LED_GREEN=1;
delay(200);
}
void display_error(void)
{
unsigned char i;
WriteAddress(0x00);
i=0;
while(Error[i]!='\0')
{
WriteData(Error[i]);
i++;
delay(100);
}
while(1);
}
void display_explain(void)
{
unsigned char i;
WriteAddress(0x00);
i=0;
while(Error[i]!='\0')
{
WriteData(D1[i]);
i++;
delay(100);
}
}
void display_symbol(void)
{
unsigned char i;
WriteAddress(0x40);
i=0;
while(D2[i]!='\0')
{
WriteData(D2[i]);
i++;
delay(50);
}
}
void display_dot(void)
{
WriteAddress(0x09);
WriteData('.');
delay(50);
}
void display_du(void)
{
WriteAddress(0x0C);
WriteData(0xDF);
delay(50);
}
void display_temp1(unsigned char x)
{
unsigned char j,k,l;
j=x/100;
k=(x%100)/10;
l=x%10;
WriteAddress(0x06);
WriteData(digit[j]);
WriteData(digit[k]);
WriteData(digit[l]);
delay(50);
}
void display_temp2(unsigned char x)
{
WriteAddress(0x0A);
WriteData(digit[x]);
delay(50);
}
void display_TS1(void)
{
unsigned char i;
WriteAddress(0x46);
i=0;
while(TS1[i]!='\0')
{
WriteData(TS1[i]);
i++;
delay(50);
}
}
void display_TS2(void)
{
unsigned char i;
WriteAddress(0x46);
i=0;
while(TS2[i]!='\0')
{
WriteData(TS2[i]);
i++;
delay(50);
}
}
void display_TS3(void)
{
unsigned char i;
WriteAddress(0x46);
i=0;
while(TS3[i]!='\0')
{
WriteData(TS3[i]);
i++;
delay(50);
}
}
void ReadyReadTemp(void)
{
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
for(time=0;time<100;time++);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
}
void main(void)
{
unsigned char TL;
unsigned char TH;
unsigned char TN;
unsigned char TD;
LcdInitiate();
delay(5);
if(Init_DS18B20()==1)
display_error();
display_explain();
display_symbol();
display_dot();
display_du();
while(1)
{
ReadyReadTemp();
TL=ReadOneChar();
TH=ReadOneChar();
TN=TH*16+TL/16;
TD=(TL%16)*10/16;
display_temp1(TN);
display_temp2(TD);
delay(10);
if(TN>30)
{
P1_0=1;P1_1=0;
display_TS1();
green();
}
if((TN<=30)&(TN>=25))
{
P1_0=1;P1_1=1;
display_TS2();
EA=0;
}
if(TN<25)
{
P1_0=0;P1_1=1;
display_TS3();
red();
}
}
}
复制代码
所有资料51hei提供下载:
课程设计.zip
(18.28 KB, 下载次数: 166)
2018-6-7 23:14 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
water11
时间:
2018-11-22 14:04
很好,非常实用的一个网站
作者:
water11
时间:
2018-11-22 14:06
很好,网站很实用
作者:
yzwq0311
时间:
2018-12-7 21:24
很好 非常实用
作者:
18878648063
时间:
2022-6-21 00:26
那个继电器是起升温降温的吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1