1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1648|回復: 0
收起左側

紅綠燈

[復制鏈接]
ID:343606 發表于 2018-6-2 17:09 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit RED_A=P1^0;     //東西向紅燈
sbit YEL_A=P1^1;      //東西向黃燈
sbit GRE_A=P1^2;     //東西向綠燈
sbit RED_B=P1^3;     //南北向紅燈
sbit YEL_B=P1^4;      //南北向黃燈
sbit GRE_B=P1^5;     //南北向綠燈
uchar Time_Count=0,Flash_Count=0,Operation_Type=1;     //分別用于計中斷次數,計閃爍次數(2倍),保存當前狀態值
void time0() interrupt 1    //T0定時器中斷服務函數
{
TH0=(65536-50000)/256;    //重置定時器初值
TL0=(65536-50000)%256;
switch(Operation_Type)   //根據狀態值執行相應語句
{
  case 1: RED_A=0;YEL_A=0;GRE_A=1;   //東西向綠燈亮
               RED_B=1;YEL_B=0;GRE_B=0;   //南北向紅燈亮
               if(++Time_Count!=100)return;   //5s時間未到退出switch語句
         Time_Count=0;                  //5s時間到計數值清零
         Operation_Type=2;             //狀態轉移值變為2,準備狀態轉移
         break;               //退出switch語句
case 2: if(++Time_Count!=8)return;   //400ms未到退出switch語句
                Time_Count=0;
           YEL_A=!YEL_A;GRE_A=0;  //東西向黃燈閃,綠燈滅
           if(++Flash_Count!=10)return;   //閃爍5次未到退出
           Flash_Count=0;    //閃爍次數清零
           Operation_Type=3;   //狀態轉移值變為3,準備狀態轉移
           break;
  case 3: RED_A=1;YEL_A=0;GRE_A=0;   //東西向紅燈亮
               RED_B=0;YEL_B=0;GRE_B=1;   //南北向綠燈亮
          if(++Time_Count!=100)return;    //5s未到退出
           Time_Count=0;
   Operation_Type=4;   //狀態轉移值變為4,準備狀態轉移
          break;
  case 4: if(++Time_Count!=8)return;   //0.4s未到退出
                Time_Count=0;
           YEL_B=!YEL_B;GRE_B=0;   //南北向黃燈閃爍,綠燈滅
           if(++Flash_Count!=10)return;   //閃爍5次未到退出
           Flash_Count=0;
           Operation_Type=1;   //重新轉移到狀態1
           break;
}
}
void main()
{                                                                                                 
  TMOD=0x01;   
  ET0=1;
  EA=1;
  TH0=(65536-50000)/256;    //定時50ms初值
  TL0=(65536-50000)%256;
  TR0=1;   //啟動T0定時器
  while(1);   
}

















#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit RED_A=P1^0;     
sbit YEL_A=P1^1;     
sbit GRE_A=P1^2;     
sbit RED_B=P1^3;   
sbit YEL_B=P1^4;   
sbit GRE_B=P1^5;   
uchar Time_Count=0,Flash_Count=0,Operation_Type=1;   
void time0() interrupt 1   
{
TH0=(65536-50000)/256;   
TL0=(65536-50000)%256;
switch(Operation_Type)   
{
  case 1: RED_A=0;YEL_A=0;GRE_A=1;                           
               RED_B=1;YEL_B=0;GRE_B=0;  
               if(++Time_Count!=100)return;   
         Time_Count=0;                 
         Operation_Type=2;            
         break;              
case 2: if(++Time_Count!=8)return;   
                Time_Count=0;
           YEL_A=!YEL_A;GRE_A=0;
           if(++Flash_Count!=10)return;  
           Flash_Count=0;   
           Operation_Type=3;  
           break;
  case 3: RED_A=1;YEL_A=0;GRE_A=0;   
               RED_B=0;YEL_B=0;GRE_B=1;   
          if(++Time_Count!=100)return;   
           Time_Count=0;
   Operation_Type=4;  
          break;
  case 4: if(++Time_Count!=8)return;   
                Time_Count=0;
           YEL_B=!YEL_B;GRE_B=0;   
           if(++Flash_Count!=10)return;
           Flash_Count=0;
           Operation_Type=1;  
           break;
}
}
void main()
{                                                                                                 
  TMOD=0x01;   
  ET0=1;
  EA=1;
  TH0=(65536-50000)/256;   
  TL0=(65536-50000)%256;
  TR0=1;
  while(1);   
}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表