单片机制作呼吸灯的C语言程序怎样编写

单片机制作呼吸灯的C语言程序怎样编写,第1张

#include<reg51.h>

sbit LED0=P0^0

sbit wei=P1^1

sbit duan=P1^0

sbit lcden=P1^7

sbit dianzhen=P1^3

sbit leden=P1^2

void Delay(unsigned int t)

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0//定义周腔烂衫期并赋历袜值

lcden=0

P0=0x00

dianzhen=0

P0=0xff

wei=0

duan=0

while (1) //主循环

{

LED0=1

Delay(150000)//特意加伍腔延时,可以看到熄灭的过程

for(PWM_LOW=1PWM_LOW<CYCLEPWM_LOW++)

{

LED0=0

Delay(PWM_LOW)

LED0=1

Delay(CYCLE-PWM_LOW)

}

for(PWM_LOW=CYCLE-1PWM_LOW>0PWM_LOW--)

{

LED0=0

Delay(PWM_LOW)

LED0=1

Delay(CYCLE-PWM_LOW)

}

}

}

void Delay(unsigned int t)

{

while(t--)

}

呼吸灯的程序:

/**************************************************************************** 

       功能:LED灯慢慢变暗,再慢慢变亮。

                  用定时器模拟的PWM调制。

单片机:AT89S52                                                   

******************************************************************************/ 

#include <reg52.h> 

#define V_TH0  0XFF              //设定定时器0,高8位的初值              

#define V_TL0  0XF6              //设定定时皮芹器0,低8位的初值            

#define V_TMOD 0X01              //设定定时器0的工作方式为:方式1(计数位数是16位                                  //,由TL0作为低8位、TH0作为高8位)

#define uchar unsigned char 

#define uint unsigned int                

void init_sys()                         //系统初始化函数

void delay(uint)                        //延时函数

unsigned char ZKB                       //占空比

void main (void) 

   init_sys()                            搭樱//初始化

   while(1)

   {  

      for(ZKB=5ZKB<40ZKB=ZKB+2)         //每调节一次占空比,就延时大概8ms左右,这使得LED现象更明显

           {

                    delay(8) 

            }

      for(ZKB=40ZKB>5ZKB=ZKB-2)

           {

                delay(8) 

           }

    

   } 

}

void delay(uint z)

{

 uint x,y

 for(x=zx>0x--)

  for(y=100y>0y--) 

}

void init_sys()            /*系统初始化函数*/ 

  /*定时器初始化*/ 

  TMOD=V_TMOD         

  TH0=V_TH0 

  TL0=V_TL0 

  TR0=1 

  ET0=1 

  EA=1 

}

void timer0(void) interrupt 1 using 2              

 static uchar click=0    //中断次数计数器变量

 TH0=V_TH0               //重新恢复定时知握丛器初始值

 TL0=V_TL0 

 ++click                       //每计数10次,产生一个中断,并且click增加一个

 if (click>=100)

         click=0              //计满一百次,这重新计数。

                                         /*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。

                                    则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1~100)*/

 

 if (click<=ZKB)          //当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整 

   P1=0x00                      //P1口接的是LED灯

 else 

   P1=0xff

}

 

此程序的总中断时间为100ms,即频率为:100KHZ,占空比从5 变为40(即5%~25%)。

我们通常会在各类器件上看到形形色色的指示灯,它们都分别代表着不尽相同各项功能的运行情况。而由灯发出的指示光要比其他方法传递信息更直接更明显,也更加的经济。而现在呼吸灯这项技术已经应用于各个方面,甚至包括智能机的应用,而其比较多样的呼吸方法在传递相关信息上也是方便至极,那么今天我们就来看看呼吸灯的控制问题。

灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。

应用

广泛应用于手机之上,并成为各大品牌新款手机的卖点之一。如果你的手机里面有未处理的通知,比如说未接来电,未查收的短信等等,呼吸灯就会由暗到亮的变化,像呼吸一样那么有节奏,起到一个通知提醒的作用。

电子爱好者可通过简单的电路来实现呼吸灯的效果。

为何很多手机都取消了呼吸灯

回答之前,小编想先纠正一个问题,并不是智能机都取消了腔亩激呼吸灯,很多设备还是具备这一功能的,只不过能够将这一功能发挥到极致的手机,确实是少之又少。安卓设备其实多数都是有LED灯的,不过原生安卓系统本身没有提供一个可以统一控制的通知中心,而是要每个应用自己决定显示通知的方式,这方式包括声音、震动、LED 灯及其颜色,再加上不同手机的灯或多或少都有些不同,这样就造成了有的应用不支持LED灯有的应用却错误地触发了LED灯。

久而久之,在我的日常使用中,LED灯通常会给人一种十分不可靠的感觉,实际表现在我们该点亮屏幕的时候还是会点亮屏幕,不该点亮屏幕的时候,看到LED灯错误的亮起,也要去点亮屏幕去处理,就这样,一个听起来很好的功能反倒变得有些鸡肋甚至是惹人讨厌。到了安卓4.4以后,感觉系统在LED灯控制方面更为混乱,一些常驻通知栏的图标甚至也会触发LED灯,导致用户体验极差。

而有些如CM一类的第三方ROM会提供系统级的分应用LED灯设置,不过在实际使用中的表现也不够完美。所以虽然LED呼吸灯本来是一个很好的设计,但是安卓系统却没有做好,于是有些厂商索性就取消了LED灯,或者取消了LED灯的呼吸功能。

另外,可能有些人会问,为何苹果手机也没有呼吸灯,这又是个老生常谈的问题了,苹果不具备的东西很多,很多时候我们都不知道为什么,不采用呼吸灯,可能是因为技术,也可能是因为专利,苹果同安卓不同,其并非开源系统,耐此很多时候,苹果都会来规范用户的使用习惯,不设置呼吸灯,或许只是因为苹果觉得用户不需要它吧。至于这位网友在问题中提到的触控反馈,这个其实不需要小编多说了,貌似目前大部分手机都有触控反馈吧,只需要在设置中调出来就好。

呼吸灯的作用

呼吸灯是一个提气的设计,它让手机不再是一块只会亮屏的板砖。因为不是所有的消息通知都需要处理,也不是所有的消息通知都会马上处理。对于手机来讲,亮屏铃声震动属于强通知,这包括一些软件提供的来电闪光功能,呼吸灯则属于弱通知,不是所有人都会定期去查看手机的,多数情况下在办公室我们都只是把手机放在桌上,偶尔去下洗手间也不会带着,这中间如果有消息,我们回来瞟一眼就知道了,呼吸灯作为弱通知的作用,提醒的意义大于通知。

先说呼吸灯,这个本质上是LED的亮度控制。

一般是用PWM方式控制LED亮度,PWM的输出按照一定的规伍袜律变化,就可以做出呼吸灯的效果。

再说30个LED的控制,如果要简单点做,30个LED可以串起来串一个电阻,接高点的电源电压,30个LED用同一个信号控制,当然,亮度也是同步变化的。如果要复杂,那就出30个信号分别控制30个LED串30个电阻,具体看你的追求的效果吧。

呼吸灯的程序,如果有硬件的PWM模块,是很简单的,按一定的规律让PWM的输出变化就可以。

像这样输出10%亮度,持续200ms,输出20%亮度,持续200ms,输出30%亮度,持续200ms。

如果没有硬件PWM模块,可以用软件来模拟,比如,输出10%亮度,持续200ms这两件事合在一起作,变成输出高电平10us,输出低电平90us,循环2000次。

两种方法

方法1:1000个左右的灯,需要10根地址线选通,51的IO管脚应该是没有问题。剩下的就是要用大量的译码器,把二进制信息转换为管脚信息。

估计你仅仅是控制亮和灭,如果是这样选通也就可以进行明暗的控制,否则输出的信息也要加进去,就是说需要加驱动电路。

方法2:用移位电路,比如HC595,在51中地址做为串行信号发出,转换为对应的地址线,然后在连接译码器,这样,51的管脚比较节省,但,编程的难度稍大。

那么上述就是呼吸灯相关控制的方法和技巧,我们讲,呼吸灯控制在硬件圈是一个很普通的项目,而所采用的单片机控制也是硬件里最基础的,相信很多人在研习过后都能够掌握,而即便不必要掌握这个情况,熟悉相关的原理情况也可以让其在遇见故障的时候能够迅速找到方法来排除,那么今天呼吸灯控制的问题就给大家介绍到这里。

土巴兔在线免费为大家提供“各家装修报价、1-4家本地装修公司、3套装修设计方案”,还有装修避坑攻略!点击此链接:【https://www.to8to.com/yezhu/zxbj-cszy.php?to8to_from=seo_zhidao_m_jiare&wb】,就能免费领取哦~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12350777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存