打印

谁能帮我解释一下这个花样流水灯的程序?

[复制链接]
6115|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 superbigbaby 于 2010-2-3 15:15 编辑

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Pattern_P0[]=
{
     0xfc,0xf9,0xf3,0xe7,0xcf,0x9f
};

uchar code Pattern_P2[]=
{
     0xf5,0xf6,0xfe,0x54,0x56,0x76,0xd7,0x49,0xa9,0xe4,0xc6
};


void DelayMS(uint x)
{
     uchar t;
while(x--)
{
      for(t=120;t>0;t--);
}
}


void main()
{
     uchar i;
    while(1)
   {
       for(i=136;i>0;i--)
      {
        P0=Pattern_P0[ i];
        P2=Pattern_P2[ i];
        DelayMS(150);
      }
    }
}
现象是花样流水灯.
这个程序小弟咋看不懂捏?这个数组是什么意思?以及这个for循环, 进入for循环的时候i=136, 那P0数组里选的是哪个数呢? 应该没有136这个值啊?

未命名.jpg (96.98 KB )

未命名.jpg

相关帖子

沙发
whbtomboy| | 2010-2-2 16:42 | 只看该作者
这个数组里面保存的是流水灯的“花样值”,至于for语句还是看看c吧,感觉你的基础不是很扎实,多多参考别人的程序,还有就是多看看书,那是根本和基础,有条件的话买个实验板,那样进步快点

使用特权

评论回复
板凳
whbtomboy| | 2010-2-2 16:42 | 只看该作者
这个数组里面保存的是流水灯的“花样值”,至于for语句还是看看c吧,感觉你的基础不是很扎实,多多参考别人的程序,还有就是多看看书,那是根本和基础,有条件的话买个实验板,那样进步快点

使用特权

评论回复
地板
superbigbaby|  楼主 | 2010-2-2 16:47 | 只看该作者
for循环我看的懂啊 就是让i=136 再判断是否大于0 如果大于0则 i++ 运行里面的程序啊  可是刚开始i=136到数组里去 数组里可没有136这个值呀 P0数组只有5个值吧?

使用特权

评论回复
5
ymhui1986| | 2010-2-3 09:01 | 只看该作者
for循环我看的懂啊 就是让i=136 再判断是否大于0 如果大于0则 i++ 运行里面的程序啊  可是刚开始i=136到数组里去 数组里可没有136这个值呀 P0数组只有5个值吧? ...
superbigbaby 发表于 2010-2-2 16:47
是I--,而不是I++。再者这里的I=136是说把Pattern_P0这个数组里面的数一个一个依次送到P0口,循环136次,而不是要这个数组里面要有136个数。

使用特权

评论回复
6
youyuan365| | 2010-2-3 13:40 | 只看该作者
那你是什么地方不懂哦 不就几行程序吗

使用特权

评论回复
7
superbigbaby|  楼主 | 2010-2-3 15:16 | 只看该作者
for循环里面不懂  i=136   P0=Pattern_P0[ i];   而Pattern_P0数组中只有5个数字
他上哪去取第136个数?

使用特权

评论回复
8
ymhui1986| | 2010-2-4 13:08 | 只看该作者
后面不够的好像都取零吧。

使用特权

评论回复
9
zxcscm| | 2011-3-22 12:28 | 只看该作者
今天也发现了这个问题,仔细研究一看,发现这个程序是有错误的或是不完整,Pattern_P0[]和Pattern_P2[]本就应该有136个数据,不然仿真的时候没这么多花样。

使用特权

评论回复
10
zx4798| | 2011-3-23 07:37 | 只看该作者
你是在网上下的一个花痒流水灯proteus实验吧,我测试了下程序不能实现。至于i=136,不够的默认0,即全亮。

使用特权

评论回复
11
免证入网| | 2011-3-23 08:43 | 只看该作者
溢出瞎指。

使用特权

评论回复
12
老鱼探戈| | 2011-3-23 08:44 | 只看该作者
5L 的才应该好好看看C语言基础,数组和数据类型都不都没明白。

使用特权

评论回复
13
刘前辈| | 2011-3-23 09:06 | 只看该作者
修改一下就合理了。  

for(i=136;i>0;i--)
      {
        P0=Pattern_P0[ i %6 ];
        P2=Pattern_P2[ i %11 ];
        DelayMS(150);
      }

使用特权

评论回复
14
tcp1985| | 2011-3-25 09:32 | 只看该作者
楼主贴的程序很明显写得不合理,他的学习精神值得我们学习。
楼上某些人很搞笑,自己都没搞清楚程序就说别人基础不好!

使用特权

评论回复
15
51小刚| | 2011-5-20 19:35 | 只看该作者
我也看到了,不过连线图好像不对吧?只要p0接八个led就行了,p2是不接线的,但屏蔽了P2口的程序就花样乱了,求解

使用特权

评论回复
16
51小刚| | 2011-5-26 19:48 | 只看该作者
14# tcp1985
你试着运行过这段程序没?

使用特权

评论回复
17
discoco| | 2011-5-26 23:22 | 只看该作者
按理说程序的for语句引用的数组索引溢出并不能正确运行,C对数组溢出是不确认的,
但是好像上面的程序却能运行(,仿真试的,对与不对没验证),在i大于数组时输出一直是0;也就是全亮。。说不定是作者故意为了一定时间的全亮而搞的呢,呵呵,反正我等菜鸟是不敢这样弄。

使用特权

评论回复
18
longtao3688| | 2011-7-26 17:15 | 只看该作者
同问,LZ的情况我理解,表示赞同,这是“第 01 篇 基础部分”里的“04 花样流水灯”教程程序,我与楼主有同样的疑问,仿真情况为下列组合依次为1{p0.0,p0.1;p0.1,p0.2;p0.2,p0.3;p0.3,p0.4;p0.4,p0.5;p0.5,p0.6;p0.6,p0.7; ......后续不通形式的花样} 在p0口两灯依次位移时,p1口灯不亮,p0口位移完后p1口依次位移。。。
13#的修改比较贴

使用特权

评论回复
19
longtao3688| | 2011-7-26 17:22 | 只看该作者
试了一下,将for循环次数修改为135或其他的话会出现p0,p1口全亮并不动,修改为11时花样有变化,13#的程序也会造成花样变化。不解,期待高手!!!

使用特权

评论回复
20
sytqq280787575| | 2011-7-26 19:06 | 只看该作者
同意13L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

1

粉丝