51单片机程序纠正错误

我是想要实现按下P3.3按钮后,4个灯按1-3-4-2顺序依次点亮,如此循环。再次按下p3.3按钮后,灯全灭,


****现在遇到的问题是:程序仿真结果为只有D1灯亮,没有D3-4-2不亮

img

img

程序如下

#include<reg52.h>                        //51单片机头文件
#define uchar unsigned char           //把 unsigned char 宏定义为 uchar
uchar i=0;
uchar dianhuo[4]={0xEF,0xBF,0x7F,0xDF};    //气缸点火顺序 1,3,4,2
bit flag=0;
void main ()          //主函数
{
TMOD=0x06;              //设置为T0计数方式2
TH0=0xff;
TL0=0xF6;          //给定初值,满十个脉冲
EA=1;                  //总中断开关闭合
EX1=1;                  //TNT0开关闭合
IT1=1;                  //脉冲触发
ET0=1;                  //T0开关闭合
TR0=1;            //启动T0
while(1){          //一直循环

if (flag==1)  {P2=dianhuo[i];}    
else  {    P2=0xff;    i=0;}   //给1缸点火
}
}
void xunhuan1 () interrupt 1      //中断函数,实现点火循环
{static unsigned char j=0; 
TH0=0xff;
    TL0=0xF6;    
   i++; 
if (j==10) {i++; j=0;    }           //循环函数,i+1
if(i>3) i=0;
}
void qidong1() interrupt 2        //中断函数,给1缸点火,
{
    flag=!flag;
}
    

#include<reg52.h>                        //51单片机头文件
#define uchar unsigned char           //把 unsigned char 宏定义为 uchar
uchar i=0,j=0;
uchar dianhuo[4]={0xEF,0xBF,0x7F,0xDF};    //气缸点火顺序 1342
bit flag=0;
void main ()          //主函数
{
TMOD=0x06;              //设置为T0计数方式2
TH0=0xff;
TL0=0xf6;          //给定初值,满十个脉冲
EA=1;                  //总中断开关闭合

    EX1=1;                  //TNT0开关闭合
IT1=1;                  //脉冲触发

    ET0=1;                  //T0开关闭合
TR0=1;            //启动T0
while(1){          //一直循环
if (flag==1)  {P2=dianhuo[i];}    
else  {    P2=0xff;    i=0;}   //1缸点火
}
}
void xunhuan1() interrupt 1      //中断函数,实现点火循环
{
   j++; 
if (j==10) {i++; j=0;  
  }           //循环函数,i+1
if(i>3) i=0;
}
void qidong1() interrupt 2        //中断函数,给1缸点火,
{
    flag=!flag;
}

OK

C语言实现四个LED依次点亮,依次熄灭
如有帮助,望采纳


#include//声明头文件
#defineledP1#defineuintunsignedintvoiddelay(uinti)//延时函数{uintj;while(i--){for(j=0;j<120;j++);}}
voidmain()
{while(1){led=0X00;
delay(1000);led=0X01;
delay(1000);led=0X03;
delay(1000);led=0X07;
delay(1000);led=0X0f;
delay(1000);led=0X1f;
delay(1000);led=0X3f;
delay(1000);led=0X7f;delay(1000);led=0Xff;delay(1000);led=0X7f;delay(1000);
led=0X3f;delay(1000);led=0X1f;delay(1000);led=0X0f;delay(1000);
led=0X07;delay(1000);led=0X03;delay(1000);led=0X01;delay(1000);}}

哈喽,题主代码就不直接分享出来了,你可直接看这篇实例,里面的思路和方法,以及如何实现的过程应该会帮助到你,助力你学习【51单片机独立按键控制LED灯学习笔记】,链接:https://blog.csdn.net/weixin_74209371/article/details/127696435
【采用定时器中断的方式控制延时,来实现4个灯按1-3-4-2顺序依次点亮,并如此循环】