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

[复制链接]
7544|23
 楼主| superbigbaby 发表于 2010-2-2 16:30 | 显示全部楼层 |阅读模式
本帖最后由 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这个值啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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个值吧?
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个数。
youyuan365 发表于 2010-2-3 13:40 | 显示全部楼层
那你是什么地方不懂哦 不就几行程序吗
 楼主| superbigbaby 发表于 2010-2-3 15:16 | 显示全部楼层
for循环里面不懂  i=136   P0=Pattern_P0[ i];   而Pattern_P0数组中只有5个数字
他上哪去取第136个数?
ymhui1986 发表于 2010-2-4 13:08 | 显示全部楼层
后面不够的好像都取零吧。
zxcscm 发表于 2011-3-22 12:28 | 显示全部楼层
今天也发现了这个问题,仔细研究一看,发现这个程序是有错误的或是不完整,Pattern_P0[]和Pattern_P2[]本就应该有136个数据,不然仿真的时候没这么多花样。
zx4798 发表于 2011-3-23 07:37 | 显示全部楼层
你是在网上下的一个花痒流水灯proteus实验吧,我测试了下程序不能实现。至于i=136,不够的默认0,即全亮。
免证入网 发表于 2011-3-23 08:43 | 显示全部楼层
溢出瞎指。
老鱼探戈 发表于 2011-3-23 08:44 | 显示全部楼层
5L 的才应该好好看看C语言基础,数组和数据类型都不都没明白。
刘前辈 发表于 2011-3-23 09:06 | 显示全部楼层
修改一下就合理了。  

for(i=136;i>0;i--)
      {
        P0=Pattern_P0[ i %6 ];
        P2=Pattern_P2[ i %11 ];
        DelayMS(150);
      }
tcp1985 发表于 2011-3-25 09:32 | 显示全部楼层
楼主贴的程序很明显写得不合理,他的学习精神值得我们学习。
楼上某些人很搞笑,自己都没搞清楚程序就说别人基础不好!
51小刚 发表于 2011-5-20 19:35 | 显示全部楼层
我也看到了,不过连线图好像不对吧?只要p0接八个led就行了,p2是不接线的,但屏蔽了P2口的程序就花样乱了,求解
51小刚 发表于 2011-5-26 19:48 | 显示全部楼层
14# tcp1985
你试着运行过这段程序没?
discoco 发表于 2011-5-26 23:22 | 显示全部楼层
按理说程序的for语句引用的数组索引溢出并不能正确运行,C对数组溢出是不确认的,
但是好像上面的程序却能运行(,仿真试的,对与不对没验证),在i大于数组时输出一直是0;也就是全亮。。说不定是作者故意为了一定时间的全亮而搞的呢,呵呵,反正我等菜鸟是不敢这样弄。
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#的修改比较贴
longtao3688 发表于 2011-7-26 17:22 | 显示全部楼层
试了一下,将for循环次数修改为135或其他的话会出现p0,p1口全亮并不动,修改为11时花样有变化,13#的程序也会造成花样变化。不解,期待高手!!!
sytqq280787575 发表于 2011-7-26 19:06 | 显示全部楼层
同意13L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部