32单片机控制小灯如何控制小灯

小彩灯135亮的时候246灭246亮了135灭。这樣他是如何控制应该是串联还是并联。

以前焊接过8*8的光立方里面有串联也有并联,体积大但是这个小彩灯就一个小的控制盒子吧。

曆史总积分:11501

历史总积分:32463

2018春节活动(二)

英威腾PLC体验(三)

2010年度论坛贡献奖

如果是3根线的话就好解释一根公共的,另外2根控制135和246还有一種就是灯本身就有芯片,接收单总线指令但我估计图上应该不是这种,这种较贵可以变幻多种方案。

如果是3根线的话就好解释一根公共的,另外2根控制135和246还有一种就是灯本身就有芯片,接收单总线指令但我估计图上应该不是这种,这种较贵可以变幻多种方案。

曆史总积分:14235

2018春节活动(三)

我感觉第一种3线的几率大!这种控制用单总线 成本要高很多啊!

就用一个震荡器输出两组互补的型号,去驅动大功率三极管或晶匝管即可驱动发光管

以前公司活动室用的就是三个线的一个公共线 另外两个是两路多个彩灯串联,两路轮流通断给人感觉就是 1 3 5 2 4 6

历史总积分:15075

难道你没见过彩灯带的控制器啊,简单的很

1、单片机控制小灯实验板功能设計

  为验证数据通信内容让单片机控制小灯板上的四个按键与android手机客户端上的四个LED灯相互控制;为达到上述基本实验要求,采用单字符传輸数据即可硬件需设计两块相同的单片机控制小灯电路板,包含单片机控制小灯最小系统四路输入,四路输出MAX232模块,九针插口由於Zigbee模块与蓝牙模块即插即用,即分别设计四路插口即可单片机控制小灯的功能图如下图所示:

单片机控制小灯模块通过蓝牙模块与安卓愙户端连接,进而进行数据的传输

单片机控制小灯写入的程序如下:

key1=1;//初始化定义按键和小灯泡最开始的值 if(TI)//判断与此同时是否有发送,在Φ断过程中只接受而不发送

选用安卓手机编写安卓程序。设计界面完成“连接”、“断开”和“上”、“下”、“左”、“右”四个方姠按键以及读取连接状态的显示。

通过编程完成各按键功能界面及功能如下图所示:

下面为android端接收单片机控制小灯传来的数据,实现截图中间四个模拟led灯亮灭的代码以及读写数据的代码:

// 接收计数,更显UI // 接收计数更新UI //对接收到的控制指令进行计数,分别表示上下左祐的次数 //根据上面的次数进行背景的变换,即模拟led亮灭 // 保存已连接设备的名称

android端点击上下左右控制单片机控制小灯端小灯亮灭的代码实現即点击按钮,发送不同的字符01、02、03、04控制亮灭

 3、功能演示部分截图

有一天在网上看到一个制作——LED電子萤火虫我感觉电路很有特点,于是就想仿制一个那个LED电子萤火虫用的是ATtiny13单片机控制小灯来控制,我也正好有而且硬件制作比较簡单,成本也不高10元钱都不到,就能DIY一个虽然简单,但是制作却需要耐心和细心毕竟需要连接12个LED,焊接的工作量不少我自己用了┅个下午才完成,而程序更是陆陆续续地写了几个小时

估计你会很好奇地问,一共才6个可用I/O引脚的 ATtiny13怎么能驱动12个LED呢?其实,我要告诉你它不仅可以点亮每个LED,而且还能控制每个LED的亮度呢!这才是本次制作的精华在制作的过程中,发生了一点小小的意外由于我购买的JST充電线和原来的充电器引脚相反,致使我原本打算使用的小型锂电池损坏不能充电。在万般无奈的情况下我只好更换体积更大的锂电池叻。

图6.1 制作所需的主要材料

这次的主要元器件就是ATtiny13单片机控制小灯和12个LED当然还有双绞线、洞洞板、电池、空瓶子、电阻等其他辅助材料,如图6.1所示

个通用I/O口线、32个通用工作寄存器、1个具有比较模式的8位定时器/计数器、片内/外中断、4路10位ADC、具有片内振荡器的可编程看门狗萣时器,以及3种可以通过软件进行选择的省电模式12个LED为普通的3mm发黄色光的LED。

3 双绞线套入热缩管后焊接LED。焊接好后用打火机加热热缩管,使其收缩固定最后,别忘了再扭下热缩管

5 双绞线焊接到洞洞板上。

6 洞洞板和双绞线焊接好的效果

7 焊接JST插头、锂电池和开关。

为什么6个I/O能控制12个LED呢?它们之间会不会相互影响呢?其实这样的连接方式不仅能控制每个LED,还能控制其亮度呢!之所以能这样连接是因为AVR单片機控制小灯的每个I/O都是3态输出。如果用普通51单片机控制小灯这样连接是不行的。

那么又是如何控制LED的亮度呢?控制亮度的关键是ATtiny13的两路PWM咜们可以分别设置连接到PB0和PB1引脚上。在ATtiny13使用内部振荡器的情况下PWM的最高频率可设置为47.5kHz。而且PWM的极性可以通过设置寄存器而改变这使得12個LED亮度的控制更加简单了。

先谈谈如何控制每个LED单独的亮和灭ATtiny13的每个I/O都有4种状态,即输出0状态、输出1状态、高阻态(悬空态)、带上拉电阻嘚高阻态要使LED亮,必须要让LED中流过正向的电流如果要让最左边的LED亮,PB1输出1、PB2输出0即可但是,其他不相关的引脚需要设置成高阻态否则,如果PB0此时也为1的话第2个LED也会亮。总之为了保证其他LED不受到影响,在设置某个灯亮时必须先把所有I/O设置成不带上拉的高阻态。

能控制亮和灭有什么了不起?呵呵其实还能控制每个LED单独的渐变,就是渐渐变亮渐渐变暗。我举个例子吧如果要最左边的LED渐渐变亮,僦先设置PB2引脚为0电平PB1引脚设置为高电平驱动的PWM波。然后程序逐渐控制PB1的PWM状态,通过调整PWM高电平的脉宽长度来实现亮度控制当PWM高电平嘚时间长时,LED就变亮了反之,LED就变暗了

那么电路原理图(见图6.2)中第7个反过来接的LED怎么实现亮度控制呢?原理还是一样,只是PB2将刚才的0电平設置成1电平原来PB1为高电平脉冲驱动的PWM波设置成低电平脉冲驱动的PWM波即可。同样要控制第7个LED的亮度,就控制PWM低电平的脉宽长度当低电岼的脉宽长度长时,LED就变亮了反之,LED就变暗了

图6.2 控制电路原理图

那么能实现所有的LED同时发光吗?制作过程中,这个功能的实现倒是困扰叻我一会儿后来,我想到了动态扫描什么是动态扫描?老式电视机不就是这个原理吗?电视机通过磁场让射线高速地扫描屏幕,从而产生┅幅画面那么,让每个灯分别亮1ms左右然后像电视机一样不断地扫描,看上去就都亮了在此基础上,再控制每个灯的亮度数值就能實现整体亮度控制了。如果LED足够多单片机控制小灯引脚也足够多,还可能显示一副灰度画面呢!

程序的PWM频率设置为最高的37.5kHz之所以选择这麼高的频率是为了不影响动态扫描。试想如果PWM频率为100Hz,那么还怎么动态扫描呢?在程序中动态扫描实际的频率为62Hz。这已经足够骗过人的眼睛让我们看不到灯的闪烁。

在单片机控制小灯的中断代码中程序每过26s就会产生溢出中断一次,通过变量count计数中断次数当中断的次數达到50次时,就更换下一个LED显示它对应的亮度。LED的亮度存储到led[ ]这个数组中每个LED通过载入对应的亮度值,即通过改变PWM产生寄存器的OCR0A与OCR0B來实际控制高低电平脉宽长度,最终实现亮度的控制当然,每次通过PWM控制亮度都要先根据LED的驱动电平方式,重新设置PWM的控制模式在此之前,还要记得设置不相关的引脚为高阻态

LED的3种效果控制程序能够实现LED不断地变换,只要调用就能分别实现如下功能:所有LED的呼吸效果、逐个点亮和熄灭LED、LED流水显示的效果从编程的思路上讲,led[ ]数组存放了12个元素每个元素所存内容,即对应每个LED灯亮度值要改变某个LED燈亮度,都是通过设置led[ ]数组中对应元素的 PWM 缓冲数值来实现自动变换要让所有的灯全亮只需设置数组中的每个元素的数值都为255即可。如果偠一半的亮度就设置为128要让某个灯单独最亮,只要设置这个LED元素数值为255其他的元素为0。如果任意LED要产生渐渐变亮的效果那么只要对應数组元素中的数值从0逐渐变为255即可。同理渐渐变暗,数值就从255变成0要实现什么样的效果,大家可以通过改变led[

我要回帖

更多关于 单片机控制小灯 的文章

 

随机推荐