找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2842|回复: 13
收起左侧

大神 求帮助啊 今晚要熬出来的

[复制链接]
ID:57338 发表于 2013-11-29 23:00 | 显示全部楼层 |阅读模式
怎么 可以使led灯在一种模式下通过按键使他换种模式(led灯还没有 运行完成)
回复

使用道具 举报

ID:57338 发表于 2013-11-30 00:06 | 显示全部楼层
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
void Delay_ms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        {
                for(j=115;j>0;j--);
        }

}
void main()
{
        int j,a[28]={
        0xE7,0xDB,0xBD,0x7E, //从中间开始亮
        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮
        0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后增减
        0x00,0xff};                                                                //全亮全灭
        if(K1==0)
        {        while(1)
        {
                if(K2||K3||K4==0)
                break;
                else
                {
                for(j=0;j<4;j++)
                {       
                        P2=a[j];
                        Delay_ms(500);
                }       
                }
                }
        }
        if(K2=0)
        {        while(1)
                {if(K1||K3||K4==0)
                break;
                else
                {
                for(q=4;q<12;q++)
                        P2=a[q];
                        Delay_ms(500);
                }
                }
        }
        if(K3=0)
        {        while(1)
                {if(K1||K2||K4==0)
                break;
                else
                {
                for(w=12;w<20;w++)
                        P2=a[w];
                        Delay_ms(500);
                }
                }
        }
        if(K4=0)
        {
                while(1)
                {if(K1||K2||K3==0)
                break;
                else
                {
                for(e=12;e<20;e++)
                        P2=a[e];
                        Delay_ms(500);
                }
                }
        }
}
回复

使用道具 举报

ID:57338 发表于 2013-11-30 00:07 | 显示全部楼层
为什么运行不了
回复

使用道具 举报

ID:1 发表于 2013-11-30 00:40 | 显示全部楼层
用这个按键控制流水灯程序http://www.51hei.com/mcu/1736.html    应该适用于你的
回复

使用道具 举报

ID:1 发表于 2013-11-30 00:42 | 显示全部楼层
里面的程序和你要实现的东西基本一样
回复

使用道具 举报

ID:1 发表于 2013-11-30 00:42 | 显示全部楼层
里面的程序和你要实现的东西基本一样
回复

使用道具 举报

ID:57338 发表于 2013-11-30 13:21 | 显示全部楼层
if(flag1||flag3||flag4){flag2=0;break;} 刚学看的不是很懂
回复

使用道具 举报

ID:1 发表于 2013-11-30 13:44 | 显示全部楼层
一点也不懂 发表于 2013-11-30 13:21
if(flag1||flag3||flag4){flag2=0;break;} 刚学看的不是很懂

如果flag1 flag3 flag4其中有任何一个是1 就把flag2=0; 并且退出
回复

使用道具 举报

ID:57338 发表于 2013-11-30 21:07 | 显示全部楼层
#include <intrins.h>
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1 =P3^2; //按键1
sbit K2 =P3^3; //按键2
sbit K3 =P3^4; //按键3
sbit K4 =P3^5; //按键4
uchar S1=0,S2=0,S3=0,S4=0;
void Delay_ms(uint xms)//延缓时间
{
        uint i,j;
        for(i=xms;i>0;i--)
        {
                for(j=115;j>0;j--);
        }

}
void jieshou()
{
        if(K1==0)
        S1=1;
        if(K2==0)
        S2=1;
        if(K3==0)
        S3=1;
        if(K4==0)
        S4=1;
}
void main()
{
     while(1)
     {
                         int i;
            jieshou();
            if(S1)                                             
            {
                                  for(i=0;i<8;i++)         
                   {
                       P2=~(0x01<<i);
                       Delay_ms(200);
                                                jieshou();                     
                            if(S2||S3||S4)
                                                {
                                                S1=0;
                                                break;
                                                }
                                        }        
             }
             if(S2)                                                
             {
                         for(i=0;i<8;i++)                     
                   {
                      P2=~(0x80>>i);
                      Delay_ms(200);
                         jieshou();
                         if(S1||S3||S4)
                                         {
                                         S2=0;
                                         break;
                                         }
                                         }
              }
              if(S3)
             {     
                         for(i=0;i<8;i++)          
                                    {
                                   P2=(0xf0>>i);
                                   Delay_ms(200);
                                   jieshou();                 
                   if(S1||S2||S4)
                                   {
                                   S3=0;
                                   break;
                                   }
                                   }
              }
                          if(S4)
                          {
                          for(i=0;i<8;i++)
                                  {
                                 P2=(0x58>>i);
                                 Delay_ms(200);
                                 jieshou();
                                  if(S1||S2||S3)
                                   {
                                   S4=0;
                                   break;
                                   }
                                  }
                           }
        }
}
回复

使用道具 举报

ID:57338 发表于 2013-11-30 21:08 | 显示全部楼层
好了 不管 是不是跑完都可以 跑另外一种模式
回复

使用道具 举报

ID:57338 发表于 2013-11-30 21:08 | 显示全部楼层
谢谢 大家的帮助
回复

使用道具 举报

ID:57234 发表于 2013-12-1 01:28 | 显示全部楼层
看来可以结贴了 哈哈
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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