標(biāo)題:
關(guān)于單片機(jī)溫度控制系統(tǒng)的課設(shè) 有源代碼和仿真文件
[打印本頁]
作者:
清水有魚
時間:
2018-6-7 23:17
標(biāo)題:
關(guān)于單片機(jī)溫度控制系統(tǒng)的課設(shè) 有源代碼和仿真文件
做了兩周的課程設(shè)計(jì),是關(guān)于溫度控制系統(tǒng)的
附件里有源代碼,和仿真文件,
第一次做,也在圖書館里查詢了一些資料
解決了一些問題
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(17.71 KB, 下載次數(shù): 79)
下載附件
2018-6-8 04:45 上傳
0.png
(47.57 KB, 下載次數(shù): 87)
下載附件
2018-6-8 04:45 上傳
單片機(jī)源程序如下:
#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();
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
課程設(shè)計(jì).zip
(18.28 KB, 下載次數(shù): 166)
2018-6-7 23:14 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
water11
時間:
2018-11-22 14:04
很好,非常實(shí)用的一個網(wǎng)站
作者:
water11
時間:
2018-11-22 14:06
很好,網(wǎng)站很實(shí)用
作者:
yzwq0311
時間:
2018-12-7 21:24
很好 非常實(shí)用
作者:
18878648063
時間:
2022-6-21 00:26
那個繼電器是起升溫降溫的嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1