|
51hei團(tuán)團(tuán) 發(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//直接報(bào)警按鍵;sbit bufang=P1^7;//布防按鍵sbit quxiao=P3^4;//取消按鍵uchar tt=0;//定時(shí)器變量uchar num=0;//定時(shí)的計(jì)時(shí)變量uchar flag=0;//標(biāo)志位void timer1init(void)//定時(shí)器1,16位方式2{ EA=0; TMOD=0x11;//設(shè)置定時(shí)器0為工作方式1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1;//開定時(shí)器0中斷 TR0=1;//啟動(dòng)定時(shí)器0 tt=0;// EA=0;//關(guān)總中斷} void delay(uint z)//延時(shí)函數(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();//初始化定時(shí)器 while(1) { if(!baojing)//如果直接報(bào)警鍵被按下 { delay(5);//延時(shí)消抖 if(!baojing)//判斷報(bào)警鍵是不是被按下 { hong=1;//紅燈亮 lv=0; //綠燈滅 flag=7;//標(biāo)志位等于7 butter=0;//蜂鳴器響 EA=0;//關(guān)中斷 } while(!baojing);//判斷按鍵是不是彈開 delay(5);//如果彈開延時(shí)消抖 while(!baojing);//彈開后跳出程序 } if((!bufang)&&(flag<4))//在初始狀態(tài)和按下取消鍵后可以進(jìn)去這個(gè)函數(shù) { delay(5);//延時(shí)消抖 if(!bufang)//如果布防被按下 { EA=1; //開定時(shí)器 flag=2;//另=2 } while(!bufang);//布防鍵是不是彈開 delay(5);//延時(shí) while(!bufang);//布防鍵彈開 } if(!quxiao)//如果取消鍵按下 { delay(5);//延時(shí)消抖 if(!quxiao)//取消鍵是不是按下 { flag=3;//FLAG等于3 butter=1;//蜂鳴器不響 tt=0;// num=0;//定時(shí)初始0 EA=0;//關(guān)中斷 delay(5);//延時(shí)消抖 lv=0;//綠燈滅 hong=0;//紅燈滅 } while(!quxiao);//取消按鍵抬開 while(!quxiao);//如果彈開跳出 } if(flag==4)//如果布防時(shí)間到 { tt=0;//清計(jì)數(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秒后會(huì)讓flag=5 ,num為偶數(shù)燈亮 hong=1; if((flag==5)&&(num%2==1))//布防15秒后會(huì)讓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))//布防時(shí)間,num=30即15秒,可以更改此實(shí)現(xiàn)布防延遲時(shí)間 flag=4; } |
|