找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3422|回复: 9
收起左侧

关于用1个按键切换led4种模式的单片机程序问题?

[复制链接]
ID:687423 发表于 2020-2-17 18:48 | 显示全部楼层 |阅读模式
之前提问过一次了,还是有一些不明白,我想的是按下按键之后可以更改模式,也就是在上一个led模式程序进行的过程中,在按下按键时会直接切换到下一个程序,我现在的程序只能是在上一个模式执行完之后才能换模式,我想知道如何去实现上面的功能,希望大家给我一点思路,最好给我看一下程序,我的部分代码如下,有什么问题请帮我指正一下。(led0,led1,led2,led3分别为led的4种模式,单片机程序都没有问题)
void init()
{
IT0=1;
EX0=1;
EA=1;
}
void main()
{
init();
while(1)
{
  if(num==1)
   led0();
  if(num==2)
   led1();
  if(num==3)
   led2();
  if(num==4)
   led3();
  if(num==5)
   num=0;
}
}
void init0() interrupt 0
{
EX0=0;
delay(100);
EX0=1;
if(k3==0)
  num++;
while(!k3);
}

回复

使用道具 举报

ID:168996 发表于 2020-2-17 19:13 | 显示全部楼层
在各个模式函数中增加标志判断,在按键改变后,标志变化
回复

使用道具 举报

ID:235200 发表于 2020-2-17 20:32 | 显示全部楼层
unsigned char num=0;
void init()
{
TMOD=1;
TH0=0;
TL0=0;
IT0=1;             //外部中断下降沿触发
EX0=1;            //允许外部中断
ET0=1;            //允许T0中断
EA=1;
}
void main()
{
init();
while(1)
{
  if(num==0)
   led0();
  if(num==1)
   led1();
  if(num==2)
   led2();
  if(num==3)
   led3();
  if(num==4)
   led1(); led2(); led3();
}
}
void init0() interrupt 0
{
EX0=0;        //屏敞外中断
num%=5;   //num在0-4间变化
TR0=1        //开始计数  
}
voidtime0() interrupt 1
{
   EX0=1;        //允许外部中断
   TH0=0;
   TL0=0;
   ET0=0;        //禁止T0中断
}
回复

使用道具 举报

ID:546770 发表于 2020-2-17 20:37 | 显示全部楼层
中断本来就是打断main函数中正在执行的程序,中断里面的程序跑完了之后还是会回到之前程序被中断的地方继续执行,所以没办法马上切换,只能到你下一次循环判断了if里面的值再确定执行哪个程序!如果想要看起来切换的很快的话就尽量少加延时函数,实在要加的话加一点点就好,比如10~20ms就行了;
回复

使用道具 举报

ID:94031 发表于 2020-2-17 22:48 | 显示全部楼层
给你参考程序。 通过中断切换led模式.rar (39.37 KB, 下载次数: 95)
回复

使用道具 举报

ID:584814 发表于 2020-2-18 08:46 | 显示全部楼层
长按、短按,双击、叁击.....甚至莫尔斯电码,你想要多少都可以。
回复

使用道具 举报

ID:462827 发表于 2020-2-18 09:51 | 显示全部楼层
之前也回复过你了呀,按键判断只放在主函数的主循环里轮询就行了,按了就切换模式,把灯的操作放在定时器中断里,根据不同的模式及子状态来动作。
回复

使用道具 举报

ID:275826 发表于 2020-2-18 17:32 | 显示全部楼层
主程序结构没毛病,问题出在LED0这些子函数上
回复

使用道具 举报

ID:687423 发表于 2020-2-18 18:15 | 显示全部楼层
xuyaqi 发表于 2020-2-17 22:48
给你参考程序。

感谢啊,看了你的程序明白了
回复

使用道具 举报

ID:960619 发表于 2021-8-19 17:48 | 显示全部楼层
xuyaqi 发表于 2020-2-17 22:48
给你参考程序。

P0在其中起什么作用?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表