<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          MSP430G2553做DS18B20溫度控制器

          作者: 時間:2016-11-13 來源:網絡 收藏
          //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;//增計數模式從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ū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();