51单片机控制1组流水灯2组LED的方法(能给个代码最好)

用51单片机设计一个流水灯附加两组LED的电路,按一下流水灯亮,第二下增加一组LED亮,再按一下再加一组LED亮

第1个回答  2015-02-05
#include "reg51.h"
//引脚定义:
sbit key1 = P3^7; //定义按键1
sbit key2 = P3^6; //定义按键2
sbit key3 = P3^5; //定义按键3
sbit key4 = P3^4; //定义按键4
sbit key5 = P3^3; //定义按键5
sbit key6 = P3^2; //定义按键6
sbit led1 = P2^0; //定义第一个LED灯
sbit led2 = P2^1; //定义第二个LED灯
//主函数,C语言的入口函数: 
void main(void)
{
 while(1){  //循环扫描按键
  if(key1==0) //按键1按下,LED1灯亮
   led1=0;
  if(key2==0) //按键2按下,LED1灯灭
   led1=1;
  if(key3==0) //按键3按下,LED2灯亮
   led2=0;
  if(key4==0) //按键4按下,LED2灯灭
   led2=1;
  if(key5==0){//按键5按下,两个LED灯打开
   led1=0;
   led2=0;
  }
  if(key6==0){//按键6按下,两个LED灯关闭
   led1=1;
   led2=1;
  }
 }
}

业界良心,希望采纳

追问

我的想法是一个按键控制,一组是8个流水灯,一组是两个LED,还有另外一组也是两个LED,按一下流水灯亮,在按一下加亮一组LED,再按一下再加亮一组LED,最好按第四下能全关了。您能弄一个吗,谢谢帮助。

追答

定义一个变量a,没按下一次就a++,判断a的值,如果a==1就8个流水灯,a==2就两个led,以此类推,谢谢。仿照上面的思路完全没为题

本回答被网友采纳
第2个回答  2017-10-27
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar led1=0xfe;led2=0xfe;led3=0xfe;
uchar cnt=0;
uchar keyval=0;
sbit key=P3^2;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=10)
    {
    switch(keyval)
        {
        case 0:
        P0=led1;led1=_crol_(led1,1);break;
        case 1:
        P0=led1;led1=_crol_(led1,1);        
        P1=led2;led2=_crol_(led2,1);break;
        case 2:
        P0=led1;led1=_crol_(led1,1);                
        P1=led2;led2=_crol_(led2,1);        
        P2=led3;led3=_crol_(led3,1);break;
        default:break;        
        }
    }
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
    {
    if(key==0)
        {
        while(key==0);
        keyval++;
        keyval%=3;
        }
    }
}

本回答被网友采纳