51单片机利用定时中断实现流水灯程序修改

这个程序怎么修改才能实现,初始状态或按下KEY1键(松开后保持),只点亮一只LED灯,每隔1秒(定时)右循环显示(中断),移到LED8后回到LED1。按下KEY2键…按下KEY3…

#include 
#include 
#define LED P1
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;//定义按钮引脚
sbit BEEP=P0^0;//定义蜂鸣器引脚
sbit P0_1=P0^1;
void BEEP_0();//蜂鸣器响函数
unsigned char i=0;
unsigned int j=0;
unsigned int k;
unsigned char Lamp_1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char Lamp_2[]={0xfa,0xf5,0xeb,0xd7,0xaf,0x5f};
unsigned char Lamp_3[]={0xfe,0xf9,0xe3,0x0f,0x7f,0x9f,0xc7,0xf0};

void time0() interrupt 1 
{
 j++; 
 if(j==5000)
 {
 P0_1=~P0_1;
  if(K==0)
  {    while(KEY1==0);
    LED=Lamp_1[i];
    i++;
    if(i<8)
    i=0;
    }
  if(K==1)
    {
     while(KEY2==0);
     LED=Lamp_2[i];
     i++;
     if(i<8)
     i=0;    
  }
  if(K==2)
  {
   while(KEY3==0);
   LED=Lamp_3[i];
   i++;
   if(i<8)
   i=0;
    }
 j=0;
 }
}
void main()
{
 TMOD=0x21; //定时器0在模式2下工作
 TL0=0x38; //定时器每200us产生一次溢出
 TH0=0x38; //自动重装的值
 ET0=1; //使能定时器0中断
 EA=1; //使能总中断
 TR0=1; //开始计时
 while(1)
 {
  if(KEY1==0) 
   K=0;
  if(KEY2==0)
   K=1;
  if(KEY3==0)
   K=2;
 }
}

修改后的代码,你试试,看看可不可以解决你的问题。

#include <reg51.h>
#include <stdio.h>
#define LED P1
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;//定义按钮引脚
sbit BEEP=P0^0;//定义蜂鸣器引脚
sbit P0_1=P0^1;
void BEEP_0();//蜂鸣器响函数
unsigned char i=0;
unsigned int j=0;
unsigned int k;
unsigned char ledState = 0x7E;
unsigned char Lamp_1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void time0() interrupt 1 
{
 j++; 
 if(j==1000) // 修改为每隔1秒
 {
  P0_1=~P0_1;
  if(K==0)
  {    
    LED = ledState;
    ledState = (ledState << 1) | ((ledState >> 7) & 0x01);
    ledState |= 0x7F;  // 确保只有一个 LED 点亮
  }
  if(K==1)
  {
    // ...
  }
  if(K==2)
  {
    // ...
  }
  j=0;
 }
}
void main()
{
 TMOD=0x21; //定时器0在模式2下工作
 TL0=0x38; //定时器每200us产生一次溢出
 TH0=0x38; //自动重装的值
 ET0=1; //使能定时器0中断
 EA=1; //使能总中断
 TR0=1; //开始计时
 while(1)
 {
  if(KEY1==0) 
  { 
   while(KEY1==0);
   K=0;
  }
  if(KEY2==0)
  {
   while(KEY2==0);
   K=1;
  }
  if(KEY3==0)
  {
   while(KEY3==0);
   K=2;
  }
 }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    抱歉,没有具体的问题我无法提供任何解决方案。请提供具体的问题。


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