51hei團團 發(fā)表于 2021-4-11 20:28
應(yīng)該是你的程序有問題,程序呢,沒程序大家無法分析啊
#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;//設(shè)置定時器0為工作方式1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1;//開定時器0中斷 TR0=1;//啟動定時器0 tt=0;// EA=0;//關(guān)總中斷} void delay(uint z)//延時函數(shù){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void main()//主函數(shù){ 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;//關(guān)中斷 } while(!baojing);//判斷按鍵是不是彈開 delay(5);//如果彈開延時消抖 while(!baojing);//彈開后跳出程序 } if((!bufang)&&(flag<4))//在初始狀態(tài)和按下取消鍵后可以進去這個函數(shù) { 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;//關(guān)中斷 delay(5);//延時消抖 lv=0;//綠燈滅 hong=0;//紅燈滅 } while(!quxiao);//取消按鍵抬開 while(!quxiao);//如果彈開跳出 } if(flag==4)//如果布防時間到 { tt=0;//清計數(shù)為0 EA=0;//關(guān)中斷 num=0;//記的秒數(shù)清零 lv=1;//關(guān)綠燈 flag=5;//flag等于5 } if(hongwai)//如果感應(yīng)到人黃燈亮 huang=1; else huang=0;//感應(yīng)不到人黃燈滅 if(flag==5)//如果flag等于5 { if(hongwai)//如果感應(yīng)到人 { 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為偶數(shù)燈亮 hong=1; if((flag==5)&&(num%2==1))//布防15秒后會讓flag=5 ,num為奇數(shù)燈滅 hong=0; if((flag==2)&&(num%2==0))//按鍵布防鍵后flag等于2,num為偶數(shù)燈亮 lv=1; if((flag==2)&&(num%2==1)) // 按鍵布防鍵后flag等于2,num為奇數(shù)燈滅 lv=0; if((flag==2)&&(num==30))//布防時間,num=30即15秒,可以更改此實現(xiàn)布防延遲時間 flag=4; } |