单片机流水灯程序_51单片机流水灯程序按键控制流水快慢 - CSDN
  • 51单片机流水灯程序

    2020-08-06 16:07:45
    #include"reg52.h" #include"intrins.h" #define led P2 typedef unsigned char u8; typedef unsigned int u16; void delay(u16 i) { while(i--); } void main() { u16 i; led=0xfe; delay(50000);...wh
    
    #include"reg52.h"
    #include"intrins.h"
    #define led P2
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    void delay(u16 i)
    {
    	while(i--);
    }
    
    void main()
    {
    	u16 i;
    	led=0xfe;
    	delay(50000);
    	
    	while(1)
    	{
    		for(i = 0; i < 7; i ++)
    		led=_crol_(led,1);
    		delay(50000);
    		
    		for(i = 0; i < 7; i ++)
    		{
    			led=_cror_(led,1);
    			delay(50000);
    		}	
    	}
    }
    

     

    展开全文
  • 该文件包含了一个单片机常见的例子,流水灯设计的程序代码,能是单片机开发板上的灯流水功能的跑。程序使用c语言,通俗易懂,适合单片机初学者,能更好的掌握如何编程。
  • 用51单片机实现流水灯的方法有多种:普通电灯法,位移法,数组法。其次模拟电路的电流图也与点一盏LED相似。具体如下: 一 首先是最简单的代码: #include //头文件 sbit led0=P0^0; sbit led1=P0^1; // 定义八...

    用51单片机实现流水灯的方法有多种:普通电灯法,位移法,数组法。其次模拟电路的电流图也与点一盏LED相似。具体如下:

    一   首先是最简单的代码

    #include <reg52.h>    //头文件
    sbit led0=P0^0;       
    sbit led1=P0^1;      // 定义八盏灯,并规定每个灯的io接口
    sbit led2=P0^2;
    sbit led3=P0^3;
    sbit led4=P0^4;
    sbit led5=P0^5;
    sbit led6=P0^6;
    sbit led7=P0^7;

    void delay(void)    // 声明延迟函数
    {
       unsigned char a,b;  //定义两个变量a,b
       for(a=0;a<200;a++)
       for(b=0;b<200;b++);   //这是两个for循环嵌套。用分号来区分。

       }                     // 每当a循环一次,b都要循环200次。同时200也是灯闪烁的时间。
      
    void main()           //主函数
    {
        led0=0;    //点亮第一个灯泡
     delay();    // 延时函数
     led0=1;    //熄灭灯泡
     delay();   //延时     通过这一系列过程实现闪烁
      
     led1=0;  
     delay();    
     led1=1;    
     delay();
      
     led2=0;    
     delay();  
     led2=1;    
     delay();
      
     led3=0;   
     delay();    
     led3=1;   
     delay();
      
     led4=0;    
     delay();   
     led4=1;    
     delay();
      
     led5=0;    
     delay();   
     led5=1;    
     delay();
      
     led6=0;    
     delay();
     led6=1;   
     delay();
      
     led7=0;   
     delay();           但是该方法存在弊端:需要一个个的定义变量。如果需要同时让许多灯点亮的话则不大方便。代码过于繁琐。因此可以使用其他两种方法
     led7=1;    
     delay();
     
     led8=0;   
     delay();    
     led8=1;    
     delay(); 
    }

    二  使用数组的方法点亮十六盏流水灯

    #include <reg52.h>
    unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};  //宏函数    定义数组,这里的数组均是可以使其亮的顺序。因为
    void delay(void)                                                                                     要使十六盏灯亮,所以需要在后面加上0xff(11111111)即全灭
    {                                                                                                             如果不是需要十六盏则不需要加上最后一个数组。
       unsigned char a,b;            //声明函数,声明灯的闪烁情况,与上一个代码相同。
       for(a=0;a<200;a++)
       for(b=0;b<200;b++);            // for 语句循环嵌套
       }
    void main()
    {
     unsigned char i;
     while(1)         // while语句是为了使使循环持续进行
     {
     for(i=0;i<9;i++)   //定义一个i,
     {
     P0=table[i];    // i取值为数组中的值。依次点亮前八盏灯
      delay();    // 延迟
     }
     {
     for(i=0;i<9;i++)   // 继续赋值,继续点亮后8盏灯
     {
     P2=table[i];
      delay();
     }
    }
     }
    }
    三 用位移的方法点亮八盏LED灯

    #include "reg52.h"     // 此文件中定义了单片机的一些特殊功能寄存器
    #include<intrins.h>   // 因此要用到左右移函数,所以加入这个头文件
    typedef unsigned int u16;   // 对数据类型进行声明定义 
    typedef unsigned char u8;
    #define led P2    //将p2口定义为led 后面就可以用led代替p2口
    delay延时函数,i=1,大约延时10us.
    void main()
    {
     u8 i;
     led=0xfe;
     delay(50000); //´óÔ¼ÑÓʱ450ms 
     while(1)
     { 
    /*  for(i=0;i<8;i++)
      {
       P2=~(0x01<<i);  //将1右移一位,然后将结果取反赋值到P2
       delay(50000); //
      }
    */  
      for(i=0;i<;i++)  //左移一位
      {
       led=_crol_(led,1);
       delay(50000); // 
      }
      for(i=0;i<7;i++) //将led右移一位
      {
       led=_cror_(led,1);
       delay(50000); //大约延时450ms
      } 
     }  
    }
    最后用protues模拟点亮八盏流水灯:
    可见电路原理与点亮一个LED的情况相似

    展开全文
  • 单片机流水灯程序

    2019-03-03 23:21:38
    一、流水灯实验 1、设计要求 P1口接8个发光二极管,烧录程序后发光二极管依次点亮 2、硬件要求 利用proteus Isis仿真,选择器件,AT89C51、LED-BLUE、RES 3、软件设计 源程序: /*********************必要变量定义*...

    一、流水灯实验
    1、设计要求
    P1口接8个发光二极管,烧录程序后发光二极管依次点亮
    2、硬件要求
    利用proteus Isis仿真,选择器件,AT89C51、LED-BLUE、RES
    3、软件设计
    源程序:

    /*********************必要变量定义******************/
    #include<reg51.h>
    #include<intrns.h>
    typedef  unsigned  char  u8;
    typedef  unsigned  int  u16;
    #define  led  P1
    /****************延时程序**************/
    void  delay(u16  k)
    {
      u16  i ,j;
      for(i = 7; i < k; i++)
          for(j = 0;j < 124; j++);
     }
    /**********************主函数*******************/
    void  main()
    {
      u8 i;
      led = 0x01;
      delay(500);
     while (1)
    {
       /* for(i = 0;i < 8; i++)
        { 
         led = (0x01<<i);
         delay(500);
        }*/
       for(i = 0;i < 7; i++)
      {
         led = _crol_(led , 1); 
         delay(500);
       }
       for(i = 0;i < 7; i++)
      {
        led = _cror_(led , 1);
        delay(500);
       }
        }
     }
     
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019030323184025.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21vb2Zvb2dvbw==,size_16,color_FFFFFF,t_70)
    如有任何错误或者不足之处,欢迎指正 ^ - ^.
    
    展开全文
  • 基于89C51单片机C语言程序的花样流水灯
  • 我们学了点亮一个 LED 小灯,然后又学了 LED 小灯闪烁,现在我们要进一步学习如何让 8 个小灯依次一个接一个的点亮,流动起来,也就是常说的流水灯。先来看 8 个 LED的核心电路图,如图 4-12。 采用字节操作方式...

    我们学了点亮一个 LED 小灯,然后又学了 LED 小灯闪烁,现在我们要进一步学习如何让 8 个小灯依次一个接一个的点亮,流动起来,也就是常说的流水灯。先来看 8 个 LED的核心电路图,如图 4-12。
    在这里插入图片描述

    采用字节操作方式点亮LED灯

    P0,代表了 P0.0到 P0.7 的全部 8 个位。比如我们写 P0 = 0xFE;转换成二进制就是 11111110B,所以点亮 LED字节操作为:

    #include <reg52.h>
    
    sbit ADDR0 = P1^0;
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    
    void main()
    {
        ENLED = 0;
        ADDR3 = 1;
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;
        P0 = 0xFE;    //向P0写入数据来控制LED小灯
        while (1);    //程序停止在这里
    }
    

    流水灯程序

    我们下边要进行依次亮和灭,怎么办呢?从这里就可以得到方法了,如果想让单片机流水灯流动起来,依次要赋给 P0 的数值就是:0xFE、0xFD、0xFB、0xF7、0xEF、0xDF、0xBF、0x7F。

    在我们的 C 语言当中,有移位操作和取反操作,其中<<代表的是左移,>>代表的是右移,~ 表示按位取反。

    • 左移运算:
      x<<k:x左移k位,并在右端补零。

    左移:无论是有符号数,还是无符号数,左移动都是向左移动,高位丢弃,低位补0.
    例如:
    unsigned char x = 0x34; ----->二进制数:0011 0100
    内存中的形式为:0011 0100
    X<<1 ==> 移位前:0011 0100
    移位后:0110 1000 ----->0x68 ----->十进制数:104

    • 右移运算:
      逻辑右移:
      x>>k:x右移k位,并在左端补零。

    右移:右移分为以下两类
    逻辑右移(针对无符号数): 向右移动,高位补0,低位舍弃。
    例如:
    unsigned char x = 0x34;==》二进制数:0011 0100
    内存中的形式为:0011 0100
    X >> 1 移位前:0011 0100
    移位后:0001 1010 ------>0x1a ------>十进制数:26

    • 取反(~)
      它是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。比如 a = ~(0x01); 0x01 的二进制是 00000001B,按位取反后就是 11111110B,那么a 的值就是 0xFE 了。
    #include <reg52.h>
    
    sbit ADDR0 = P1^0;
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    
    void main()
    {
        unsigned int i = 0;     //定义循环变量i,用于软件延时
        unsigned char cnt = 0;  //定义计数变量cnt,用于移位控制
    
        ENLED = 0;
        ADDR3 = 1;
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;
        while (1)  //主循环,程序无限循环执行该循环体语句
        {
        	for(cnt=0;cnt<8;cnt++)
        	{
            	P0 = ~(0x01 << cnt);      //P0等于1左移cnt位,控制8个LED
            	for (i=0; i<20000; i++);  //软件延时
            }
        }
    }
    
    
    展开全文
  • 首先,介绍下原理。下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平... 实现8个LED流水灯程序用中
  • 要用51单片机实现流水灯操作我想是每个初学者学习单片机,了解嵌入式的第一个动手的小实验吧,今天在重新学习的时候遇到了一点小问题,在这里和大家分享一下。 要想控制流水灯操作其实是用单片机给每个二极管高低...
  • 三个按键:A按键启动、B按键控制不同流水速度...三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响: 思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环 设置变...
  • 基于51单片机流水灯设计,流水灯程序 ,用单片机实现流水灯
  • 基于汇编语言的简单的单片机流水灯程序,八位数码管依次点亮
  • 51单片机流水灯程序 汇编写的。 P1口,高电平灯亮。
  • 51单片机入门教程(2)——实现流水灯一、搭建流水灯电路二、流水灯程序2.1 延时程序2.2 延时函数2.3 按字节寻址2.4 逻辑移位2.5 条件判断 一、搭建流水灯电路 在Proteus中搭建流水灯电路如图 二、流水灯程序 我们...
  • STC89C52RC 单片机流水灯程序及电路图。
  • 51单片机流水灯完整程序与电路仿真图,适合单片机初学者学习
  • 基于51单片机流水灯C语言程序,基于51单片机流水灯C语言程序
  • 51单片机流水灯仿真,基于Proteus8.6,包含流水灯流动程序
  • 要求:8个流水灯靠一个按键启动,3种不同的点亮方式。按一下,显示第一种方式,再按一下,切换方式,再一下,再切换。不用中断。----------------不让使用中断,这个要求的比较特殊。虽然没有明确...
  • 转载自... [code="c"] /*************************************************** 程序功能:控制8个LED闪烁, 测试说明:观察LED闪烁 **************************...
  • 单片机流水灯程序要三十二个串行口全用,每个串行口八个LED。 悬赏分:20 - 提问时间2009-9-12 09:59 问题补充:用的是8051单片机,电路如下。其他回答:用的什么单片机? 看了电路图,就知道了。既不是32个串口,也...
1 2 3 4 5 ... 20
收藏数 2,773
精华内容 1,109
关键字:

单片机流水灯程序