• 左到流水灯 基于51单片机。在protues里面模拟仿真运行
  • 实现按键K1实现左向右流水,按键K2实现左流水,按键K3实现暂停流水,按键K4实现继续流水 注意:本代码存在小小BUG即按键K1以后可以按键K3和K4控制流水,不能按K2中断K1流水操作来实现K2右向左流水。按键K2...

    51单片机心形灯——实现按键控制流水编程

    其他心形灯类型编码请看我的其他博文~
    实现按键K1实现从左向右流水,按键K2实现从右往左流水,按键K3实现暂停流水,按键K4实现继续流水
    注意:本代码存在小小BUG即按键K1以后可以按键K3和K4控制流水,不能按K2中断K1流水操作来实现K2从右向左流水。按键K2对于K1也同理!
    心形灯效果图 如果是静态效果请刷新页面哦
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    心形灯原理图
    在这里插入图片描述

    #include "reg52.h"
    sbit k1 = P3^2;
    sbit k2 = P3^3;
    sbit k3 = P3^4;
    sbit k4 = P3^5;
    
    unsigned char code table[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
    unsigned char code table1[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};
    
    void Delay(unsigned int xms){
    	unsigned int i, j;
    	for(i=xms;i>0;i--){
    		for(j=110;j>0;j--);
    	}
    }
    unsigned int flag=0;
    void checkflag(){
    	if(k3==0){
    		flag=1;
    	}
    	while(flag==1){
    		if(k4==0){
    			flag=0;
    		}	
    	}
    }
    
    void main(){
    	unsigned char i;
    	
    	while(1){
    		if(k1==0){
    			P3=0;
    			Delay(1000);
    			
    			checkflag();
    			
    			P3=0xff;
    			
    			checkflag();
    			
    			for(i=0;i<8;i++){
    				P0 = table[i];
    				Delay(1000);
    				checkflag();
    			}
    			P0=0xff;
    			checkflag();
    			
    			for(i=0;i<8;i++){
    				P2 = table1[i];
    				Delay(1000);
    				checkflag();
    			}
    			P2=0xff;
    			checkflag();
    		}
    		if(k2==0){
    			for(i=0;i<8;i++){
    				P2 = table[i];
    				Delay(1000);
    				checkflag();
    			}
    			P2=0xff;
    			checkflag();
    			for(i=0;i<8;i++){
    				P0 = table1[i];
    				Delay(1000);
    				checkflag();
    			}
    			P0=0xff;
    			checkflag();
    			P3=0;
    			Delay(1000);
    			checkflag();
    			P3=0xff;
    			checkflag();
    		}
    		if(k4==0){
    			P3=0;
    			Delay(1000);
    			
    			checkflag();
    			
    			P3=0xff;
    			
    			checkflag();
    			
    			for(i=0;i<8;i++){
    				P0 = table[i];
    				Delay(1000);
    				checkflag();
    			}
    			P0=0xff;
    			checkflag();
    			
    			for(i=0;i<8;i++){
    				P2 = table1[i];
    				Delay(1000);
    				checkflag();
    			}
    			P2=0xff;
    			checkflag();
    		}
    	}
    }
    

    可能存在我心形灯效果图与代码放错不匹配的情况,如果你按照我的代码装载运行效果与我效果图不一样请评论告诉我!我找一下改一下,如果我后期把相应的效果视频删了,那么就emmmmm意会~意会~我觉得你很聪明肯定懂我的意思hiahia

    展开全文
  • 流水灯51单片机最小系统,顺序、反向点亮,左到从右到左点亮

    功能:让8个LED灯顺序点亮,然后在逆向点亮;

    代码如下:

    #include<reg52.h>

    #include<intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    void delay(uint z);

    main()
    {  
    uchar aa;   
    uint count=0;
    while(1)
    {
    aa=0xfe;
    P0=aa;
    delay(100);
    while(1)
    {
    aa=_crol_(aa,1);//aa左移一位,
    P0=aa;
    delay(1000);

            count++;

    if(count>=7)        //判断8个LED灯是否已被全部点亮一次
    {
    for(;count>0;)//逆向点亮8个LED灯
    {
    aa=_cror_(aa,1);//aa右移一位
    P0=aa;
    delay(1000);//调用延时程序,延时1S;
    count--;
    }
    break;
    }
     
    }
    }
    }
    void delay(uint z)
    {
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);

    }

    贴出一张图片:


    展开全文
  • #include <reg52.h> //特殊功能寄存器头文件 sbit ADDR0 = P1^0; //位声明 sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; ... unsigned char cnt=0,dir...

    #include <reg52.h>  //特殊功能寄存器头文件

    sbit ADDR0 = P1^0;    //位声明
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    void delay();

    void main()
    {
        unsigned char cnt=0,dir=0;
        ENLED = 0;
        ADDR3 = 1;
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;

        while(1)
        {
           if(dir==0)          //dir=0时LED从左往右移动
           {
                   P0 = ~(0x80>>cnt);
                if(P0== 0xfe) dir = 1;    
           }
           else                  //dir=1时LED从右往左移动
           {
                   P0 = ~(0x01<<cnt);
                if(P0== 0x7f) dir = 0;    
           }
           delay();
           cnt++;              //计数值自加
           if(cnt>7) cnt=0;
        }
    }

    void delay()           //延时函数
    {
        unsigned int i;
        for(i=0;i<20000;i++);
    }

    展开全文
  • 51单片机4种流水

    2019-08-29 21:25:18
    4种流水灯: 1、先从右到左逐个亮灭;再左到逐个亮灭; 2、由两侧向中间,再中间向两侧亮灭; 3、先再左逐个亮起,不熄灭;再左到逐个熄灭; 4、先左再逐个亮起,不熄灭;再从右到左逐个熄灭;
    • 程序说明: LED连接在P2引脚上。
    • 程序现象:
      1、先从右到左逐个亮灭;再从左到右逐个亮灭;
      2、由两侧向中间,再中间向两侧亮灭;
      3、先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
      4、先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
    #include "reg52.h" 
    
    #define led P2	//对整个P2端口进行操作
    
    /*	延时函数		*/
    void delay(unsigned int del) 	//10ms * del
    {
    	unsigned int i,j;
    	for(i=0; i<del; i++)
    	for(j=0; j<1827; j++)      
    	    ;
    }
    
    void  Led_Pipeline_1() //先从右到左逐个亮灭;再从左到右逐个亮灭;
    {
    	unsigned  char i;	
    	delay(10); 
    	led=0xfe;	//初始状态将LED0点亮
    
    	for(i=0;i<8;i++)//	1111 1110
    	{
    		P2=~(0x01<<i);	 //将0000 0001左移i位,然后将结果取反赋值到P2口
    		delay(20); 	//大约延时200ms
    	}
    	led=0xFF; //熄灭所有LED
    	delay(20); 
    	for(i=0;i<8;i++)
    	{
    		P2=~(0x80>>i);	 //将1右移i位,然后将结果取反赋值到P2口
    		delay(20); 
    	}	
    	led=0xFF; //熄灭所有LED
    }
    void Led_Pipeline_2() //两侧向中间,再中间向两侧亮灭
    {
    	unsigned  char i,High,Low;
    	delay(20);
    	led=0x7E;	//初始状态将两侧点亮
    	High=led&0xF0;	//高四位
    	Low=led&0x0F;	  //低四位
    	delay(30);
    	for(i=0;i<3;i++)
    	{
    		High=~(~High>>1);	 //将0x8右移1位
    		Low=~(~Low<<1);	   //将0x1左移1位
    		
    		led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
    		delay(30);
    	}	
    	led=0xFF; //熄灭所有LED
    	delay(20);
    	led=0xE7;//初始状态将中间两颗LED点亮
    	delay(30);
    	for(i=0;i<3;i++)
    	{
    		High=~(~High<<1);	 //将0x8右移i位
    		Low=~(~Low>>1);	 //将0x1左移i位
    		
    		led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
    		delay(30);
    	}	
    	led=0xFF; //熄灭所有LED
    }
    
    void Led_Pipeline_3() //先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
    {
    	unsigned  char i;	
    	delay(20);
    	led=0xfe;	//初始状态将LED0点亮
    	delay(10);
    	for(i=0;i<8;i++)
    	{
    		P2=0xFE<<i;	 //将1111 1110左移i位,然后将结果赋值到P2口
    		delay(10); 	//大约延时100ms
    	}
    	led=0xFF; //熄灭所有LED
    	for(i=0;i<8;i++)
    	{
    		P2=~(0xFF>>i);	 //将1111 1111右移i位,然后将结果取反赋值到P2口
    		delay(10); 
    	}	
    	led=0xFF; //熄灭所有LED
    }
    
    void Led_Pipeline_4() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
    {
    	unsigned  char i;	
    	delay(20);
    	led=0x7F;	
    	delay(10);
    	for(i=0;i<8;i++)
    	{
    		P2=0x7F>>i;	 
    		delay(10); 
    	}
    	led=0xFF; 
    	for(i=0;i<8;i++)
    	{
    		P2=~(0xFF<<i);
    		delay(10); 
    	}	
    	led=0xFF; //熄灭所有LED
    }
    void main()
    {
    	while(1)
    	{
    		Led_Pipeline_1();
    		Led_Pipeline_2();
    		Led_Pipeline_3();
    		Led_Pipeline_4();
    	}
    }
    
    展开全文
  • 51单片机入门——用库函数实现流水灯左右移动(向移动N次后再向左移标题动M次 由于电路图决定P0口为低电平时,led亮! #include<reg52.h> //头文件 #include<intrins.h> //库函数头文件 #define ...

    51单片机入门——用库函数实现流水灯左右移动(向右移动N次后再向左移标题动M次

    由于电路图决定P0口为低电平时,led亮!
    用库函数实现流水灯左右来回移动,可控制移动次数。

    #include<reg52.h>	     //头文件
    #include<intrins.h>		  //库函数头文件
    #define uint unsigned int	  //宏定义
    #define uchar unsigned char	  
    void delay(uint x);		   //声明子函
    uchar led; 		     //定义变量用于给P0口赋值
    uint n=0,flag=0;	  //定义变量
    sbit LED=P0^0;
    sbit ADDR0=P1^0;     //位声明
    sbit ADDR1=P1^1;	
    sbit ADDR2=P1^2;				  
    sbit ADDR3=P1^3;
    sbit ENLED=P1^4;
    void delay(uint x)		//延时函数
    
    {	uint i,j;
        for(i=0;i<x;i++)	 
    	  for(j=0;j<110;j++);
    }
    void main()
    {
      	uint i=0,j=0;
    	ENLED=0;	   //74HC138的4、5脚低电平有效	
    	ADDR3=1;  	  //74HC138的6脚高电平有效		  
    	ADDR2=1;	  //74HC138输入011,位选LEDS6低电平
    	ADDR1=1;
    	ADDR0=0;
    	led=0x7f;			   //led赋初值:0111 1111
    while(1)
     { 	  	 
    		P0=led;	  				//把变量led赋给P0口		
    		if(flag==0)
    		{
    			led=_cror_(led,1); 		//循环函数,向右移动一位再赋给P0口
    			delay(1000);  		 //延时500ms
    			if(led==0xfe)		//1111 1110	 循环到最低位led时n+1计数;
    				{
    					n++;
    					if(n==2)   	  	//向右循环两次
    					{
    						flag=1;		    //标志置1
    						n=0;		   //n归 0
    					}
    				}
    		}
    		else
    		{
    			led=_crol_(led,1);	 //循环函数,向左移动一位再赋给P0口
    			delay(1000);
    			if(led==0x7f)	//0111 1111  循环到最高位led时
    				{
    					n++;			//n+1计数;
    					if(n==2)	   //向左循环两次
    					{
    					flag=0;		   //标志置 0
    					n=0;		   //n归 0
    					}
    				}
    		}	 
     }
     }
    

    ## 2、位移操作实现流水灯左右来回移动

    
    //#include<reg52.h>	     //头文件
    #include<intrins.h>		  //库函数头文件
    #define uint unsigned int	  //宏定义
    #define uchar unsigned char	  
    void delay(uint x);		   //声明子函
    uchar led; 		     //定义变量用于给P0口赋值
    uint n=0,flag=0;	  //定义变量
    sbit LED=P0^0;
    sbit ADDR0=P1^0;     //位声明
    sbit ADDR1=P1^1;	
    sbit ADDR2=P1^2;				  
    sbit ADDR3=P1^3;
    sbit ENLED=P1^4;
    void delay(uint x)		//延时函数
    
    {	uint i,j;
        for(i=0;i<x;i++)	 
    	  for(j=0;j<110;j++);
    }
    void main()
    {
      	uint i=0,j=0;
    	ENLED=0;	   //74HC138的4、5脚低电平有效	
    	ADDR3=1;  	  //74HC138的6脚高电平有效		  
    	ADDR2=1;	  //74HC138输入011,位选LEDS6低电平
    	ADDR1=1;
    	ADDR0=0;
    	led=0x7f;			   //led赋初值:0111 1111
    	while(1)
    		{
    			P0=~led;
    			delay(1000);
    			if(flag==0)
    			{
    				led=led>>1;
    				if(led==0x01)
    				{
    					flag=1;
    				}
    			}
    			else 
    			{
    			led=led<<1;
    			if(led==0x80)
    			{
    				flag=0;
    			}
    }
    }
    }
    
    展开全文
  •  在实现流水灯之前,我们有必要提一点,C51代码在写之前,要参考电路图来写。...根据二极管的导通条件可知,在单片机的IO口输出低电平时,才能点亮LED灯。 下面贴上代码: #include&lt;reg52.h&...
  • 流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8...
  • /*************************************************************************************** 按键控制LED流水灯实验 *实现现象:定义按键 1,控制流水中间 LED 依次向外点亮,再两侧向中间依次...
  • 51单片机闪烁流水

    2016-01-25 11:27:10
    是51单片机的,利用定时器/计数器产生2秒定时,每当2秒到时候更换指示灯闪烁,指示灯闪烁频率为0.2秒(要用延时程序)。原题网址:http://zhidao.baidu.com/question/424348066.html--------而论道的回答:...
  • 使用C语言编写程序,51单片机通过四个开关(c10~c13)控制LED灯(8颗)的左移右移。要求:开关c10控制一颗LED灯向左移;开关c11控制一颗LED灯向右移;开关c12控制三颗LED灯同时向左移;开关c13控制三颗LED灯同时向...
  • const int buttonPin = 3; // 定义按键输入引脚 int buttonState = 0; //初始化按键值 void setup() { for (int i = 8; i < 14; i++) { pinMode(i, OUTPUT); //配置引脚为输出模式 ... pinMode(buttonPin, INPUT);...
  • 实现按键K1实现左向右流水,按键K2实现左流水,按键K3实现暂停流水,按键K4实现继续流水 注意:本代码存在小小BUG即按键K1以后可以按键K3和K4控制流水,不能按K2中断K1流水操作来实现K2右向左流水。按键K2...
  • c语言 51单片机流水灯控制的实验报告 有详细的代码 和步骤
  • 键控流水灯的单片机程序,只是一小步,简简单单的一个程序,仅供参考。
  • 本程序运用汇编语言,实现流水灯以秒速左右循环移动
  • 单片机I/O口实现流水灯电路 一、实验目的 二、实验内容 三、实验步骤 四、C代码如下 五、实验结果 六、实验体会 一、实验目的 ...熟悉单片机I/O口的编程方法 ...(1)往右每次点亮1个LED,当点亮...
  • //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; //为每个LED灯命名 sbit leda=P0; sbit led1=P0^0; sbit led2=P0^1; sbit...
  • 代码如下 #include&lt;reg52.h&gt; void main() { int i = 0; unsigned count = 0; unsigned char flag = 0; P0 = 0x01; while(1) { if(flag%2 == 0) { P0 = ~(0x01 &... P0 =...
  • 就如你学习编程语言你写下的“Hello world”,LED流水灯也是这样的一个例子。通过这个实验,我们可以快速了解到51单片机I/O口的基本用法,以及LED灯的基本原理。 LED(发光二极管),是一种能够将电能转化为光能的...
1 2 3 4 5 ... 20
收藏数 435
精华内容 174