紧急救助 急 !!!!急!!急!!!!!!

2019-07-16 04:18发布

现在的 情况是灯不亮 数码管只是闪烁  数码管是共阳极的


技术指标
1、红灯亮15S  2、绿灯亮15S  3、黄灯亮5S并闪烁  4、绿灯变红灯有黄灯过度  5、红灯可直接变绿灯
#include<reg51.h>//头文件 #include<intrins.h>//头文件 #define uchar  unsigned  char//宏定义#define uint   unsigned   int//宏定义 sbit  RED_ZHU    =  P1^0; sbit  YELLOW_ZHU =  P1^1; sbit  GREEN_ZHU  =  P1^2; sbit  RED_ZHI    =  P1^3; sbit  YELLOW_ZHI =  P1^4; sbit  GREEN_ZHI  =  P1^5;   uintaa, bai,shi,ge,bb; /*数码管显示0-9*/ uintcode table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*子函数声明*/ void delay0(uint z);void init1();void init2();void init3();void init4();void init5();void display(uint shi,uint ge); void main() { init1();//第一个状态 while(1) { init2();//第二个状态 init3();//第三个状态 init4();//第四个状态 init5();//第五个状态 } } //第一个状态:主干道、支干道均亮红灯5Svoid init1()  {  int temp; temp=6;//变量赋初值TMOD=0x01;//定时器T0工作于方式1TH0=0x4c;TL0=0x00;//定时器赋初值  EA=1;//开中断ET0=1;//开定时中断  TR0=1;//开定时器T0while(1) {  RED_ZHU=0;      RED_ZHI=0; GREEN_ZHU=1; GREEN_ZHI=1; YELLOW_ZHU=1;YELLOW_ZHI=1;  if(aa==20)//定时20*50MS=1S  {    aa=0;//定时完成一次后清0  temp--;//变量自减  if(temp<0)    {    break;    }   shi=temp/10;//显示十位 ge=temp%10;//显示个位     }display (shi,ge); } } //第二个状态:主干道亮绿灯27S、支干道亮红灯 void init2() {   inttemp;   temp=31;//变量赋初值   TMOD=0x01;//定时器T0工作于方式1   TH0=0x4c; TL0=0x00;//定时器赋初值   EA=1;//开中断   ET0=1;//开定时中断   TR0=1;//开定时器T0   while(1) {      RED_ZHU=1;    RED_ZHI=0;     GREEN_ZHU=0;    GREEN_ZHI=1;   YELLOW_ZHU=1;      YELLOW_ZHI=1;    if(aa==20)//定时20*50MS=1S    {   aa=0;//定时完成一次后清0 temp--;//变量自减 if(temp==3)   {    break;    }   shi=temp/10;//显示十位    ge=temp%10;//显示个位          }  display(shi,ge);   }} void init3()//第三个状态:主干道黄灯闪烁、支干道红灯闪烁 {  int temp; temp=4;//变量赋初值 TMOD=0x01;//定时器T0工作于方式1   TH0=0x4c;    TL0=0x00;//定时器赋初值         EA=1;//开中断         ET0=1;//开定时中断          TR0=1;//开定时器T0          while(1)           {             GREEN_ZHU=1;             if(aa==20)//定时20*50MS=1S             {              aa=0;//定时完成一次后清0                  temp--;//变量自减                  YELLOW_ZHU=~YELLOW_ZHU;                   RED_ZHI=~RED_ZHI;                    if(temp<0)                    {     break;    }                    shi=temp/10;//显示十位                         ge=temp%10;//显示个位       }   display(shi,ge); } } void init4()//第四个状态:主干道亮红灯、支干道亮绿灯22S   {  inttemp; temp=26;//变量赋初值 TMOD=0x01;//定时器T0工作于方式1   TH0=0x4c;   TL0=0x00;//定时器赋初值   EA=1;//开中断   ET0=1;//开定时中断   TR0=1;//开定时器T0   while(1)    {            RED_ZHU=0;            RED_ZHI=1;            YELLOW_ZHU=1;                 GREEN_ZHI=0;             if(aa==20)//定时20*50MS=1S             {              aa=0;//定时完成一次后清0              temp--;//变量自减              if(temp==3)             {  break;    }                  shi=temp/10;//显示十位                  ge=temp%10;//显示个位                     }                  display(shi,ge);                 }                 }   void init5()//第五个状态:主干道红灯闪烁、支干道黄灯闪烁 {   inttemp;   temp=4;//变量赋初值   TMOD=0x01;//定时器T0工作于方式1  TH0=0x4c; TL0=0x00;//定时器赋初值 EA=1;//开中断   ET0=1;//开定时中断  TR0=1;//开定时器T0  while(1) {    RED_ZHI=1; GREEN_ZHU=1;    GREEN_ZHI=1;     if(aa==20)//定时20*50MS=1S          { aa=0;//定时完成一次后清0            temp--;//变量自减            YELLOW_ZHI=~YELLOW_ZHI;             RED_ZHU=~RED_ZHU;             if(temp<0)             {    break;    }             shi=temp/10;//显示十位              ge=temp%10;//显示个位                    }                  display(shi,ge);                 }                }      /*显示子函数*/ voiddisplay(uint shi,uint ge) {   P2=0x00;        P0=table[shi];//显示十位       delay0(5);  P2=0x04; P0=table[ge];//显示个位 delay0(5); }/*定时中断子函数*/ void TO_time()  interrupt 1 {  TH0=0x4c; TL0=0x00; aa++; } /*延时子函数*/ void delay0(uint z) { uint i,j;   for(i=0;i<z;i++)     for(j=0;j<110;j++);          }  



实物图 实物图
电路图 电路图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。