65℃ - 125℃
0℃ - 65℃
35℃ - 0℃
1 5
7 源程序
#include
#define INT8U unsigned char #define INT16U unsigned int extern INT8U Temp_Value[];
extern INT8U read_Temperature(); extern void delay_ms(INT16U x); extern void LCD_Initialise();
extern void LCD_ShowString(INT8U,INT8U,INT8U*) reentrant; sbit MA=P1^0; sbit MB=P1^1; sbit PWM1=P1^2;
INT8U Back_Temp_Value[]={0xFF,0XFF}; char Temp_Disp_Buff[17]; float f_Temp=35.0;
void T0_INT() interrupt 1 {
static INT8U t_Count=0;
TH0=(INT16U)(-11.0592/12*500)/256; TL0=(INT16U)(-11.0592/12*500)%6; if(++t_Count==100) {
t_Count=0;
if(Read_Temperature() ) {
if(Temp_Value[0]!=Back_Temp_Value[0]||Temp_Value[1]=Back_Temp_Value[1]) {
Back_Temp_Value[0]=Temp_Value[0]; Back_Temp_Value[1]=Temp_Value[1];
f_Temp=(int)(Temp_Value[1]<<8|Temp_Value[0]*0.0625; sprintf(Temp_Disp_Buff,\ LCD_ShowString(1,0,Temp_Disp_Buff); } } }
if (f_Temp>=75) f_Temp=75; if (f_Temp<=0) f_Temp=0; if(f_Temp>=45) {
MA=1;MB=0;
1 6
#include
#define INT8U unsigned char #define INT16U unsigned int extern INT8U Temp_Value[];
extern INT8U read_Temperature(); extern void delay_ms(INT16U x); extern void LCD_Initialise();
extern void LCD_ShowString(INT8U,INT8U,INT8U*) reentrant; sbit MA=P1^0; sbit MB=P1^1; sbit PWM1=P1^2;
INT8U Back_Temp_Value[]={0xFF,0XFF}; char Temp_Disp_Buff[17]; float f_Temp=35.0;
void T0_INT() interrupt 1 {
static INT8U t_Count=0;
TH0=(INT16U)(-11.0592/12*500)/256; TL0=(INT16U)(-11.0592/12*500)%6; if(++t_Count==100) {
t_Count=0;
if(Read_Temperature()) {
if(Temp_Value[0]!=Back_Temp_Value[0]||Temp_Value[1]!=Back_Temp_Value[1]) {
Back_Temp_Value[0]=Temp_Value[0]; Back_Temp_Value[1]=Temp_Value[1];
f_Temp=(int)(Temp_Value[1]<<8|Temp_Value[0])*0.0625; sprintf(Temp_Disp_Buff,\ LCD_ShowString(1,0,Temp_Disp_Buff); } } }
bit tmpreadbit(void) { uint i; bit dat; DS=1;
DS=0;i++;i++; DS=1;i++;
1 7
dat=DS;
i=8;while(i>0)i--; return (dat); }
uchar tmpread(void) { uchar i,j,dat; dat=0;
for(i=1;i<=8;i++) {
j=tmpreadbit();
dat=(j<<7)|(dat>>1); }
return(dat); }
void tmpwritebyte(uchar dat) {
uint i; uchar j; bit testb;
for(j=1;j<=8;j++) {
testb=dat&0x01; dat=dat>>1;
if(testb) //write 1 {
DS=0; i++;i++; DS=1;
i=8;while(i>0)i--; } else {
DS=0;
i=8;while(i>0)i--;//write 0 DS=1; i++;i++; } } }
if (f_Temp>=75) f_Temp=75; if (f_Temp<=0) f_Temp=0; if(f_Temp>=45)
1 8
{
MA=1;MB=0; if(f_Temp==45)
{ PWM1=0;delay_ms(30);return;} else
if(f_Temp==75)
{ PWM1=1;delay_ms(30);return;} PWM1=1;delay_ms(f_Temp-45); PWM1=0;delay_ms(75-f_Temp); }
else if(f_Temp<=10) {
MA=0;MB=1; if (f_Temp==10)
{PWM1=0;delay_ms(10);return;} else
if(f_Temp==0)
{PWM1=1;delay_ms(10);return;} PWM1=1;delay_ms(10-f_Temp); PWM1=0;delay_ms(f_Temp); }
else {MA=0;MB=0;} }
void main() {
LCD_Initialise();
LCD_ShowString(0,0,\ Read_Temperature();delay_ms(800); TMOD=0x01;
TH0=(INT16U)(-11.0592/12*500)/256; TL0=(INT16U)(-11.0592/12*500)%6; IE=0x82; TR0=1; while(1); }
8 总结
此次课程设计中,难点在于DS18B20的使用,即对它的时序控制、初始化以及字节读写方法,任何一个环节出错或是时序控制不到位的话就不能得到正确的数据。一旦学会了正确的使用方法,就能感觉到它带来的便利是热电偶不能比
1 9