欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機實現交通燈 [打印本頁]

作者: 酷酷的MC    時間: 2019-11-25 23:37
標題: 51單片機實現交通燈
//上電南北通行30秒,5秒倒計時亮黃燈,30秒結束,東西通行,后面依次交替,
//增加了2個應急按鍵,按下S3南北通行30秒,30秒結束時回到應急前的狀態,同理按下S2.....
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define led P0
sbit s3=P3^5;//南北應急通行
sbit s2=P3^4;//東西應急通行
sbit wei1=P2^1;sbit wei0=P2^0;//數碼管位選
sbit red0=P2^5;sbit green0=P2^6;sbit yellow0=P2^7;//南北紅綠黃燈
sbit red1=P2^4;sbit green1=P2^2;sbit yellow1=P2^3;//東西紅綠黃燈
//uchar code display[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0 ---- 9,共陽
uchar code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//共陰數碼管0---9,a---f,滅
uchar buf[2]={3,0};//初始顯示30
uchar num0,num1;//1s計時
uchar counter0=30;//30s倒計時
uchar counter1=30;//30s倒計時
bit flag1=0;//正常南北東西切換
bit flag2=0;//應急南北東西切換
bit flag3=0;//正常與應急切換,初始為正常
uchar temp;//緩存標記
//==============================================================================================
void time0_init()
{
        TMOD=0x11;//定時器0,1均工作于方式1
        TH0=(65535-50000)/256;//定時50ms
        TL0=(65535-50000)%256;
           TH1=(65535-50000)/256;//定時50ms
        TL1=(65535-50000)%256;
        ET0=ET1=EA=TR0=1;TR1=0;
}
void delay1m(uint x)//毫秒級延時函數
{
  uint i,j;
  for(i=0;i<x;i++)      //連數x次,約 x ms
      for(j=0;j<120;j++);   //數120 次,約1 ms
}
void scan()//數碼管掃描函數
{
        wei1=1;wei0=0;led=display[buf[1]];
        delay1m(5);led=0x00;
        wei1=0;wei0=1;led=display[buf[0]];
        delay1m(5);led=0x00;
}
void convert(uchar dat)//將數據轉成適合數碼管顯示的數
{
        buf[0]=dat/10;
        buf[1]=dat%10;
}
void main()//主函數
{
         time0_init();//初始化
         while(1)
         {
                  if(flag3==0){convert(counter0);}//正常數據轉換
                 else if(flag3==1){{convert(counter1);}}//應急數據轉換
                  scan();//倒計時顯示
                 //===================================================================================
                 if((flag1==0)&&(flag3==0))//南北通行
                 {
                          red0=green1=yellow0=yellow1=1;green0=red1=0;
                         if(counter0<=5){yellow0=red1=0;red0=green0=yellow1=green1=1;}
                 }
                 else if((flag1==1)&&(flag3==0))//東西通行
                 {
                          red1=yellow1=green0=yellow0=1;green1=red0=0;
                         if(counter0<=5){yellow1=red0=0;red1=green1=yellow0=green0=1;}
                 }
                 //===================================================================================
                 if(s3==0)//南北應急按鍵
                 {
                         delay1m(3);
                        if(s3==0)
                        {
                            TR0=0;flag3=1;flag2=0;
                                TR1=1;counter1=30;
                       
                        }while(!s3);
                 }
                 if(s2==0)//東西應急按鍵
                 {
                         delay1m(3);
                        if(s2==0)
                        {
                                TR0=0;flag3=flag2=1;
                                TR1=1;counter1=30;
                       
                        }while(!s2);
                 }
                 //====================================================================================
                 if((flag2==0)&&(flag3==1))//南北應急通行
                 {
                          red0=yellow0=green1=yellow1=1;green0=red1=0;
                         if(counter1<=5){yellow0=red1=0;red0=green0=yellow1=green1=1;}
                 }
                 else if((flag2==1)&&(flag3==1))//東西應急通行
                 {
                          red1=yellow1=green0=yellow0=1;green1=red0=0;
                         if(counter1<=5){yellow1=red0=0;red1=green1=yellow0=green0=1;}
                 }
         }
}
void time0_interrupt()interrupt 1
{
        TH0=(65535-50000)/256;//定時50ms
        TL0=(65535-50000)%256;
        num0++;
        if(num0==20)//1s時間
        {
                num0=0;counter0--;
                if(counter0==0){counter0=30;flag1=~flag1;}
        }

}
void time1_interrupt()interrupt 3
{
        TH1=(65535-50000)/256;//定時50ms
        TL1=(65535-50000)%256;
        num1++;
        if(num1==20)//1s時間
        {
                num1=0;counter1--;
                if(counter1==0){TR0=1;flag3=0;}
        }
}

交通燈.png (96.71 KB, 下載次數: 42)

交通燈.png

作者: eihf    時間: 2019-11-26 17:04
為什么下載了執行不了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1