MSP430G2553做DS18B20温度控制器
#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
MSP430G2553DS18B20温度控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)