ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:269.12KB ,
资源ID:19316743      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19316743.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(高级流水灯水滴效果Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

高级流水灯水滴效果Word格式文档下载.docx

1、 #include my_type.h3hw_config.h4 56 void main(void)7 8 u8 i = 0;910 /使能独立LED的供电,即LEDS6输出低电平11 LEDEN = 0;12 ADDR0 = 0;13 ADDR1 = 1;14 ADDR2 = 1;15 ADDR3 = 1;1617 /第一个LED亮18 P0 = 0xFE;1920 while(1)2122 for(i=0; i250; i+)2324 if(i10)2526 P0 &= 0xFD;/第二个灯亮27 28 else2930 P0 |= 0x02;/第二个灯灭31323334L1(22-32

2、):这段代码实现P0.1输出占空比为96%的方波,而P0.0恒为低。P0.1输出如图3所示(受纸张限制,图中高低电平长度比例和实际有偏差)。120611_2.png) 图3下载验证:从开发板上可以看到运行效果,D1比D2亮。(这里说明一点:当P0输出低电平时,LED亮,所以,PWM的占空比越小越亮)。3.2 产生8个亮度级别3.1节的例子证实了我们的设想,PWM可控制LED的亮度,下面我们设计几组占空比不同的PWM,看看对LED亮度的控制效果。代码如下:程序清单L2:不同占空比对LED亮度的控制 /亮度级别表 code u8 LightLevel8=0,1,2,4,8,16,32,64;u8

3、i = 0; u8 j = 0; u8 k = 0; u8 temp = 0;/使能独立LED的供电,即LEDS6输出低电平LEDEN = 0;ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;ADDR3 = 1; /开始全灭 P0 = 0xFF;while(1) /P0端口输出8组占空比不同的PWM64; for(j=0; j8; j+) if(LightLevelj = i)35 temp |= (1j);36373839 temp &= (140414243 P0 = temp;444546L2(29-45).此段程序是让P0口输出8组占空比不同的PWM,如图4:120611_

4、3.png) 图4从开发板上可以看到运行效果,从D1到D8的亮度逐渐增大。3.3 水滴下落效果根据PWM可控制LED亮度的原理,我们用8个LED实现水滴下落的效果。第一步,水滴逐渐变大,用D1从暗变亮模拟;第二步,水滴下落,带有拖尾效果,LED逐个亮,移动速度加快,且越靠前的LED亮度越大。程序清单L3 水滴流水灯 /水滴时间,实现加速效果 code u8 LightTime16=16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1;u8 i,j,k;u8 temp,count; u8 state; /-水滴逐渐变大(第一个LED亮度逐渐变大)- /一个亮度级别发送64

5、个脉冲 /以i为亮度级别,随着i的增大,占空比增大 for(k=0; k i)4748 /-水滴降落过程-49 for(state=0; state16; state+)50 51 /每一状态维持LightTimestate个脉冲52 for(count=0; count=LightTimestate; count+)5354 /temp记录8个LED的状态,0代表亮,1代表灭55 temp = 0x00;5657 /一个脉冲长度j从0到63585960 /根据亮度表,依次确定8个LED当前状态,亮或灭616263 /以j为亮度级别,每个LED亮度不一样64 if(LightLevelk =

6、j)6566 temp |= (1 k);67686970 if(state (7-state);73747576 P0 = (temp) (state-7);777879808182L2(31-46).实现水滴变大效果,这段代码的作用可用图形表达,如图5:120611_4.png) 图5控制D1由暗变亮,用了64个亮度级别,每个级别发送64个脉冲。L2(49-81).实现水滴下落。代码就不逐行解释了,大家可根据注释自己分析,主要说一下实现的方法。定义LED有8个亮度级别,若用开发板上的8个LED表示,如图6:120611_5.png) 图6图中的红色面积代表亮度程度。实现流水效果的方法就是:

7、让所有的亮度依次经过在所有LED,如图7:120611_6.png) 图7状态的持续时间从0-15逐渐减小,以模拟水滴加速。下载到开发板上,可以看到水滴下落效果。3.4 定时器产生PWM前面3个例子中,我们用循环语句虽然能产生占空比不同的PWM,但PWM的周期不好控制,对此,我们学习如何用定时器产生特定周期PWM。关于8051定时器的使用方法,大家可以参考例说51单片机的4章和5章。我们用定时器0产生PWM,代码如下:程序清单L4 定时器0产生PWM code u8 LightLevel8=1,2,4,8,16,28,50,64; /函数声明 void timer0_init(void); t

8、imer0_init(); /* 函数名称:timer0_init 功 能:初始化定时器0 */ void timer0_init(void) TMOD = 0x01;/运行模式1TH0= 0xFF;/10us中断TL0= 0xFA;EA= 1;/开启中断ET0TR0/启动定时器 /*timer0_overflow定时器0溢出中断 */ void timer0_overflow(void) interrupt TIMER0_OVERFLOW u8 i,temp = 0; static u8 count = 0; count+; count %= 64; if(LightLevel = count)i); TR0 = 0; TH0 = 0xFF;/重新赋值TL0 = 0xF7;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1