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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1369|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

mini51單片機交通燈程序,如何通過按鍵修改紅綠燈的時間?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1026861 發(fā)表于 2022-5-17 18:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
問一下,如何通過按鍵修改紅綠燈的時間啊,如何添加程序求單片機大佬講解

單片機源程序如下:
#include <reg51.h>
#define        uchar        unsigned char
#define        uint        unsigned int
/*****定義控制位**********************/
sbit        K4=P3^2;                        //恢復(fù)正常
sbit        K3=P3^3;                        //緊急(全部紅燈)
sbit        K2=P3^4;                        //東西通行
sbit        K1=P3^5;                        //南北通行

sbit        EW_LED2=P2^3;        //EW_LED2控制位
sbit        EW_LED1=P2^2;        //EW_LED1控制位
sbit        SN_LED2=P2^1;        //SN_LED2控制位
sbit        SN_LED1=P2^0;        //SN_LED1控制位

sbit  SN_Yellow=P1^6; //SN黃燈
sbit  SN_Red=P1^7;    //SN紅燈
sbit  SN_Green=P1^5;  //SN綠燈
sbit  EW_Yellow=P1^2; //EW黃燈
sbit  EW_Red=P1^3;    //EW紅燈
sbit  EW_Green=P1^1;  //EW綠燈

bit          Restore_flag=0;                        //恢復(fù)正常標(biāo)志位
bit   Flag_SN_Yellow;     //SN黃燈標(biāo)志位
bit   Flag_EW_Yellow;     //EW黃燈標(biāo)志位
char        Time_EW;  //東西方向倒計時單元
char        Time_SN;  //南北方向倒計時單元
uchar EW=25,SN=30;     //程序初始化賦值      
uchar EW1=30,SN1=25;   //用于存放修改值的變量
uchar KeyNumber=0;
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~~~~9段選碼
uchar code S[9]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84,0x88};//交通信號燈控制代碼

/**********************延時子程序************************/
void delay_ms(uint x) //延時ms
{
        uint i,j;
        for(i=x;i>0;i--)
        for(j=110;j>0;j--);
}
/*****************顯示函數(shù)**************************/
void Display(void)
{
        char h,l;
        h=Time_EW/10;
        l=Time_EW%10;
  P0=table[l];EW_LED2=0;delay_ms(1);EW_LED2=1;
  P0=table[h];EW_LED1=0;delay_ms(1);EW_LED1=1;                                //東西方向數(shù)碼管顯示
        
        h=Time_SN/10;
        l=Time_SN%10;
        P0=table[l];SN_LED2=0;delay_ms(1);SN_LED2=1;
  P0=table[h];SN_LED1=0;delay_ms(1);SN_LED1=1;                                //南北方向數(shù)碼管顯示        
}

/**********************INT0中斷服務(wù)程序(按鍵掃描)*****************/
void int0_FXR() interrupt 0
{
        uchar FXR=P2;
        FXR=FXR&0Xf0;
        switch(FXR)
                {
                case 0x70 : KeyNumber = 1; break;
                case 0xb0 : KeyNumber = 2; break;
                case 0xd0 : KeyNumber = 3; break;
                case 0xe0 : KeyNumber = 4; break;
                default:KeyNumber = 0;
                }
}
/**********************T0中斷服務(wù)程序*******************/
void timer0()  interrupt 1
{
        static uchar count;                         //count為靜態(tài)變量初值為0
        TL0 = 0xB0;                                                          //重賦定時初值50ms
        TH0 = 0x3C;                                                         //重賦定時初值50ms
        count++;                                                                 //計數(shù)
        if(count==10)                                           //加快閃爍速度
        {
          if(Flag_SN_Yellow==1)  //測試南北黃燈標(biāo)志位
          {SN_Yellow=~SN_Yellow;}//南北黃燈閃爍
          if(Flag_EW_Yellow==1)  //測試東西黃燈標(biāo)志位
          {EW_Yellow=~EW_Yellow;}//東西黃燈閃爍
        }
        if(count==20)                                                                         //20*50=1000ms=1S        
        {
                Time_EW--;                                                                         //東西方向倒計時
                Time_SN--;                                                                   //南北方向倒計時
        if(Flag_SN_Yellow==1)                                        //測試南北黃燈標(biāo)志位
            {SN_Yellow=~SN_Yellow;}                //南北黃燈閃爍
        if(Flag_EW_Yellow==1)                                        //測試東西黃燈標(biāo)志位
            {EW_Yellow=~EW_Yellow;}                //東西黃燈閃爍
        count=0;
        }
}
void keyboard()
{
while(KeyNumber)
        {
        if(KeyNumber)
                {
                if(KeyNumber==1)
                        {
                                TR0=0;
                                Time_EW=0;                                                        //東西數(shù)碼管賦值0s        
                                Time_SN=0;                                                        //南北數(shù)碼管賦值0s                                                
                                while(KeyNumber==1)                        
                                {
                                  Flag_EW_Yellow=0;          //東西關(guān)黃燈顯示信號
                                        P1=~S[0];                                                 //南北通行,東西紅燈
                                        Display();                                  //調(diào)用顯示函數(shù)                          
                                }
                  }
                if(KeyNumber==2)
                        {        
                                TR0=0;
                                Time_EW=0;                                                        //東西數(shù)碼管賦值0s        
                                Time_SN=0;                                                        //南北數(shù)碼管賦值0s
                                while(KeyNumber==2)                        
                                        {  
                                                Flag_SN_Yellow=0;          //東西關(guān)黃燈顯示信號                          
                                                P1=~S[4];                                                         //東西通行,南北紅燈
                                                Display();                                          //調(diào)用顯示函數(shù)
                                        }
                        }
                if(KeyNumber==3)
                        {        
                                TR0=0;
                                Time_EW=0;                                                         //東西數(shù)碼管賦值0s
                                Time_SN=0;                                                         //南北數(shù)碼管賦值0s
                                while(KeyNumber==3)
                                        {
                                                P1=~S[8];                                                          //所有路口紅燈
                                                Display();                                           //調(diào)用顯示函數(shù)
                                        }
                        }
                if(KeyNumber==4)
                        {
                                TR0=1;
                                Time_EW=25;                                                        //東西數(shù)碼管賦值25s        
                                Time_SN=30;                                                        //南北數(shù)碼管賦值30s
                                Restore_flag=1;
                                break;
                        }
                }
        }
}
/*********************主程序開始**********************/
void main(void)
{
/*********************中斷初始化**********************/
        IT0=1;                                                                         //設(shè)置外部中斷0觸發(fā)方式(下降沿觸發(fā))
        EX0=1;                                                                         //打開外部中斷0的IE寄存器中斷
        EA=1;                                                                           //CPU開中斷總允許
        ET0=1;                                                                         //開定時中斷
        TMOD=0x01;                                                         //定時器工作于方式1
        TL0 = 0xB0;                                                          //設(shè)置定時初值50ms
        TH0 = 0x3C;                           //設(shè)置定時初值50ms
        TF0 = 0;                             //清除TF0標(biāo)志
        TR0 = 1;                             //定時器0開始計時
while(1)                                                                                
        {
                keyboard();
                if(Restore_flag)
                break;               
                /*******S1狀態(tài)(東西直行狀態(tài))**********/
                Time_EW=EW;                                                        //東西數(shù)碼管賦值25s        
                Time_SN=SN;                                                        //南北數(shù)碼管賦值30s
          while(Time_SN>=6)                                //南北方向倒計時前25s循環(huán)體
           {  
                         Flag_SN_Yellow=0;          //東西關(guān)黃燈顯示信號                          
                         P1=~S[4];                                                         //東西通行,南北紅燈
                         Display();                                          //調(diào)用顯示函數(shù)
                         keyboard();
                         if(Restore_flag)
                         break;
                 }
                /*******S2狀態(tài)(東西直行黃燈閃爍狀態(tài))**********/
            P1=0xff;                                                        //所有路口紅綠燈短時熄滅
                 if(Time_SN==5)                                        //當(dāng)南北倒計時為5s時
                                Time_EW=5;                                        //東西重新從5s開始倒計時
          while(Time_SN>=1)                                //南北方向倒計時最后5s循環(huán)體
           {
                         Flag_EW_Yellow=1;                //東西開黃燈信號位
             SN_Red=0;                                                //東西黃燈開始閃爍,南北紅燈亮        
             Display();                                                //調(diào)用顯示函數(shù)
                         keyboard();
                         if(Restore_flag)
                         break;                        
           }
                /***********賦值(東西通行變南北通行)**********/
                EW=EW1;                                                                        //東西25s-->30s
                SN=SN1;                                                                        //南北30s-->25s         
                /*******S3狀態(tài)(南北直行狀態(tài))**********/                        
                Time_EW=EW;                                                        //東西數(shù)碼管賦值30s
                Time_SN=SN;                                                        //南北數(shù)碼管賦值25s
           while(Time_EW>=6)                        //東西方向倒計時前25s循環(huán)體
            {
                                Flag_EW_Yellow=0;          //東西關(guān)黃燈顯示信號
                                P1=~S[0];                                                 //南北通行,東西紅燈
              Display();                                  //調(diào)用顯示函數(shù)
                                keyboard();        
                                if(Restore_flag)
                          break;               
                  }
                /*******S4狀態(tài)(南北直行黃燈閃爍狀態(tài))**********/
                        P1=0Xff;                                             //所有路口紅綠燈短時熄滅
                        if(Time_EW==5)                                //當(dāng)東西倒計時為5s時
                                Time_SN=5;                                        //南北重新從5s開始倒計時
                while(Time_EW>=1)                                //東西方向倒計時最后5s循環(huán)體
           {
             Flag_SN_Yellow=1;          //南北開黃燈信號位
                         EW_Red=0;            //南北黃燈開始閃爍,東西紅燈亮
             Display();                                    //調(diào)用顯示函數(shù)
                         keyboard();
                         if(Restore_flag)
                         break;                                 
           }
          /***********賦值(南北通行變東西通行)**********/
          EW=SN1;                                                                        //東西30s-->25s
                SN=EW1;                                                                        //南北25s-->30s         
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 羞羞视频免费在线 | 国产色视频网站 | 亚洲精品视频在线看 | 91porn成人精品 | 欧美性极品xxxx做受 | 黄色片视频网站 | 国产精品不卡 | 熟女毛片 | 丁香一区二区 | 一级做a爰片性色毛片 | 亚洲在线观看视频 | 日本不卡一区 | 成人免费一区二区三区视频网站 | 精品无码久久久久久国产 | 国产精品久久久久久吹潮日韩动画 | www成人免费视频 | 777zyz色资源站在线观看 | 男女视频免费 | 蜜臀久久99精品久久久久野外 | 色综合视频在线 | 日日日操 | 91精品久久久久久久久久入口 | 毛片在线视频 | 在线成人 | 精品久久久久一区 | 久久精品欧美一区二区三区不卡 | 成人欧美一区二区三区黑人孕妇 | 欧美九九 | 伊人天堂网 | 中文字幕在线观看第一页 | 精品一区二区在线视频 | 午夜性视频 | 国产精久久久久久 | 日韩精品一二三 | 久久婷婷香蕉热狠狠综合 | 国产精品大片在线观看 | 久久久一区二区 | 狠狠涩 | 欧美一级黄色免费 | 五月婷婷视频 | 亚洲精品一级 |