完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近在网上找了一个用led灯模拟水滴形成的过程,但是有关水滴的加速和渐变看不懂,求指点
#include typedef unsigned char uint8; ***it DB0 = P1^0; void main() { unsigned char i,k,p,t,j; char l; unsigned char a[]={0,1,2,4,8,16,32,64}; //亮度数组以实现拖尾效果 unsigned char b[]={0,34,48,59,68,76,84,91,97,103,108,111,115,120,122};//间数组以实现加速效果 signed char c[]={-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7}; P1=0xFF; while(1) { //水滴形成(渐变效果) k=0; for(i=0;i<=252;i++) { if(0==(i%4)) k++; for(t=0;t<=16;t++) { DB0=0; for(j=0;j<=64;j++) if(j==k) DB0=1; } } //水滴掉下(加速与拖尾效果) 从这就看不懂了 for(j=0;j<=254;j++) { p=0; for(k=0;k<=15;k++) {if(j==b[k]) l=c[k];} for(i=0;i<=64;i++) { for(k=0;k<=7;k++) { if(i==a[k]) { p=p|(1< if(l>=0) P1=~(t< P1=~(t>>-l); } } } } } } |
|
相关推荐
4个回答
|
|
没有原理图,光让别人看代码,也看不出来呀。而且这个即使看懂,也不知道该怎么表达清楚
|
|
|
|
这个程序的确很神奇。我也是大概知道原理。相当于PWM脉宽调制LED灯的不同亮度。通过具体怎么运行我也想不明白。网上找的答案:水滴变大,就是用了pwm波的占空比,亮的次数一次比一次多的话,那么就会变的越来越亮的,,因为在252除4的63次循环中,每次都会k++,那么下次的时候执行db0=1的时间就会比上一次的时间短,那么就会变大了,不过这个程序这么写看着很复杂,你实现一个灯的亮度变化和,8个灯依次的亮度从大到小就能看懂这个了,等到水滴下落的时候,在254次的循环中,每次遇到加速的时间数组的时候就要变化各个灯的亮度,来模拟下落,然后后面的64的循环就是在64次中,用占空比实现到底是哪个灯最亮,哪个比前个暗一点,然后k的15次循环就是碰到该改变P0的值的一次了,这样就会按照a的数字改变值
|
|
|
|
楼上分析的很好,学习了
|
|
|
|
***到此一游
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11985 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 08:04 , Processed in 0.630565 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号