谁能帮我看看这个单片机C语言程序,总有错误,不知道怎么改。谢谢啦

我做的是火灾自动报警系统,程序里的nd是实时浓度,我用proteus仿真时是用脉冲信号实现的

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define Codeout P2//定义段码输出口
#define Dsout P0 //定义数码管位选输出口
uchar Code[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码
uchar Dscode[] = {0xf7,0xef,0xdf,0xbf}; //显示位选表
sbit beep=P1^7; //定义蜂鸣器
sbit rled=P3^5; //定义发光二极管
sbit gled=P3^6;
sbit S1=P1^0; //定义按键
sbit S2=P1^1;
sbit S3=P1^2;
sbit nd=P3^7;
uint a,nd;

/*************延迟子程序*****************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

/****************LED和蜂鸣器报警*************/
void alarm(void)
{ uchar i;

if(nd<a)
{
gled=0;
rled=1;
}
else
{
rled=0;
gled=1;
for(i=0;i<10;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短
{
delay(20); //参数决定发声的频率,估算值,可以自行更改参数并
beep=~beep;
}
beep=1; //喇叭停止工作,间歇的时间,可更改

}

}

/*************浓度显示*************/
void display(uint nd)
{ P0=0xf7;
P2=Code[nd/1000]; //显示千位
delay(5);
P0=0x08;

P0=0xef;
P2=Code[nd%1000/100]; //显示百位
delay(5);
P0=0x10;

P0=0xdf;
P2=Code[nd%1000%100/10]; //显示十位
delay(5);
P0=0x20;

P0=0xbf;
P2=Code[nd%1000%100%10]; //显示个位
delay(5);
P0=0x40;
}
void main()
{
beep=1;
gled=0;
a==1000;

while(1)
{
if(S2==0)
{delay(10);
a++;
}
if(S3==0)
{delay(10);
a--;
}
display();
alarm();
if(beep=0)
{ rled=1;
gled=0;
beep=~beep;

}
}

}

sbit nd=P3^7;
uint a,nd;
这里定义了两个nd,重复定义错误追问

改过了,还是有错误,编译之后说if(nd<a)这里面的'<': bad operand type,这个是什么问题呢?

追答

//我做的是火灾自动报警系统,程序里的nd是实时浓度,我用proteus仿真时是用脉冲信号实现的
1、display();这里()要加参数
2、if(beep=0) ‘=’换成‘==’
4、 a==1000;==换成=
5、sbit nd=P3^7;这里的nd换掉
#include
#define uchar unsigned char
#define uint unsigned int
#define Codeout P2//定义段码输出口
#define Dsout P0 //定义数码管位选输出口
uchar Code[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码
uchar Dscode[] = {0xf7,0xef,0xdf,0xbf}; //显示位选表
sbit beep=P1^7; //定义蜂鸣器
sbit rled=P3^5; //定义发光二极管
sbit gled=P3^6;
sbit S1=P1^0; //定义按键
sbit S2=P1^1;
sbit S3=P1^2;
sbit nd=P3^7;
uint a,ssnd;

/*************延迟子程序*****************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

/****************LED和蜂鸣器报警*************/
void alarm(void)
{ uchar i;

if(ssnd<a)
{
gled=0;
rled=1;
}
else
{
rled=0;
gled=1;
for(i=0;i<10;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短
{
delay(20); //参数决定发声的频率,估算值,可以自行更改参数并
beep=~beep;
}
beep=1; //喇叭停止工作,间歇的时间,可更改

}

}

/*************浓度显示*************/
void display(uint nd)
{ P0=0xf7;
P2=Code[nd/1000]; //显示千位
delay(5);
P0=0x08;

P0=0xef;
P2=Code[nd%1000/100]; //显示百位
delay(5);
P0=0x10;

P0=0xdf;
P2=Code[nd%1000%100/10]; //显示十位
delay(5);
P0=0x20;

P0=0xbf;
P2=Code[nd%1000%100%10]; //显示个位
delay(5);
P0=0x40;
}
void main()
{
beep=1;
gled=0;
a=1000;

while(1)
{
if(S2==0)
{delay(10);
a++;
}
if(S3==0)
{delay(10);
a--;
}
display(ssnd);
alarm();
if(beep==0)
{ rled=1;
gled=0;
beep=~beep;

}
}

}

追问

好了,谢谢啦!!!我还想问一下那个proteus仿真时是用脉冲信号当输入信号时那个pluse设置什么参数?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-20
是,看楼下的
相似回答