void timer2IntProc() interrupt 5
{
TF2=0; number++;
if(number==600)
{
liang = 1;
}
if(number==1200)
{
liang = 0;
}
if(number==1800)
{
liang = 1;
}
if(number==2400)
{
liang = 0;
}
if(number==3000)
{
liang = 1;
}
if(number==3600)
{
FLAG = 0;
TR2 = 0;
number=0;
liang = 0;
}
}
void initProg(void)
{
EA = 1;
RCAP2H=0xfc; RCAP2L=0x66;
TH2=RCAP2H; TL2=RCAP2L;
T2CON=0; T2MOD=0;
ET2=1;
}
void Keyboard()
{
if(adjust==0)
Delay_ms(10);
if(adjust==0)
{
while(!adjust);
beep();
FLAG = 1;
setvalue+=7;
if(setvalue == 42)
setvalue = 7;
TR2 = 1;
}
}
void GetTemperture(void)
{
uint8 i,temp;
uint16 real,setvalue1;
Init_DS18B20(); //DS18B20初始化
if(yes0==0) //若yes0为0,说明DS18B20正常
{
WriteOneByte(0xCC); // 跳过读序号列号的操作
WriteOneByte(0x44); // 启动温度转换
for(i=0;i<250;i++);//延时,等待A/D转换结束,分辨率为12位时需延时750ms以上
Init_DS18B20();
WriteOneByte(0xCC); //跳过读序号列号的操作
WriteOneByte(0xBE); //读取温度寄存器
temperature_sbuf[1] = ReadOneByte(); //温度低8位
temperature_sbuf[0] = ReadOneByte(); //温度高8位
temp=temperature_sbuf[1]&0x0f; //取出低4位的小数
gewei = (temp *10/16); //求出小数位的值
temp=((temperature_sbuf[1]&0xf0)>>4)|((temperature_sbuf[0]&0x0f)<<4);// temp_data[0]高4位与temp_data[1]低4位组合成1字节整数
baiwei =temp/10; //分离出整数部分十位
shiwei =temp%10; //个位部分
real = (uint16)100*baiwei+(uint16)10*shiwei+(uint16)gewei;
setvalue1 = (uint16)setvalue*10;
//Delay_ms(100);
if(real < setvalue1)
Relay = 0;
if(real >= setvalue1)
Relay = 1;
}
}
/********以下是温度数据转换函数,将温度数据转换为适合LED数码管显示的数据********/
void TempConv()
{
if(FLAG==0)
{
disp_buf[0]=gewei; //求出小数位的值
disp_buf[2]=baiwei; //分离出整数部分十位
disp_buf[1]=shiwei; //个位部分
if(!disp_buf[2]) //若十位为0,不显示十位
disp_buf[2]=10;
}
if(FLAG==1)
{
if(liang == 0 )
{
disp_buf[2] = setvalue/10;
disp_buf[1] = setvalue%10;
disp_buf[0] = 0;
if(!disp_buf[2]) //若十高位为0,不显示十位
disp_buf[2]=10;
}
if(liang == 1)
{
disp_buf[2]=10;
disp_buf[1]=10;
disp_buf[0]=10;
}
}
}
/********以下是显示函数, 在前4位数码管上显示出温度值********/
void Display()
{
P0 =seg_data[disp_buf[2]]; //显示十位
P21 = 0; //开十位显示
Delay_ms(2); //延时2ms
P21=1; //关十位显示
P0 =seg_data[disp_buf[1]]; //显示个位
P22 = 0;
DOT = 0; //显示小数点
if(liang==1)
DOT = 1;
Delay_ms(2);
P22=1;
P0 =seg_data[disp_buf[0]] ; //显示小数位
P23= 0;
Delay_ms(2);
P23=1;
}
void main(void)
{
initProg(); //整体初始化
while(1)
{
Keyboard();
GetTemperture(); //读取温度值
TempConv(); //温度值转换
Display(); //温度值显示
}
}
|