关于#51单片机#的问题,如何解决?(语言-c语言)

#有没有大佬能给小弟解决这个问题啊
#51单片机交通灯
#c语言
#基于51单片机的交通灯的仿真
#问题就是为什么刚开始南北不亮,最后会闪烁,求大哥修改程序

#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char       

sbit shiwei=P1^0;    //定义数码管位选线
sbit gewei=P1^1;
sbit nb_shiwei=P1^2;
sbit nb_gewei=P1^3;





sbit nb_red=P0^3;     //定义P0口控制led灯
sbit nb_yellow=P0^4;
sbit nb_green=P0^5;

sbit dx_red=P0^0;
sbit dx_yellow=P0^1;
sbit dx_green=P0^2;
uchar second,temp1,temp2,thired;
uchar code shuma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint ms)       //延时函数
{
uint a,b;
 for(a=ms;a>0;a--)
 for(b=124;b>0;b--);
}

void display1( )           //显示函数
{
   uchar i;
   for(i=0;i<50;i++)
     {
     temp1=second%10;
     P2=shuma[temp1];
     gewei=0;
     delay(10);

     shiwei=1;
     gewei=1;
    

     temp1=second/10;
     P2=shuma[temp1];
     shiwei=0;
    


     delay(10);

     shiwei=1;
     gewei=1;

                 
     }
        if (second>0)
        second--;
     else second=60;
   }
  void display2( )           //显示函数
{
   uchar i;
   for(i=0;i<50;i++)
     {
     temp2=thired%10;
     P2=shuma[temp2];
     nb_gewei=0;
     delay(10);
     nb_shiwei=1;
     nb_gewei=1;
     temp2=thired/10;
     P2=shuma[temp2];
     nb_shiwei=0;
     delay(10);
     nb_shiwei=1;
     nb_gewei=1;                 
     }
        if (thired>0)
        thired--;
     else thired=60;
   } 
void state1()
{   char i;
    second=5;
    thired=8;
    P0=0xff;
    nb_red=0;
    dx_green=0;
    for(i=5;i>=0;i--)
    display1();
    display2();

}
void state2()
{ char i;
second=3;

    P0=0xff;
    nb_red=0;
  for (i=3;i>=0;i--)
 { dx_yellow=~dx_yellow;
  display1();
  display2();
  }
}
void state3()
{ char i;
  second=5;
  thired=8;
  P0=0xff;
  nb_green=0;
  dx_red=0;
     for(i=5;i>=0;i--)
    display1();
    display2()    ;

} 
void state4()
{  
  char i;
second=3;
    P0=0xff;
    dx_red=0;
  for (i=3;i>=0;i--)
 { nb_yellow=~nb_yellow;
  display1();
  display2();
  }
}



void main()
{while(1)
   {
   state1();
   state2();
   state3();
   state4();
    }



}













img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7674721
  • 这篇博客你也可以参考下:单片机原理及应用(汇编语言、C语言)
  • 除此之外, 这篇博客: 单片机及C语言入门中的 编程软件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    测试一些的C语言程序可以安装 Dev C++

    Dev-C++ download | SourceForge.net,能编译成exe文件
    如果需要给单片机写程序,需要用keil软件。C51用keil uvision4,编译成单片机能用的hex文件
  • 您还可以看一下 黄强老师的掌握C语言链表课程中的 为什么需要链表?小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我不懂如何使用#51单片机#编程,因此无法提供与问题直接相关的解决方案。对于参考资料中的内容,我可以提供一些解释和简要介绍:

    • 段落0:介绍了如何设计一个分级菜单,并给出了相应的菜单结构体类型定义。该段没有与内存泄露问题直接相关的信息。
    • 段落1:介绍了什么是内存泄露,以及如何使用一些工具进行内存泄露问题排查。这段内容适用于所有使用C语言编程并且需要处理动态内存分配的程序,但并不直接解决#51单片机#中的问题。
    • 段落2:描述了一个单片机项目中内存泄露问题的情景,以及问题排查的困难性。可供了解相关情况的人参考。
    • 段落3:介绍了SPI和I2C两种通信协议的不同,并提出了一种中间桥接设备的解决方案。这段内容是与#51单片机#有关的,但与问题本身并不相关。
    • 段落4:对位操作进行了简单介绍,并给出了一些用法示例。这段内容对于需要进行位操作的程序员有参考价值,但与问题本身没有直接相关性。
    • 段落5:介绍了带头节点的链表以及一些链表操作的代码示例。这段内容对于需要使用链表进行数据处理的程序员有参考价值,但与问题本身没有直接相关性。

    综上所述,我的回答是无法提供与#51单片机#中的内存泄露问题直接相关的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^