久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1570|回復: 0
打印 上一主題 下一主題
收起左側

c51單片機交通等程序及仿真圖

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 xiepp333 于 2019-10-14 08:47 編輯


#include <reg51.h>                                             
#define uchar unsigned char   
#define uint unsigned int     
sbit P1_0 =P1^0; sbit P1_1 =P1^1; sbit P1_2 =P1^2; sbit P1_3 =P1^3;
sbit ew_red=P0^4;              //P0.0 東西紅燈
sbit ew_yellow=P0^5;           //P0.1 東西黃燈
sbit ew_green=P0^6;            //P0.2  東西綠燈
sbit sn_red=P0^0;              //P0.3 南北紅燈
sbit sn_yellow=P0^1;           //P0.4 南北黃燈
sbit sn_green=P0^2;            //P0.5 南北綠燈
sbit dongxi=P3^2;               //東西 通行
sbit nanbei= P3^3;             //南北 通行
sbit all_not=P3^4;             //P3.4為全部禁行
sbit dxjia=P3^0;   sbit dxjian=P3^1; sbit nbjia=P3^5;sbit nbjian=P3^6;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段碼顯示表
uchar a,b,c,d;                                                                     
uchar nanbei_time;            //南北通行時間
uchar dongxi_time;          //東西通行時間
uchar time_flag;               //時間標志位
uchar t_flag;            //t_flag=0時南北通行,=1時東西通行
uchar time_m;           //定義計時變量
void  nanbeitong()     //南北通行
{
              ew_red=0; ew_green=1; ew_yellow=1;               //東西紅燈
              sn_red=1; sn_green=0; sn_yellow=1;               //南北綠燈
}
void  dongxitong()   //東西通行
{
              ew_red=1; ew_green=0; ew_yellow=1;              //東西綠燈
              sn_red=0; sn_green=1; sn_yellow=1;              //南北綠燈
}
void delay(uchar z)          //延時程序
{
              uchar i,j;                   //一個毫秒的延時
              for(i=z;i>0;i--)            
                            for(j=110;j>0;j--);                           
}
void display_time( )      //顯示倒計時
{
              P1_0 =0;P1_1 =1;P1_2 =1;P1_3 =1;
              P2=table[a/10]; //東西十位顯示
              delay(2);
              P2=0;P1_0 =1;
              P1_1 =0;      
              P2=table[b%10];//東西個位顯示
              delay(2);
              P2=0;P1_1 =1;
              P1_2 =0;        
              P2=table[(c)/10];//南北十位顯示
              delay(2);
              P2=0;P1_2 =1;
              P1_3 =0;        
              P2=table[(d)%10];//南北個位顯示
              delay(2);
              P2=0;P1_3 =1;
}
void init0_timer0()                            //定時器0初始化
{
              TMOD=0X01;                                              //定時器0設置為模式1
              TH0=(65536-50000)/256;
              TL0=(65536-50000)%256;
              ET0=1;EA=1;TR0=1;
}
void keyscan()                                                        //鍵盤掃描
{
              if(nanbei==0)                                          //判斷南北通行按鍵
              {
                            delay(2);                                   
                            if(nanbei==0)                            //防抖動
                            {
                                          nanbeitong();              //調用南北通行子程序
                                          while(!nanbei) display_time();   
                                          TR0=0;                                
                            }
              }
              if(dongxi==0)                                          //判斷東西通行按鍵
              {
                            delay(2);                              
                            if(dongxi==0)                            //防抖動
                            {
                            dongxitong();                            //調用東西通行子程序
                            while(!dongxi) display_time();              
                            TR0=0;                                       
                            }
              }
              if(all_not==0)                                                       //判斷全部禁行按鍵
              {
                            delay(2);                                               //延時2毫秒
                            if(all_not==0)                                          //再次全部禁行按鍵
                            {
                            TR0=0;                                      //進入全部禁行子程序,關閉定時器T0
                            ew_red=0; ew_green=1; ew_yellow=1; //東西紅燈亮            
                            sn_red=0; sn_green=1; sn_yellow=1; //南北紅燈亮           
                            }
              }
                          if(dxjia==0)                                                       //判斷東西加按鍵
              {
                            delay(200);                                               //延時
                            if(dxjia==1)                                          //再次全部禁行按鍵
                            {
                                                        dongxi_time=dongxi_time+1;
                                                         time_flag=time_flag+1;
                            }
              }
                          if(dxjian==0)                                                       //判斷東西減按鍵
              {
                            delay(200);                                               //延時
                            if(dxjian==1)                                          //再次全部禁行按鍵
                            {
                                                        dongxi_time=dongxi_time-1;
                                                         time_flag=time_flag-1;
                            }
              }
                          if(nbjia==0)                                                       //判斷南北加按鍵
              {
                            delay(200);                                               //延時
                            if(nbjia==1)                                          //再次全部禁行按鍵
                            {
                                                        nanbei_time=nanbei_time+1;
                                                         time_flag=time_flag+1;
                            }
              }
                          if(nbjian==0)                                                       //判斷南北減按鍵
              {
                            delay(200);                                               //延時
                            if(nbjian==1)                                          //再次全部禁行按鍵
                            {
                                                        nanbei_time=nanbei_time-1;
                                                         time_flag=time_flag-1;
                            }
              }

}
void main()                                                                    //主程序
{                           
              nanbei_time=24;                                                 //初始化南北通行時間
              dongxi_time=12;                                               //初始化東西通行時間
              t_flag=0;
              time_flag=nanbei_time;
              time_m =0;                                            //計時變量初始化

              init0_timer0();                                            //調用定時器T0初始化子程序
              nanbeitong();                                       //調用南北通行子程序

              while(1)
              {
              keyscan();                         //調用鍵盤掃描
              display_time();                   //調用顯示倒計時
              }
}
void int0_isr() interrupt 1                                            //定時器T0
{
              TH0=(65536-50000)/256;
              TL0=(65536-50000)%256;
              time_m++;                                         //計時變量加1
              if(time_m>=20)                                    //判斷計時變量是否大于20
              {
                            time_m=0;                           //計時變量大于20,則把計時變量清零
                            time_flag--;
                            if(t_flag==0)                                //若t_flag為0,則進入南北通行模式
                            {
                                          if(time_flag>2)
                                          {
                                          nanbeitong();                     //南北通行紅綠燈
                                          a=time_flag;
                                          b=time_flag;
                                          c=time_flag-3;
                                          d=time_flag-3;
                                          }
                                          else if(time_flag>0)                 //若倒計時時間小于2秒
                                          {                                                         
                                          sn_red=1; sn_green=1; sn_yellow=0; //南北黃燈
                                          ew_red=0; ew_green=1; ew_yellow=1; //東西紅燈
                                          a=time_flag;
                                          b=time_flag;
                                          c=0;
                                          d=0;
                                          }
                                          else
                                          {
                                          t_flag=1;                       //改為東西通行模式
                                          time_flag= dongxi_time;              //東西通行時間變量
                                          }                           
                            }
                            if(t_flag==1)                                             //此時為東西通行模式
                            {
                                          if(time_flag>2)                          
                                          {
                                          dongxitong();                              
                                          c=time_flag; d=time_flag;
                                          a=time_flag-3; b=time_flag-3;
                                          }
                                          else if(time_flag>0)
                                          {                                                         
                                          ew_red=1; ew_green=1; ew_yellow=0;  //東西黃燈
                                          sn_red=0; sn_green=1; sn_yellow=1;  //南北紅燈
                                          c=time_flag;d=time_flag;
                                          a=0;b=0;
                                          }
                                          else
                                          {
                                          t_flag=0;                         //改為東西通行模式
                                          time_flag= nanbei_time;           //南北通行時間變量
                                          }                             
                            }                                         
              }
              else if(time_m>=10)                                                //判斷計時變量是否大于10
              {            
                            if(t_flag==0)                                          //若t_flag為0,則進入南北通行模式
                            {
                                          if(time_flag>2)
                                          {
                                          nanbeitong();
                                          }
                                          else if(time_flag>0)
                                          {                                                         
                                          sn_red=1; sn_green=1; sn_yellow=1;
                                          ew_red=0; ew_green=1; ew_yellow=1; //東西紅燈
                                          }
                                          else
                                          {
                                          t_flag=1;                              //此時南北通行計時結束,改為東西通行模式
                                          time_flag= dongxi_time;              //東西通行時間變量
                                          }                           
                            }
                            if(t_flag==1)                                                   //此時為東西通行模式
                            {
                                          if(time_flag>2)
                                          {
                                          dongxitong();
                                          }
                                          else if(time_flag>0)
                                          {                                                         

                                          ew_red=1; ew_green=1; ew_yellow=1;
                                          sn_red=0; sn_green=1; sn_yellow=1; //南北紅燈
                                          }
                                          else
                                          {
                                          t_flag=0;                        //東西通行計時結束,改為東西通行模式
                                          time_flag= nanbei_time;              //南北通行時間變量
                                          }                             
                            }                                         
              }                                 
              }



R@JZ~1XIX[3NX(D3M1INS$U.png (142.21 KB, 下載次數: 42)

R@JZ~1XIX[3NX(D3M1INS$U.png

交通燈.zip

171.6 KB, 下載次數: 7, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va欧美va人人爽午夜 | 国产精品三级 | 久久久91精品国产一区二区三区 | 干出白浆视频 | 午夜影院网站 | 国产午夜精品理论片a大结局 | 天天草天天干天天 | 国产视频一区二区在线观看 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 成人精品视频免费 | 成人综合在线视频 | 高清国产午夜精品久久久久久 | 中文字幕视频免费 | 人人爱干| 欧美色综合一区二区三区 | 草樱av | 欧美成人一区二区 | 日韩无 | 欧美日韩一区二区三区四区 | 毛片一区二区三区 | 99久久精品一区二区成人 | 天天综合久久 | 日韩一区二区三区视频在线播放 | 成人亚洲综合 | 日本视频中文字幕 | 欧美中文字幕在线观看 | 久久ww| 欧美黄色小视频 | 亚欧精品一区 | 国产亚洲欧美在线视频 | 一区日韩 | 久久精品亚洲 | 天天干天天插天天 | 九色在线| 精品久久久久久亚洲综合网 | 国产成人精品免高潮在线观看 | 激情亚洲 | 四虎永久免费地址 | 精品国产一区二区三区久久 | 国产一区二区三区 | 99自拍视频|