新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430G2553做DS18B20溫度控制器

MSP430G2553做DS18B20溫度控制器

作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
//P2.5 繼電器輸出
#include"msp430g2553.h"
#include"LCD1602_4bit.h"
#include"DS18B20.H"
unsigned char temp_L,temp_H,temp_s,temp_s_flag,temp_s_H,temp_s_M,temp_s_L,temp;
unsigned char time_num;
unsigned char i1;
unsigned char table_1[]="Real:";
unsigned char table_2[]="set:";
unsigned char table_3[]="setting:";
unsigned char key3_flag;//,key1_flag,key2_flag;
void time0_int(void)
{
CCTL0 = CCIE; //CCTLx是捕獲/比較控制寄存器
CCR0 = 40000;
TACTL = TASSEL_2+MC_1+ID_3;//增計(jì)數(shù)模式從0計(jì)到CCR0
}
void io_int(void)
{
P1DIR&=~BIT3;//輸入
P1DIR&=~BIT4;//輸入
P2DIR&=~BIT4;//輸入
P2DIR|=BIT5;//輸出
}
void key_scan(void)
{
if((P2IN&BIT4)==0)
{
delay_ms(15);
if((P2IN&BIT4)==0)
{
key3_flag++;
if(key3_flag==5)
{
key3_flag=0;
for(i1=0; i1<4; i1++)
{
LCD1602_4bit_CMD(0xc0+i1);
LCD1602_4bit_Data(table_2[i1]);
}
if(temp_s_flag==0)
{
LCD1602_4bit_CMD(0xc0+0x04);
LCD1602_4bit_Data(0x20);
}
else
{
LCD1602_4bit_CMD(0xc0+0x04);
LCD1602_4bit_Data(0x2d);
}
LCD1602_4bit_CMD(0xc0+0x05);
LCD1602_4bit_Data(0x30+temp_s_H);
LCD1602_4bit_CMD(0xc0+0x06);
LCD1602_4bit_Data(0x30+temp_s_M);
LCD1602_4bit_CMD(0xc0+0x07);
LCD1602_4bit_Data(0x30+temp_s_L);
for(i1=0; i1<5; i1++)
{
LCD1602_4bit_CMD(0xc8+i1);
LCD1602_4bit_Data(0x20);
}
}
if(key3_flag==1)
{
temp_s_flag=0;temp_s_H=0;temp_s_M=0;temp_s_L=0;
LCD1602_4bit_CMD(0xc0+0x09);
LCD1602_4bit_Data(0x20);
for(i1=0; i1<8; i1++)
{
LCD1602_4bit_CMD(0xc0+i1);
LCD1602_4bit_Data(table_3[i1]);
}
if(temp_s_flag==0)
{
LCD1602_4bit_CMD(0xc0+0x09);
LCD1602_4bit_Data(0x20);
}
else
{
LCD1602_4bit_CMD(0xc0+0x09);
LCD1602_4bit_Data(0x2d);
}
LCD1602_4bit_CMD(0xc0+0x0a);
LCD1602_4bit_Data(0x30+temp_s_H);
LCD1602_4bit_CMD(0xc0+0x0b);
LCD1602_4bit_Data(0x30+temp_s_M);
LCD1602_4bit_CMD(0xc0+0x0c);
LCD1602_4bit_Data(0x30+temp_s_L);
}
while((P2IN&BIT4)==0)
{}
}
}
if((P1IN&BIT3)==0)
{
delay_ms(15);
if((P1IN&BIT3)==0)
{
if(key3_flag==1)
{
LCD1602_4bit_CMD(0xc0+0x09);
LCD1602_4bit_Data(0x20);//空格
temp_s_flag=0;//表示正溫度
}
if(key3_flag==2)
{
temp_s_H++;
if(temp_s_H==2)
{
temp_s_H=0;
}
if(temp_s_flag==1)
{
temp_s_H=0;
}
LCD1602_4bit_CMD(0xc0+0x0a);
LCD1602_4bit_Data(0x30+temp_s_H);
}
if(key3_flag==3)
{
temp_s_M++;
if(temp_s_M==10)
{
temp_s_M=0;
}
if(temp_s_flag==0&&temp_s_H==1&&(temp_s_M>2))
{
temp_s_M=0;
}
if(temp_s_flag==1&&(temp_s_M>5))
{
temp_s_M=0;
}
LCD1602_4bit_CMD(0xc0+0x0b);
LCD1602_4bit_Data(0x30+temp_s_M);
}
if(key3_flag==4)
{
temp_s_L++;
if(temp_s_L==10)
{
temp_s_L=0;
}
if(temp_s_flag==0&&temp_s_H==1&&temp_s_M==2&&(temp_s_L>5))
{
temp_s_L=0;
}
if(temp_s_flag==1&&temp_s_M==5&&(temp_s_L>5))
{
temp_s_L=0;
}
LCD1602_4bit_CMD(0xc0+0x0c);
LCD1602_4bit_Data(0x30+temp_s_L);
}
while((P1IN&BIT3)==0)
{}
}
}
if((P1IN&BIT4)==0)
{
delay_ms(15);
if((P1IN&BIT4)==0)
{
if(key3_flag==1)
{
LCD1602_4bit_CMD(0xc0+0x09);
LCD1602_4bit_Data(0x2d);
temp_s_flag=1;//表示負(fù)溫度
}
if(key3_flag==2)
{
temp_s_H--;
if(temp_s_H==255)
{
temp_s_H=1;
}
if(temp_s_flag==1)
{
temp_s_H=0;
}
LCD1602_4bit_CMD(0xc0+0x0a);
LCD1602_4bit_Data(0x30+temp_s_H);
}
if(key3_flag==3)
{
temp_s_M--;
if(temp_s_M==255)
{
temp_s_M=9;
}
if(temp_s_flag==0&&temp_s_H==1&&(temp_s_M>2))
{
temp_s_M=2;
}
if(temp_s_flag==1&&(temp_s_M>5))
{
temp_s_M=5;
}
LCD1602_4bit_CMD(0xc0+0x0b);
LCD1602_4bit_Data(0x30+temp_s_M);
}
if(key3_flag==4)
{
temp_s_L--;
if(temp_s_L==255)
{
temp_s_L=9;
}
if(temp_s_flag==0&&temp_s_H==1&&temp_s_M==2&&(temp_s_L>5))
{
temp_s_L=5;
}
if(temp_s_flag==1&&temp_s_M==5&&(temp_s_L>5))
{
temp_s_L=5;
}
LCD1602_4bit_CMD(0xc0+0x0c);
LCD1602_4bit_Data(0x30+temp_s_L);
}
while((P1IN&BIT4)==0)
{}
}
}
}
void display(void)
{
temp=(temp_H&0x0f)<<4;
if((temp_H&0xf0)==0xf0)
{
LCD1602_4bit_CMD(0x85);
LCD1602_4bit_Data(0x2d);
}
else
{
LCD1602_4bit_CMD(0x85);
LCD1602_4bit_Data(0x20);
}
temp=temp|((temp_L&0xf0)>>4);
LCD1602_4bit_CMD(0x86);
LCD1602_4bit_Data(0x30+temp/100);
LCD1602_4bit_CMD(0x87);
LCD1602_4bit_Data(0x30+(temp%100)/10);
LCD1602_4bit_CMD(0x88);
LCD1602_4bit_Data(0x30+temp%10);
}
void warning(void)
{
if(temp_s_flag==0)
{
if(temp>=(temp_s_L*100+temp_s_M*10+temp_s_L))
{P2OUT|=BIT5;}
else
{P2OUT&=~BIT5;}
}
if(temp_s_flag==1)
{
if(temp<=(temp_s_M*10+temp_s_L))
{P2OUT|=BIT5;}
else
{P2OUT&=~BIT5;}
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
DCOCTL = 0x00; // Set DCO 1MHz
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
//time0_int();
_EINT();
P2DIR |= 0x0f;
P1DIR |= 0xf0;
delay_ms(20);
io_int();
LCD1602_4bit_init();
for(i1=0; i1<5; i1++)
{
LCD1602_4bit_CMD(0x80+i1);
LCD1602_4bit_Data(table_1[i1]);
}
for(i1=0; i1<4; i1++)
{
LCD1602_4bit_CMD(0xc0+i1);
LCD1602_4bit_Data(table_2[i1]);
}
while(1)
{
// LCD1602_4bit_CMD(0x85);
// LCD1602_4bit_Data(0x30+time_num);
Read_temp();
key_scan();
display();
warning();
/* P2OUT|=BIT5;
delay_ms(2000);
P2OUT&=~BIT5;
delay_ms(2000);
P1OUT&=~BIT6;
delay_ms(1000);*/
}
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void timeA1(void)
{
time_num++;
if(time_num==20)
{
time_num=0;
}
}


關(guān)鍵詞: MSP430G2553DS18B20溫度控制

評論


技術(shù)專區(qū)

關(guān)閉