我是想要实现按下P3.3按钮后,4个灯按1-3-4-2顺序依次点亮,如此循环。再次按下p3.3按钮后,灯全灭,
****现在遇到的问题是:程序仿真结果为只有D1灯亮,没有D3-4-2不亮
程序如下
#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}; //气缸点火顺序 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 //中断函数,实现点火循环
{
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顺序依次点亮,并如此循环】