找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1517|回复: 6
打印 上一主题 下一主题
收起左侧

有两种单片机流水灯形式,想要加两个按键切换流水灯模式,程序应该怎么改,谢谢

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
新手求助:有两种流水灯形式,想加两个按键切换流水灯模式,按键程序搞半天也没整明白,请高人指点,谢谢!按键1执行 void disp0()
按键2执行 void disp1()
请大佬们帮帮忙,万分感谢!
单片机源程序如下:
#include <REGX52.H>
#define        uint        unsigned int
#define        uchar        unsigned char
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED从高位往低位移
uchar i,j;                //定义循环变量
uint tt=70;                //定义时间指数
void delay(uint time)        //延时函数
{
        uint x,y;
        for(x=time;x>0;x--)
        for(y=110;y>0;y--);
}

void disp0()                        //状态1 LED顺时针转一圈
{
        for(i=0;i<8;i++)
        {
                P2=table1[ i];
                delay(100);
        }
        P2=0xff;

        for(i=0;i<8;i++)
        {
                P0=table0[ i];
                delay(100);
        }
        P0=0xff;
}
void disp1()                        //状态0 所有LED闪烁3次
{
        for(i=0;i<3;i++)
        {
                P0=0x00; P2=0x00;
                delay(300);
                P0=0xff; P2=0xff;
                delay(300);
        }
}
void main()
{        
        while(1)
        {        
         disp0();                //状态1 LED顺时针转一圈
        disp1();                //状态0 所有LED闪烁3次
  }

}



93caf1d444a37d821636c66be211e3c.png (42.97 KB, 下载次数: 18)

93caf1d444a37d821636c66be211e3c.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1080935 发表于 2024-5-21 08:18 | 只看该作者
定义按键端口
sbit key1 =  P1^6;
sbit key2 =  P1^7;
在主循环中while(1)中改为
{
  if(!key1)
  {//可以考虑消抖,仿真中可不用。
    disp0();
    while(!key1);//等待按键释放
  }
  if(!key2)
  {
     disp1();
     while(!key2);//等待按键释放
  }
}
这种方法不是特别推荐,可以额外定义一边量作为状态初始为0,按键按下后状态改变(1或2),根据状态调用对应函数,调用完后变量清零。这相当于只调用一次的任务。
回复

使用道具 举报

板凳
ID:743654 发表于 2024-5-21 08:58 | 只看该作者
先定义两个按键参数sbit k1=P1^6; sbit k2=P1^7;  主函数:        if(k1==0)        //检测按键K1是否按下{delay(1000);   //消除抖动 一般大约10ms  if(k1==0)         //再次判断按键是否按下{disp0();   //模式1}while(!k1);         //检测按键1是否松开              if(k2==0)        //检测按键K2是否按下{delay(1000);   //消除抖动 一般大约10ms  if(k2==0)//再次判断按键是否按下{disp1();   //模式2}while(!k2);         //检测按键2是否松开
回复

使用道具 举报

地板
ID:1109793 发表于 2024-5-21 09:25 | 只看该作者
if(按键1)disp0();
if(按键2)disp1();
回复

使用道具 举报

5#
ID:1105755 发表于 2024-5-23 20:28 | 只看该作者
LaoYuTou 发表于 2024-5-21 08:18
定义按键端口
sbit key1 =  P1^6;
sbit key2 =  P1^7;

谢谢!刚开始弄,研究一下
回复

使用道具 举报

6#
ID:1105755 发表于 2024-5-23 20:29 | 只看该作者
cheney03 发表于 2024-5-21 08:58
先定义两个按键参数sbit k1=P1^6; sbit k2=P1^7;  主函数:        if(k1==0)        //检测按键K1是否按下{delay(1000);  ...

谢谢!我弄一下试试。
回复

使用道具 举报

7#
ID:1105755 发表于 2024-5-23 20:30 | 只看该作者
xiaobendan001 发表于 2024-5-21 09:25
if(按键1)disp0();
if(按键2)disp1();

谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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