精华内容
下载资源
问答
  • 51单片机呼吸灯程序

    2013-04-25 12:30:29
    使用延时控制led的亮暗来达到呼吸灯的效果
  • 51单片机控制PWM的脉宽,实现手机呼吸灯效果,51单片机爱好者可以下载使用
  • 1.用C51单片机实现花样流水,代码如下: #include <reg52.h> #define LED_A P1 //led所用的接口,是哪个口就写P几void delayms(){ unsigned char x = 0;  unsigned char i; unsigned char y = 0; while...

    1.用C51单片机实现花样流水灯,代码如下:

    #include <reg52.h>
    #define LED_A P1            //led灯所用的接口,是哪个口就写P几
    void delayms()
    {
    unsigned char x = 0;          
    unsigned char i;
    unsigned char y = 0;
    while(y < 0.001)             //定义led灯的切换的延时时间,越小越快。
    {                     //(y < 0.001);(x<100);(i<100)都可以修改
    x = 0;
    while(x<100)
    {
    i = 0;
    while(i<100)
    {
    i++;
    }
    x++;
    }
    y++;
    }
    }
    #define LED_NUM 8          //定义led灯的数量,可快速实现不同用途的修改;
    void main()
    {
    unsigned char k;
    unsigned char j;
    unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};      //led灯亮灭的十六进制数组;
    unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F};
      while(1)
      {
        for(k=0;k<3;k++)                    //第一个for实现奇偶灯交叉闪烁三次,想闪烁几次就修改(K<3)中的数值;
        {
          LED_A = 0xAA;                      
          delayms();
          LED_A = 0x55;
          delayms();
        }
        for(k=3;k>0;k--)                //实现一个流水灯左右三次(从左到右再从右到左算一次);
        {
          for(j=0;j<LED_NUM;j++)        
          {
            LED_A = LED_ALL[j];
            delayms();
          }
          for(j=6;j>0;j--)
          {
            LED_A = LED_ALL[j];
            delayms();
          }
        }
        for(k=0;k<3;k++)            //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上;
        {
          LED_A = 0xf0;
          delayms();
          LED_A = 0xf;
          delayms();
        }
        for(k=3;k>0;k--)              //实现两个灯依次流水3次;
        {
          for(j=0;j<4;j++)
          {
            LED_A = LED_ALL_2[j];
            delayms();
          }
          for(j=2;j>0;j--)
          {    
            LED_A = LED_ALL_2[j];
            delayms();
          }
        }
      }
    }

     

     

     

     

     

     

    2.实现第一个灯呼吸,由暗变亮,再由亮变暗,程序如下;

    #include <reg52.h>
    sbit LED1 = P3^0;
    void delay(unsigned int a)          //定义一个延时函数
    {
      while(--a);
    }
    void main()
    {
      unsigned int t,circle=800;          //定义变量,circle=800为led灯呼吸的间隔长短,数值越小,间隔越短。
      while(1)
      {
        LED1 = 1;
        for(t=1;t<circle;t++)
        {
          LED1 = 0;
          delay(t);          
          LED1 = 1;
          delay(circle-t);
        }
        LED1 = 0;
        for(t=circle-1;t>0;t--)
        {
          LED1 = 0;
          delay(t);
          LED1 = 1;
          delay(circle-t);
        }
      }
    }

    转载于:https://www.cnblogs.com/37cheng/p/11602798.html

    展开全文
  • 基于51单片机pwm控制的呼吸灯程序

    热门讨论 2011-11-04 21:39:24
    基于51单片机,通过定时器输出pwm波,全局变量控制占空比,达到led呼吸灯的目的。欢迎下载。
  • 今天回答了一个关于用汇编语言控制51单片机产生PWM波实现呼吸灯效果的问题。结果好久不写程序,一时手生,出了不少错误,索性记录一下,也为自己的知乎账号增加的内容。要实现呼吸灯效果本质上是产生占空比可变的PWM...

    今天回答了一个关于用汇编语言控制51单片机产生PWM波实现呼吸灯效果的问题。结果好久不写程序,一时手生,出了不少错误,索性记录一下,也为自己的知乎账号增加的内容。

    要实现呼吸灯效果本质上是产生占空比可变的PWM波,大体思路如下:

    1. 用定时器1控制PWM的频率,我用的开发板板载晶振11.059MHz,近似为12MHz(因为51的定时频率是晶振的1/12,以12MHz计算比较容易),一个定时周期近似为1us,定时器初值设置为64536(16位模式,最大计数值65536),定时1000次,一个周期约为1ms,可生成1kHz频率的PWM。
    2. 用定时器0控制占空比,占空比从0到1再到0,周而复始。假设LED阳极通过限流电阻接VCC,阴极接单片机P2.7引脚,实现过程大致为:定时器1中断程序将P2.7置1,并启动定时器0,定时器0中断程序中将P2.7复位,并停止定时器0。
    3. 通过一个二进制位(20H.0)控制占空比变化方向,0减小,1增大,每次进入定时器0中断,首先判断20H.0,若为0,将定时器0的计数初值加1,若为1,将定时器0计数初值减1。加减操作后判断是否加到最大值(65535)或减到最小值(64536),若到达最大或最小值,20H.0取反。

    (也可以只用一个定时器产生1ms的时间基准,然后设一个变量进行计数,通过软硬结合的定时方法产生PWM)

    以下为用两个定时器纯硬件定时实现程序截图(不支持汇编语言,截图看起来比较好看)

    结尾处有源程序链接,提取码:6msi

    829cc446103dea0f47d09cd8cef6effb.png

    f7a3e8502c22ed4e8c2b2e49a7f1f260.png
    知乎视频www.zhihu.com
    51单片机汇编程序实现PWM呼吸灯pan.baidu.com
    展开全文
  • 注:该51单片机led引脚为P2^ 0 - P2^7,实际代码按照引脚图实现。 代码如下: #include<reg52.h> typedef unsigned int uint; typedef unsigned char uchar; //--------------Delay-------------------- ...

    实现效果如图:
    在这里插入图片描述
    注:该51单片机led灯引脚为P2^ 0 - P2^7,实际代码按照引脚图实现。
    代码如下:

    #include<reg52.h>
    typedef unsigned int uint;
    typedef unsigned char uchar;
    //--------------Delay--------------------
    
    void Delay(uint t)
    {
    	while(--t);
    }
    
    //---------------main--------------------
    void main(void)
    {
    	 uchar LED;
    	 uint Time=600,i=0;
    	 LED=0xfe;
    
    	 while(1)
    	 {	
    		 
    		for(i=1;i<Time;i++)
    		{
    		//open LED
    			P2=LED;
    			LED=LED<<1;
    			if(LED == 0x00)	
    			{
    				P2=LED;				
    				Delay(i);
    			
    		//close LED
    				P2=~(LED);		
    				Delay(Time-i);
    			}
    		}
    		
    		
    		for(i=Time-1;i>0;i--)
    		{
    		//open LED
    			P2=LED;
    			LED=LED<<1;
    			if(LED == 0x00)	
    			{
    				P2=LED;				
    				Delay(i);
    		//close LED
    				P2=~(LED);		
    				Delay(Time-i);
    			}
    		}
    	}
    }
    			
    
    
    展开全文
  • 51单片机实现呼吸灯

    千次阅读 2019-11-20 08:28:26
    使用51单片机控制LED,实现其由暗变亮,再由亮变暗的渐变过程。 二、程序 #include <STC15F2K60S2.H> #include "MacroAndConst.h" sbit LED = P1^5; #define LED_ON() LED = 0; //LED亮 #define LED_OFF...

    一、概述

    使用51单片机控制LED,实现其由暗变亮,再由亮变暗的渐变过程。

    二、程序

    #include <STC15F2K60S2.H>
    #include "MacroAndConst.h"
    
    sbit	LED	= P1^5;
    
    #define	LED_ON()	LED = 0;	//LED亮
    #define	LED_OFF()	LED = 1;	//LED灭
    
    #define	LED_PWM_LIMIT_MAX	99
    #define	LED_PWM_LIMIT_MIN	0
    
    
    static	u8	s_u8TimeCounter = 0;	//中断计数
    static	u8	s_u8LedDirection	=	0;	//LED方向控制	0:渐亮  1:渐灭
    static	u8	s_u8LedPWMCounter	= 0;	//LED占空比
    
    void	Timer0Init(void)
    {
    	AUXR |= 0x80;		//定时器时钟1T模式
    	TMOD &= 0xF0;		//设置定时器模式
    	TL0 = 0x5C;		//设置定时初值
    	TH0 = 0xF7;		//设置定时初值
    	TF0 = 0;		//清除TF0标志
    	TR0 = 1;		//定时器0开始计时
    	ET0	=	1;			//使能定时器0中断
    }
    
    void	Timer0Isr(void)	interrupt	1
    {
    	static	int8	s_u8PWMCounter	=	0;
    	TH0 = 0xF7;		//定时器初始值(200us中断1次)
    	TL0 = 0x5C;
    	
    	if(++s_u8TimeCounter	>=	100)	//每20ms调整一次LED占空比
    	{
    		s_u8TimeCounter	=	0;
    		//如果是渐亮方向变化,则占空比递增
    		if((s_u8LedPWMCounter <=	LED_PWM_LIMIT_MAX)&&(s_u8LedDirection == 0))
    		{
    			s_u8LedPWMCounter++;
    			if(s_u8LedPWMCounter > LED_PWM_LIMIT_MAX)
    			{
    				s_u8LedDirection	=	1;
    				s_u8LedPWMCounter	=	LED_PWM_LIMIT_MAX;
    			}
    		}
    		//如果是渐灭方向变化,则占空比递减
    		if((s_u8LedPWMCounter >	LED_PWM_LIMIT_MIN)&&(s_u8LedDirection == 1))    
                 //此处有坑,若写成“>=”,则达不到预期效果
    		{
    			s_u8LedPWMCounter--;
    			if(s_u8LedPWMCounter <= LED_PWM_LIMIT_MIN)
    			{
    				s_u8LedDirection	=	0;
    				s_u8LedPWMCounter	=	LED_PWM_LIMIT_MIN;
    			}
    		}
    		s_u8PWMCounter	=	s_u8LedPWMCounter;	//获取LED的占空比
    	}
    	if(s_u8PWMCounter	>	0)	//占空比大于0,则点亮LED,否则熄灭
    	{
    		LED_ON();
    		s_u8PWMCounter--;
    	}
    	else
    	{
    		LED_OFF();
    	}
    }

     

    展开全文
  • 基于51单片机呼吸灯

    万次阅读 多人点赞 2019-01-20 10:46:27
    我们家里使用的是50Hz,一秒钟会亮灭50次,但是我们觉得是一直亮着的。 但是亮和暗的程度取决于发光和不发光所占时间的长短比例,但是亮和灭的持续时间不能超过1/24秒(视觉残留最长时间) 程序设...
  • 程序是用51单片机通过PWM(脉冲宽度调制)方式控制LED,达到呼吸灯的效果。
  • 程序为基于加强型51单片机内部的PWM输出功能设计的LED呼吸灯
  • 51单片机实现流水呼吸灯

    千次阅读 2020-05-09 09:19:54
    这篇博客介绍下用定时器来产生占空比不同的方波,完成了呼吸灯的效果,同时可以实现多个led灯同时呼吸形成类似流水的效果。  主要用到定时器0来形成一个1ms的中断,每次进入中断服务程序会让小灯当前处于的周期加1...
  • [DIY多模式]51单片机心形流水灯+呼吸灯+蜂鸣器音乐总体设计1.基础硬件DIY设计1).整体原理图2).PCB电路3).3D_PCB2.单片机程序设计1)呼吸灯[简易模拟PWM]2)蜂鸣器音乐3)几种简易流水灯方式3.效果展示1).实物...
  • STM32之呼吸灯程序

    2020-08-11 08:31:28
    听说呼吸灯是很久以前的事情了,那时候刚刚学习51单片机,没有单片机的基础。后来在网上看到了一个呼吸灯的电路图,甚是复杂,根本看不懂,无奈之下放弃了呼吸灯的制作。在接触了STM32后,发现呼吸灯还是比较容易...
  • PWM的程序讲解: 通过控制正电平的脉冲所占的时间比来控制小灯的亮暗程度或者电机转速的快慢 等等很多需要调速的地方都可以使用PWM 以小灯为例占空比越大(即高电平所占的时间更长)就越亮 源码: #include<reg...
  • 可调呼吸灯C程序

    2013-02-27 19:24:12
    51单片机控制LED灯,PWM输出,实现LED明暗调节;关键词:可调 呼吸灯 C程序
  • 图片来源:百度图片这次给大家带来的是Proteus仿真之流水,流水作为单片机入门的实验课程,具有代表性意义。Proteus仿真软件是英国一家公司出品的EDA仿真软件,能仿真大多数单片机及外围电路。Proteus8.7版本...
  • 本目录下提供的是《手把手教你学51单片机(C语言版)》教材中所有例程与作业习题的源代码。 请将整个目录复制到电脑硬盘上使用,如直接在光盘路径下打开工程可能会导致软件报错。 运行目录下的Clean.bat可以清理程序...
  • 51单片机应用开发25例—基于Proteus仿真(电路图+程序) 分享的51单片机应用开发25例—基于Proteus仿真非常全面,里面仿真工程文件和源程序都有. 目录: 应用实例1呼吸灯\ 应用实例10多点温度采集系统\ ...
  • 之前写过用内部pwm直接产生... 这次写的是用定时器,不推薦用延时来模拟。此程序结合了我之前发的矩阵按键程序,按键进行亮度调整。 #include"lcd12864.h" #include<reg51.h> uchar code num1[]={" 1234567...
  • 单片机编程程序,经典的例子。包括红外遥控风扇,呼吸灯与交通灯
  • 第2节介绍了如何用单片机控制 LED 小灯闪烁起来,在此基础上,又在上一节讨论了如何制作“呼吸灯”。缺乏交互的单片机不过,这两节制作的小灯时,我们把使用 C语言编写的控制程序烧写到单片机后,就无法再控制 LED ...
  • 关注【电子开发圈】微信公众号,一起学习吧!...电子DIY、Arduino、51单片机、STM32单片机、FPGA…… 电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机…… 点击链接,免费下载100G+电子设计学习资料! ...
  • 第2节介绍了如何用单片机控制 LED 小灯闪烁起来,在此基础上,又在上一节讨论了如何制作“呼吸灯”。缺乏交互的单片机不过,这两节制作的小灯时,我们把使用 C语言编写的控制程序烧写到单片机后,就无法再控制 LED ...
  • 51单片机之大杂烩

    2014-11-14 15:51:51
    /************************************************************ 程序实现的功能: 用矩阵按键控制 8*8 LED 点阵和数码管, 实现按下1到9的数字键数码管从... 同时LED点阵以呼吸灯的方式渐明渐暗,显示“王”字,
  • 第2节介绍了如何用单片机控制 LED 小灯闪烁起来,在此基础上,又在上一节讨论了如何制作“呼吸灯”。缺乏交互的单片机不过,这两节制作的小灯时,我们把使用 C语言编写的控制程序烧写到单片机后,就无法再控制 LED ...
  • 32LED心形流水

    2017-05-31 15:57:23
    51单片机的32LED心形流水灯.程序,有呼吸灯等多种效果
  • huxi51deng

    2013-04-15 17:08:44
    学习51单片机的同学可以参考这个呼吸灯程序看一看
  • 说明:专为楼下客厅设计的PWM调光智能LED照明系统。 基本功能: 1、整套系统基于C51单片机控制,使用315MHz无线遥控模块实行无线控制 ... 3、设置呼吸灯提醒程序,睡眠状态中显示呼吸灯,提示电源并未切断。

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

51单片机呼吸灯程序