51单片机LED流水灯拖尾效果.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机LED流水灯拖尾效果51单片机LED流水灯拖尾效果

高级流水灯--水滴效果(渐变带拖尾效果)实现和讲解简介学习嵌入式第一个例子通常都是控制一个LED亮灭,然后是花样繁多的流水灯,但不管灯的花样如何变化,单个LED的亮度没有变化,只有亮、灭两个状态,本章我们实现如何控制LED的亮度。1 什么是PWM脉冲宽度调制(Pulse Width Modulation,简称PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种技术。在本章的应用中可以认为PWM就是一种方波。比如图1:/bbs_upload782111/files_48/ourdev_701979FVHE6E.png(原文件名:120611_0.png) 图1 方波是周期为10ms,占空比为60%的PWM。占空比:高电平在一个周期之内所占的时间比率。2 硬件设计在例说51单片机的第三章,我们讲过如何控制开发板上LED的亮灭。首先译码器输出端LEDS6为低,T10导通,给8个LED供电,然后通过缓冲器8个输出端BD0~BD7的控制LED的亮灭(低亮高灭)。/bbs_upload782111/files_48/ourdev_701980ZDAXQ9.png(原文件名:120611_1.png) 图2 LED硬件连接如果BD口输出高低不断变化,则LED会闪烁;如果这种高低电平变化非常快,由于人的视觉暂留现象,LED就会出现不同的亮度。3 软件设计3.1 PWM能否控制亮度下面我们就用实践验证PWM是否能够控制LED的亮度,测试代码如下:程序清单L1:验证PWM能否控制LED的亮度1 #include reg52.h2 #include my_type.h3 #include hw_config.h4 5 6 void main(void)7 {8 u8 i = 0;9 10 //使能独立LED的供电,即LEDS6输出低电平11 LEDEN = 0;12 ADDR0 = 0;13 ADDR1 = 1;14 ADDR2 = 1;15 ADDR3 = 1;16 17 //第一个LED亮18 P0 = 0xFE;19 20 while(1)21 {22 for(i=0; i250; i++)23 {24 if(i10)25 {26 P0 = 0xFD; //第二个灯亮27 }28 else29 {30 P0 |= 0x02; //第二个灯灭31 }32 }33 }34 }L1(22-32):这段代码实现P0.1输出占空比为96%的方波,而P0.0恒为低。P0.1输出如图3所示(受纸张限制,图中高低电平长度比例和实际有偏差)。/bbs_upload782111/files_48/ourdev_701981I421F1.png(原文件名:120611_2.png) 图3下载验证:从开发板上可以看到运行效果,D1比D2亮。(这里说明一点:当P0输出低电平时,LED亮,所以,PWM的占空比越小越亮)。3.2 产生8个亮度级别3.1节的例子证实了我们的设想,PWM可控制LED的亮度,下面我们设计几组占空比不同的PWM,看看对LED亮度的控制效果。代码如下:程序清单L2:不同占空比对LED亮度的控制1 #include reg52.h2 #include hw_config.h3 #include my_type.h4 5 6 //亮度级别表7 code u8 LightLevel={0,1,2,4,8,16,32,64};8 9 void main(void)10 {11 u8 i = 0;12 u8 j = 0;13 u8 k = 0;14 u8 temp = 0;15 16 //使能独立LED的供电,即LEDS6输出低电平17 LEDEN = 0;18 ADDR0 = 0;19 ADDR1 = 1;20 ADDR2 = 1;21 ADDR3 = 1;22 23 //开始全灭24 P0 = 0xFF;25 26 while(1)27 {28 //P0端口输出8组占空比不同的PWM29 for(i=0; i64; i++)30 {31 for(j=0; j8; j++)32 {33 if(LightLevel = i)34 {35 temp |= (1j);36 }37 else38 {39 temp = ~(1j);40 }41 }42 43 P0 = temp;44 }45 }46 }L2(29-45).此段程序是让P0口输出8组占空比不同的PWM,如图4:/bbs_upload782111/files_48/ourdev_701982T6U1EV.png(原文件名:120611_3.png) 图4下载验证:从开发板上可以看到运行效果,从D1到D8的亮度逐渐增大。3.3 水滴下落效果根据PWM可控制LED亮度的原理,我们用8个LED实现水滴

文档评论(0)

yyanrlund + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档