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;
        }
    }
}

本回答被网友采纳

51单片机控制1组流水灯2组LED的方法(能给个代码最好)
\/\/定义第二个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) \/\/...

51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;;定义变量===YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器 ;主程序===START:MOV LED,#0FEH;初始化数据MOV YSJS,#0;MOV TMOD,#10H;定时器1工作于方式1,16位定时...

51单片机流水灯程序
sbit led1 = P2^0;sbit led2 = P2^1;sbit led3 = P2^2;sbit led4 = P2^3;sbit led5 = P2^4;sbit led6 = P2^5;sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;\/\/点亮第一个灯 led1 = 1;led2 = 0;led3 = 0;led4 = 0;led5 = 0;led6 = 0;led...

单片机流水灯代码
单片机流水灯代码:#include<reg51.h>\/\/51头文件void delay(int t)\/\/定义延时函数{int j;while(t--){for(j=0;j<500;j++);}}void main(){int i;while(1){for(i=0;i<7;i++)\/\/循环点亮LED,到第7个LED延时一会就结束循环。在这个单片机流水灯代码中,假设使用的是8051...

C51单片机编程,按键控制流水灯
\/\/若run=dir=1,自上而下流动 if(dir)for(i=0;i<=3;i++){ P2=led[i];delay(200);} else for(i=3;i>=0;i--){ \/\/run=1,dir=0,自下而上流动 P2=led[i];delay(200);} else P2=0xff; \/\/若run=0,全部灯灭 } } ...

51单片机流水灯,第一轮每次亮一个灯流水,第二轮每次亮两个灯流水...
void delay(unit z){ unit x, y;for(x = 100; x > 0; x--) for(y = z; y > 0; y--);} void main(){ uchar temp, i;temp = 0xfe;while(1) { for (i = 0; i < 8; i++) { P1 = temp; delay(300); temp = _crol_(temp, 1);} temp <<= 1...

51单片机LED流水灯怎么实现从两边同时逐个点亮到中间,又从中间逐个熄灯...
回答:如果只用一个端口的话,你可以建一个表,如果LED是高电平点亮的话,里面存放数据0x81,0x42,0x24,0x18 如果LED是低电平点亮的话,里面存放数据 0x7e,0xbd,0xdb,0xe7 然后在循环里一直按照数组下标0到3递增3到0递减将数组里面的数赋给端口即可。 即一个大循环里面再加两个小循环即可,具体多少次...

51单片机C程序实验LED灯:[2]左到右的流水灯
依旧是基础的LED灯部分的实验 说明:实现一排灯从左到右依次一个一个点亮熄灭,实现流水灯 proteus电路图 元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 电路图的连接方法 程序清单 说明:本例有两种程序写法 第一种是入门级别比较基础的写法 先是依旧延时子...

怎么用51单片机点亮流水灯
花样流水灯的玩法,一个51单片机8位端口轮流输出16颗灯珠,

51单片机流水灯用C语言编写的设计程序???
include<intrins.h> define uchar unsigned char define uint unsigned int void delay(uint z);main(){ uchar aa;while(1){ aa=0xfe;P1=aa;delay(100);while(1){ aa=_crol_(aa,1);P1=aa;delay(100);} } } void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0...

相似回答