找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新人,求带呜呜呜,想用一个独立按键控制流水灯变化,编译是没错误,但就是不好使

[复制链接]
跳转到指定楼层
楼主
ID:166244 发表于 2017-2-23 19:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"reg52.h"
#include"intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

#define led P0
sbit k1=P1^0;
u8 run=0;
u8 i;

void delay(u16 i)
{
        while(i--);
}

void LED1()
{
        i=0x01;
        delay(25000);
        while(1)
        {
                for(i=0;i<7;i++)
                {
                        led=_crol_(led,1);
                        delay(25000);
                }
                for(i=0;i<7;i++)
                {
                        led=_cror_(led,1);
                        delay(25000);
                }
        }
}

void LED2()
{
        i=0x03;
        delay(25000);
        while(1)
        {
                for(i=0;i<7;i++)
                {
                        led=_crol_(led,1);
                        delay(25000);
                }
                for(i=0;i<7;i++)
                {
                        led=_cror_(led,1);
                        delay(25000);
                }
        }
}

void LED3()
{
        i=0x03;
        delay(25000);
        while(1)
        {
                for(i=0;i<7;i++)
                {
                        led=_crol_(led,2);
                        delay(25000);
                }
                for(i=0;i<7;i++)
                {
                        led=_cror_(led,2);
                        delay(25000);
                }
        }
}

void keypros()
{
        if(k1==0)
        {
                delay(1000);
                if(k1==0)
                {
                        run++;
                }
                while(!k1);
        }
}
                               
void main()
{
        i=0x00;
        while(1)
        {
                keypros();
                switch(run)
                {
                        case 1:
                                LED1();
                                break;
                        case 2:
                                LED2();
                                break;
                        case 3:
                                LED3();
                                break;
                }
         }

}

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

使用道具 举报

沙发
ID:155507 发表于 2017-2-23 21:00 | 只看该作者
问题中没说清楚, 什么意思 ,不好使只得是??
编译是有错误, run大于3,  switch的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。

加 switch(run%3)
回复

使用道具 举报

板凳
ID:153041 发表于 2017-2-23 22:10 | 只看该作者
当然不好使,一看就知道按键不能立即生效,要一直按住等到一个种流水灯走完才能生效,中途按是没反应的。建议1:把按键放到中断脚,按下进中断处理按键。建议2:把按键处理程序植入到delay里面,不要空等,一边等,一边查按键。
回复

使用道具 举报

地板
ID:123289 发表于 2017-2-23 23:13 | 只看该作者
先画个框图不就清清楚楚了吗?
回复

使用道具 举报

5#
ID:166244 发表于 2017-2-25 13:41 | 只看该作者
utzuzu 发表于 2017-2-23 22:10
当然不好使,一看就知道按键不能立即生效,要一直按住等到一个种流水灯走完才能生效,中途按是没反应的。建 ...

那如果在LED里加入中断函数可以吗,求指教,多谢前辈
回复

使用道具 举报

6#
ID:140906 发表于 2017-3-11 18:36 来自手机 | 只看该作者
菜鸟路过
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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