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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

mini51單片機實驗出錯,求大佬幫忙,小弟這廂有禮了

[復制鏈接]
跳轉到指定樓層
樓主
問題 1.單片機演示南北方向與東西方向  紅燈一定和綠燈一起亮(如南北方向紅綠亮而黃燈滅)
問題2.單片機演示的時候南北黃燈閃的時候其他所有燈(包括東西的三個燈)都滅 。 東西方向的黃燈閃的時候 ,其他燈(包括南北的燈)都亮。


下面上單片機代碼,求各位大佬于百忙之中抽出時間,幫幫小弟。
#include <reg51.h>
#define        uchar        unsigned char
#define        uint        unsigned int
/*****定義控制位**********************/
sbit        K4=P3^2;                        //恢復正常
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;          //恢復正常標志位
bit   Flag_SN_Yellow;     //SN黃燈標志位
bit   Flag_EW_Yellow;     //EW黃燈標志位
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--);
}
/*****************顯示函數**************************/
void Display(void)
{
        char h,l;
        h=Time_EW/10;
        l=Time_EW%10;
  P0=table[l];EW_LED2=1;delay_ms(1);EW_LED2=0;
  P0=table[h];EW_LED1=1;delay_ms(1);EW_LED1=0;                                //東西方向數碼管顯示        
        h=Time_SN/10;
        l=Time_SN%10;
        P0=table[l];SN_LED2=1;delay_ms(1);SN_LED2=0;
  P0=table[h];SN_LED1=1;delay_ms(1);SN_LED1=0;                                //南北方向數碼管顯示        
}

/**********************INT0中斷服務程序(按鍵掃描)*****************/
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中斷服務程序*******************/
void timer0()  interrupt 1
{
        static uchar count;                         //count為靜態變量初值為0
        TL0 = 0xB0;                                                          //重賦定時初值50ms
        TH0 = 0x3C;                                                         //重賦定時初值50ms
        count++;                                                                 //計數
        if(count==10)                                           //加快閃爍速度
        {
          if(Flag_SN_Yellow==1)  //測試南北黃燈標志位
          {SN_Yellow=~SN_Yellow;}//南北黃燈閃爍
          if(Flag_EW_Yellow==1)  //測試東西黃燈標志位
          {EW_Yellow=~EW_Yellow;}//東西黃燈閃爍
        }
        if(count==20)                                                                         //20*50=1000ms=1S        
        {
                Time_EW--;                                                                         //東西方向倒計時
                Time_SN--;                                                                   //南北方向倒計時
        if(Flag_SN_Yellow==1)                                        //測試南北黃燈標志位
            {SN_Yellow=~SN_Yellow;}                //南北黃燈閃爍
        if(Flag_EW_Yellow==1)                                        //測試東西黃燈標志位
            {EW_Yellow=~EW_Yellow;}                //東西黃燈閃爍
        count=0;
        }
}
void keyboard()
{
while(KeyNumber)
        {
        if(KeyNumber)
                {
                if(KeyNumber==1)
                        {
                                TR0=0;
                                Time_EW=0;                                                        //東西數碼管賦值0s        
                                Time_SN=0;                                                        //南北數碼管賦值0s                                                
                                while(KeyNumber==1)                        
                                {
                                  Flag_EW_Yellow=0;          //東西關黃燈顯示信號
                                        P1=S[0];                                                 //南北通行,東西紅燈
                                        Display();                                  //調用顯示函數                          
                                }
                  }
                if(KeyNumber==2)
                        {        
                                TR0=0;
                                Time_EW=0;                                                        //東西數碼管賦值0s        
                                Time_SN=0;                                                        //南北數碼管賦值0s
                                while(KeyNumber==2)                        
                                        {  
                                                Flag_SN_Yellow=0;          //東西關黃燈顯示信號                          
                                                P1=S[4];                                                         //東西通行,南北紅燈
                                                Display();                                          //調用顯示函數
                                        }
                        }
                if(KeyNumber==3)
                        {        
                                TR0=0;
                                Time_EW=0;                                                         //東西數碼管賦值0s
                                Time_SN=0;                                                         //南北數碼管賦值0s
                                while(KeyNumber==3)
                                        {
                                                P1=S[8];                                                          //所有路口紅燈
                                                Display();                                           //調用顯示函數
                                        }
                        }
                if(KeyNumber==4)
                        {
                                TR0=1;
                                Time_EW=25;                                                        //東西數碼管賦值25s        
                                Time_SN=30;                                                        //南北數碼管賦值30s
                                Restore_flag=1;
                                break;
                        }
                }
        }
}
/*********************主程序開始**********************/
void main(void)
{
/*********************中斷初始化**********************/
        IT0=1;                                                                         //設置外部中斷0觸發方式(下降沿觸發)
        EX0=1;                                                                         //打開外部中斷0的IE寄存器中斷
        EA=1;                                                                           //CPU開中斷總允許
        ET0=1;                                                                         //開定時中斷
        TMOD=0x01;                                                         //定時器工作于方式1
        TL0 = 0xB0;                                                          //設置定時初值50ms
        TH0 = 0x3C;                             //設置定時初值50ms
        TF0 = 0;                             //清除TF0標志
        TR0 = 1;                             //定時器0開始計時
while(1)                                                                                
        {
                keyboard();
                if(Restore_flag)
                break;               
                /*******S1狀態(東西直行狀態)**********/
                Time_EW=EW;                                                        //東西數碼管賦值25s        
                Time_SN=SN;                                                        //南北數碼管賦值30s
          while(Time_SN>=6)                                //南北方向倒計時前25s循環體
           {  
                         Flag_SN_Yellow=0;          //東西關黃燈顯示信號                          
                         P1=S[4];                                                         //東西通行,南北紅燈
                         Display();                                          //調用顯示函數
                         keyboard();
                         if(Restore_flag)
                         break;
                 }
                /*******S2狀態(東西直行黃燈閃爍狀態)**********/
            P1=0xff;                                                        //所有路口紅綠燈短時熄滅
                 if(Time_SN==5)                                        //當南北倒計時為5s時
                                Time_EW=5;                                        //東西重新從5s開始倒計時
          while(Time_SN>=1)                                //南北方向倒計時最后5s循環體
           {
                         Flag_EW_Yellow=1;                //東西開黃燈信號位
             SN_Red=1;                                                //東西黃燈開始閃爍,南北紅燈亮        
             Display();                                                //調用顯示函數
                         keyboard();
                         if(Restore_flag)
                         break;                        
           }
                /***********賦值(東西通行變南北通行)**********/
                EW=EW1;                                                                        //東西25s-->30s
                SN=SN1;                                                                        //南北30s-->25s         
                /*******S3狀態(南北直行狀態)**********/                        
                Time_EW=EW;                                                        //東西數碼管賦值30s
                Time_SN=SN;                                                        //南北數碼管賦值25s
           while(Time_EW>=6)                        //東西方向倒計時前25s循環體
            {
                                Flag_EW_Yellow=0;          //東西關黃燈顯示信號
                                P1=S[0];                                                 //南北通行,東西紅燈
              Display();                                  //調用顯示函數
                                keyboard();        
                                if(Restore_flag)
                          break;               
                  }
                /*******S4狀態(南北直行黃燈閃爍狀態)**********/
                        P1=0Xff;                                             //所有路口紅綠燈短時熄滅
                        if(Time_EW==5)                                //當東西倒計時為5s時
                                Time_SN=5;                                        //南北重新從5s開始倒計時
                while(Time_EW>=1)                                //東西方向倒計時最后5s循環體
           {
             Flag_SN_Yellow=1;          //南北開黃燈信號位
                         EW_Red=1;            //南北黃燈開始閃爍,東西紅燈亮
             Display();                                    //調用顯示函數
                         keyboard();
                         if(Restore_flag)
                         break;                                 
           }
          /***********賦值(南北通行變東西通行)**********/
          EW=SN1;                                                                        //東西30s-->25s
                SN=EW1;                                                                        //南北25s-->30s         
        }
}



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

使用道具 舉報

沙發
ID:844772 發表于 2022-5-18 09:37 | 只看該作者
P1=0Xff;     //所有路口紅綠燈短時熄滅   這句啥意思,看S[]你不是高位是亮燈嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本免费一区二区三区 | 日韩高清在线观看 | 欧美日一区二区 | 欧美日韩一区二区在线 | 国产精品久久国产精品 | 亚洲激情av | 在线观看第一区 | 日本又色又爽又黄的大片 | 亚洲 欧美 日韩在线 | 久久久久久99 | 一级看片 | a精品视频 | 伊人精品| 久久精品色欧美aⅴ一区二区 | 先锋资源亚洲 | 亚洲综合首页 | a在线观看 | 亚洲欧美中文日韩在线v日本 | 天天射天天干 | 一区二区在线免费观看视频 | 成人国产精品一级毛片视频毛片 | 国产在线精品一区二区三区 | 成人三级在线播放 | 久久久久无码国产精品一区 | 色综合成人网 | 黄色91在线 | 色性av | 欧美日韩国产中文字幕 | 亚洲 自拍 另类 欧美 丝袜 | 国产三级大片 | 日韩欧美在线免费观看视频 | 夜夜爽99久久国产综合精品女不卡 | 老司机深夜福利网站 | 日本一区二区三区视频在线 | 成人av一区 | 亚洲精品亚洲人成人网 | 黄色三级免费网站 | 日韩一区av | 日韩黄 | 国产精久久久久久久妇剪断 | 精品国产综合 |