新聞中心

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

        MSP430G2553做DS18B20溫度控制器

        作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏
        //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;//增計數(shù)模式從0計到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;//表示負溫度
        }
        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;
        }
        }


        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 教育| 遂溪县| 汝南县| 赣榆县| 浦县| 堆龙德庆县| 额尔古纳市| 瑞昌市| 新田县| 河曲县| 邛崃市| 榆林市| 界首市| 河池市| 和平县| 元谋县| 疏附县| 武强县| 师宗县| 女性| 牟定县| 三都| 泽库县| 平陆县| 南昌县| 凤台县| 邳州市| 集贤县| 嘉定区| 阜平县| 鲜城| 潢川县| 涿州市| 渝北区| 天长市| 普定县| 集安市| 淮滨县| 边坝县| 长宁区| 上饶市|