syyyyt 2020-02-11 09:32 采纳率: 0%
浏览 5335

关于51单片机用一个按键切换4种模式的问题?

我用51单片机的按键进行led的4种模式的切换,我现在的程序只能是中断里面的led程序结束后再按按键才可以切换模式,我想知道如何在中断中的led程序执行时按按键切换到下一个模式,请求大家支援。以下是我的代码。
#include
sbit beep=P1^5;
sbit k1=P3^1;
sbit k3=P3^2;
sbit led=P2^0;
#define N P2
typedef unsigned int ui;
typedef unsigned char uc;
uc num;
void delay(ui i)
{
while(i--);
}
void fmq()
{
beep=~beep;
delay(100);
}
void led0()
{
N=0xff;

N=0xfe;
fmq();
delay(50000);

N=0xfd;
fmq();
delay(50000);

N=0xfb;
fmq();
delay(50000);

N=0xf7;
fmq();
delay(50000);

N=0xef;
fmq();
delay(50000);

N=0xdf;
fmq();
delay(50000);

N=0xbf;
fmq();
delay(50000);

N=0x7f;
fmq();
delay(50000);

}
void led1()
{
N=0x7e;
fmq();
delay(35000);
delay(35000);
N=0xbd;
fmq();
delay(35000);
delay(35000);
N=0xdb;
fmq();
delay(35000);
delay(35000);
N=0xe7;
fmq();
delay(35000);
delay(35000);
N=0xe7;
fmq();
delay(35000);
delay(35000);
N=0xdb;
fmq();
delay(35000);
delay(35000);
N=0xbd;
fmq();
delay(35000);
delay(35000);
N=0x7e;
fmq();
delay(35000);
delay(35000);
}
void led2()
{
N=0xaa;
fmq();
delay(50000);
delay(50000);
N=0x55;
fmq();
delay(50000);
delay(50000);
}
void led3()
{
ui i;
N=0xfe;
while(1)
{
if(k1==0)
{

delay(1000);
if(k1==0)
{
switch(i)
{
case(0):N=0xfd;fmq();i++;break;
case(1):N=0xfb;fmq();i++;break;
case(2):N=0xf7;fmq();i++;break;
case(3):N=0xef;fmq();i++;break;
case(4):N=0xdf;fmq();i++;break;
case(5):N=0xbf;fmq();i++;break;
case(6):N=0x7f;fmq();i++;break;
case(7):N=0xff;fmq();i++;break;
}
while(!k1);
}
}
if(i==8)
{
i=0;
break;
}
}
}
void init()
{
IT0=1;
EX0=1;
EA=1;
}
void main()
{
init();
while(1);

}
void init0() interrupt 0
{
delay(1000);
{
while(1)
{

if(k3==0)
{
switch(num)
{
case(0):led0();num++;break;
case(1):led1();num++;break;
case(2):led2();num++;break;
case(3):led3();num++;break;
case(4):num++;N=0xff;break;
}
}
while(!k3);
if(num==4)
{
num=0;
break;
}
}

}
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 15:32
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面