找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1910|回复: 6
打印 上一主题 下一主题
收起左侧

单片机模拟水滴形成掉下程序,看不太明白 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:237797 发表于 2019-8-5 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序出自金沙滩宋师傅视频教程,作者:孤竹翼羽
对于程序里面水滴形成,水滴落下,不明白。在视频中宋师傅说了工作原理,自己还是没有看明白,有哪位网友看明白了的,能不能详细注解一下。


/**作者:网友 孤竹翼羽 **/
#include <reg52.h>
typedef unsigned char uint8;


sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit DB0 = P0^0;


void main()
{
        unsigned char i,k,p,t,j;
        char l;
        unsigned char a[]={0,1,2,4,6,16,32,64};                                                                          //亮度数组以实现拖尾效果
        unsigned char b[]={0,34,48,59,68,76,84,91,97,103,109,114,119,123,126};          //时间数组以实现加速效果
        signed   char c[]={-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7};
        
        ENLED=0;ADDR3=1;
        ADDR0=0;ADDR1=1;ADDR2=1;
        P0=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<<k);
                                t=~p;
                                if(l>=0)
                                P0=~(t<<l);
                                else
                                P0=~(t>>-l);
                        }
                }
        }
}
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342774 发表于 2019-8-6 08:50 来自手机 | 只看该作者
有没有视频链接
回复

使用道具 举报

板凳
ID:213173 发表于 2019-8-6 11:17 | 只看该作者
其实就是流水灯的一种形式,利用PWM调整亮度,按序渐暗。
回复

使用道具 举报

地板
ID:282850 发表于 2019-8-6 11:27 | 只看该作者
一排LED从上到下,点亮的第一个延时下移到点亮2,一直移到亮第8个,这是流水灯。水滴下落,是点亮的第1,由弱光渐变强光,最亮时开始下移,就是水滴下落。拖尾效果是刚关闭的1、2个(上方的)还保持一定亮度,有点难度。个人觉得没有太多实用价值,研究一下即可。现实中用的多是开、关逻辑,有、无逻辑再加时间量。
学单片机后,总结出最优秀的程序是《点亮一个LED》,简单才是智慧,对上边的程序我不感趣,看金沙滩视频时,这是一个学生新创出的,看了一眼就“呵呵”了。
回复

使用道具 举报

5#
ID:251047 发表于 2019-8-6 11:32 | 只看该作者
就是根据自由落体加速度计算位置换成LED显示嘛
回复

使用道具 举报

6#
ID:237797 发表于 2019-8-6 11:37 | 只看该作者
HNZ666 发表于 2019-8-6 08:50
有没有视频链接

不知道如何上传视频
回复

使用道具 举报

7#
ID:237797 发表于 2019-8-6 11:40
HNZ666 发表于 2019-8-6 08:50
有没有视频链接

file:///C:/Users/Administrator/Desktop/%E6%B0%B4%E6%BB%B4%E5%BD%A2%E6%88%90%E4%B8%8B%E8%90%BD%E8%A7%86%E9%A2%91.mp4

8#
ID:237797 发表于 2019-8-10 08:16 | 只看该作者
有没有看懂的,帮忙注解一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表