|
什么意思?为什么要sbit baojing=P1^1//直接报警按键; |
| sbit baojing=P1^1//直接报警按键; |
glinfei 发表于 2021-4-12 09:17 红灯和绿灯在按键后都能亮,只有黄灯不亮,led方向没接反啊.我现在的问题就是不管hongwai 是高电平还是低电平,黄灯都不亮,这个应该怎么解决啊? ![]() |
|
好的,还有个问题就是为什么左边的哪个单刀双掷开关在转换高低电平时候黄灯不亮呢?这是代码: if(hongwai)//如果感应到人黄灯亮 huang=1; else huang=0;//感应不到人黄灯灭 if(flag==5)//如果flag等于5 { if(hongwai)//如果感应到人 { butter=0;//蜂鸣器响 EA=1;//开中断 } |
| LED都接反了,你放大看看就知道了,比如要黄灯亮,按你接的是要huang=1;且按钮那边为0才行 |
|
如果下面语句正确 huang=0;//初始黄灯亮 ??????? lv=0;//初始绿灯亮 ???????? hong=0;//初始红灯亮 那么仿真电路里的三个发光管要采用灌电流方式即正极接VCC |
|
void main()//主函数 { huang=0;//初始黄灯亮 ??????? lv=0;//初始绿灯亮 ???????? hong=0;//初始红灯亮 ???????? timer1init();//初始化定时器 while(1) { if(!baojing)//如果直接报警键被按下 { delay(5);//延时消抖 if(!baojing)//判断报警键是不是被按下 { hong=1;//红灯亮 ???????????? lv=0; //绿灯灭 ?????????? 你看矛盾的干活 ![]() ![]() ![]() |
51hei团团 发表于 2021-4-11 20:28 #include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit huang=P2^0;//黄灯sbit lv=P2^2;//绿灯sbit hong=P2^4;//红灯sbit hongwai=P1^0;//热释电sbit butter=P2^6;//蜂鸣器低电平开蜂鸣器sbit baojing=P1^1//直接报警按键;sbit bufang=P1^7;//布防按键sbit quxiao=P3^4;//取消按键uchar tt=0;//定时器变量uchar num=0;//定时的计时变量uchar flag=0;//标志位void timer1init(void)//定时器1,16位方式2{ EA=0; TMOD=0x11;//设置定时器0为工作方式1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1;//开定时器0中断 TR0=1;//启动定时器0 tt=0;// EA=0;//关总中断} void delay(uint z)//延时函数{ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void main()//主函数{ huang=0;//初始黄灯亮 lv=0;//初始绿灯亮 hong=0;//初始红灯亮 timer1init();//初始化定时器 while(1) { if(!baojing)//如果直接报警键被按下 { delay(5);//延时消抖 if(!baojing)//判断报警键是不是被按下 { hong=1;//红灯亮 lv=0; //绿灯灭 flag=7;//标志位等于7 butter=0;//蜂鸣器响 EA=0;//关中断 } while(!baojing);//判断按键是不是弹开 delay(5);//如果弹开延时消抖 while(!baojing);//弹开后跳出程序 } if((!bufang)&&(flag<4))//在初始状态和按下取消键后可以进去这个函数 { delay(5);//延时消抖 if(!bufang)//如果布防被按下 { EA=1; //开定时器 flag=2;//另=2 } while(!bufang);//布防键是不是弹开 delay(5);//延时 while(!bufang);//布防键弹开 } if(!quxiao)//如果取消键按下 { delay(5);//延时消抖 if(!quxiao)//取消键是不是按下 { flag=3;//FLAG等于3 butter=1;//蜂鸣器不响 tt=0;// num=0;//定时初始0 EA=0;//关中断 delay(5);//延时消抖 lv=0;//绿灯灭 hong=0;//红灯灭 } while(!quxiao);//取消按键抬开 while(!quxiao);//如果弹开跳出 } if(flag==4)//如果布防时间到 { tt=0;//清计数为0 EA=0;//关中断 num=0;//记的秒数清零 lv=1;//关绿灯 flag=5;//flag等于5 } if(hongwai)//如果感应到人黄灯亮 huang=1; else huang=0;//感应不到人黄灯灭 if(flag==5)//如果flag等于5 { if(hongwai)//如果感应到人 { butter=0;//蜂鸣器响 EA=1;//开中断 } } }}void time0() interrupt 1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==10) {tt=0; num++;} if((flag==5)&&(num%2==0))//布防15秒后会让flag=5 ,num为偶数灯亮 hong=1; if((flag==5)&&(num%2==1))//布防15秒后会让flag=5 ,num为奇数灯灭 hong=0; if((flag==2)&&(num%2==0))//按键布防键后flag等于2,num为偶数灯亮 lv=1; if((flag==2)&&(num%2==1)) // 按键布防键后flag等于2,num为奇数灯灭 lv=0; if((flag==2)&&(num==30))//布防时间,num=30即15秒,可以更改此实现布防延迟时间 flag=4; } |
| 应该是你的程序有问题,程序呢,没程序大家无法分析啊 |