求完善 基于STC89c52单片机的智能交通灯

主要是想加一个倒计时,让数码管显示倒计时,
里面可能需要修改,别人的程序,麻烦朋友帮忙解答,有偿

img

img

img

img

img

@ada;
回答一下这问题

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7717872
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:基于STC89C52单片机的多功能智能清洁小车设计
  • 除此之外, 这篇博客: STC89C52单片机数码管介绍以及代码示例中的 五,代码演示 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在8,7,6位置分别连续显示1,2,3

    #include <REGX52.H>
    void xianshi(unsigned char location,number);
    void Delay1ms(unsigned int xms)	;
    void main()
    {
    		
    	while(1){
    	  xianshi(8,1);
    	  xianshi(7,2);
    	  xianshi(6,3);
    	  }
    	
    }
    
    void xianshi(unsigned char location,number){
    
    	switch(location){
    		case 1: P2_4=0;P2_3=0;P2_2=0; break;
    		case 2: P2_4=0;P2_3=0;P2_2=1; break;
    	    case 3: P2_4=0;P2_3=1;P2_2=0; break;
    		case 4: P2_4=0;P2_3=1;P2_2=1; break;
    		case 5: P2_4=1;P2_3=0;P2_2=0; break;
    	    case 6: P2_4=1;P2_3=0;P2_2=1; break;
    		case 7: P2_4=1;P2_3=1;P2_2=0; break;
    	    case 8: P2_4=1;P2_3=1;P2_2=1; break;
    	}
    
    	switch (number){
    	 case 0: P0=0x3F   ; break;//0011 1111
    	 case 1: P0=0x06   ; break;//0000 0110
    	 case 2: P0=0x5B   ; break;//0101 1011
    	 case 3: P0=0x4F   ; break;//0100 1111
    	 case 4: P0=0x66   ; break;//0110 0110
    	 case 5: P0=0x6D   ; break;//0110 1101
    	 case 6: P0=0x7D   ; break;//0111 1101
    	 case 7: P0=0x07   ; break;//0000 0111
    	 case 8: P0=0x7F   ; break;//0111 1111
    	 case 9: P0=0x6F   ; break;//0110 1111
    	 }
       Delay1ms(1);
    	 P0=0x00;
    }
    
    void Delay1ms(unsigned int xms)		//@12.000MHz
    {
    	unsigned char i, j;
    while(xms){
    			i = 12;
    			j = 169;
    			do
    			{
    				while (--j);
    			} while (--i);
         xms--;
    		}
    }