我想做一个温度报警器,我这段程序不知道是哪里出错了,用Keil不能生成,请大家帮我指出来!我在这里谢谢大家了。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^2;
sbit w1=P2^3;
sbit w2=P2^2;
sbit w3=P2^1;
sbit w4=P2^0;
sbit key1=P2^4;//模式按键
sbit key2=P2^5;//加按键
sbit key3=P2^6;//减按键
sbit bell=P1^7;//蜂鸣器
//uint temp;//温度值
uint x;
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0xff,0x89,0xc7};//共阳数码管段码
uchar n=0;//数码管位数
uchar sb[4];//显示缓存
uchar H_Temp=50;//报警上限
uchar L_Temp=10;//报警下限
bit Alarm_en=0;//报警
void delay(uint x)
{
uint i;
uchar j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void key_sound(uint x)
{
uint k,l;
for(k=x;k>0;k--)
{
bell=~bell;
for(l=35;l>0;l--);
}
bell=1;//保证发声结束后输出高电平(即无效电平)
}
void wx(uchar w)
{
switch(w)
{
case 0:
w1=0;
w2=1;
w3=1;
w4=1;
break;
case 1:
w1=1;
w2=0;
w3=1;
w4=1;
break;
case 2:
w1=1;
w2=1;
w3=0;
w4=1;
break;
case 3:
w1=1;
w2=1;
w3=1;
w4=0;
break;
}
}
void display()
{
if(n>3)n=0;
P0=0;
wx(n);
P0=seg[sd[n]];
delay(3);
n++;
}
//键盘扫描
{
uchar i;
uchar key_back;
key_back=0;
if(!key1|!key2|!key3)
{
for(i=7;i>0;i--)display();
if(!key1|!key2|!key3)
{
if(!key1) key_back=1;
else if(!key2) key_back=2;
else if(!key3) key_back=3;
}
while(!key1|!key2|!key3)display();
}
return key_back;
}
//======================
//按键处理
void key_action(key_back)
{
if(key_back==1)
{
MODE++;
if(MODE>2)MODE=0;
}
else if(key_back==2)
{
if(MODE==1)
{
H_Temp++;
if(H_Temp>150)H_Temp=150;
}
else
{
if(L_Temp>150)L_Temp=150;
}
}
else if(key_back==3)
{
if(MODE==1)
{
H_Temp--;
if(H_Temp>150)H_Temp=0;
}
else
{
L_Temp--;
if(L_Temp>150)L_Temp=0;
}
}
}
//======================
//显示数据处理
void Fuction()
{
if(!MODE)
{
sd[0]=temp_value/10;
sd[1]=temp_value%10;
sd[2]=10;
sd[3]=temp_value1;
}
else if(MODE==1)
{
sd[0]=12;//H
sd[1]=11;//不显示
sd[2]=H_Temp/10;
sd[3]=H_Temp%10;
}
else if(MODE==2)
{
sd[0]=13;//L
sd[1]=11;//灭
sd[2]=L_Temp/10;
sd[3]=L_Temp%10;
}
}
//==================
//检查报警上下限
void Check_Alarm()
{
if((temp_value>H_Temp)||(temp_value<L_Temp))Alarm_en=1;
else if((temp_value==H_Temp)&&(temp_value1>0))Alarm_en=1;
else Alarm_en=0;
if(Alarm_en)key_sound(300);
}
void main()
{
uchar i;
uchar key_back;
Init_DS18B20();//DS18B20初始化
ReadTemp();
while(1)
{
i++;
if(i==250)
{
i=0;
ReadTemp();//检查报警
}
Fuction();//显示处理
key_back==key_scan();
if(key_back)key_action(key_back);
display();
}
}