谁能帮我解释下这个单片机花样流水灯程序?

#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodePattern_P0[]=... #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;
P2=Pattern_P2;
DelayMS(150);
}
}
}
现象是花样流水灯.
这个程序小弟咋看不懂捏?这个数组是什么意思?以及这个for循环, 进入for循环的时候i=136, 那P0数组里选的是哪个数呢? 应该没有136这个值啊?
补充下 这个程序可以实现花样流水灯 我在proteus里仿真的
展开
 我来答
周飞10086
2012-06-13
知道答主
回答量:12
采纳率:0%
帮助的人:7万
展开全部
程序有毛病,可能你的数组中的数据个数你少写了,如果for循环中的i=136,那么数组中一定得有136个数据,否则自动取零补充,灯不亮或一直亮。i=多少选的就是数组中的第几个数。主程序中的P0=Pattern_P0应该为P0=Pattern_P0[ ],P2也是如此 。
百度网友27209e7cd
2010-02-03 · TA获得超过1404个赞
知道小有建树答主
回答量:805
采纳率:0%
帮助的人:931万
展开全部
数组里的数是流水灯花样数据和或者位选吧。没有电路图,不好乱说。

i=136,这是循环的次数,FOR循环一共会执行到i=0时结束退出。
P0=Pattern_P0;这句话是错的,Pattern_P0是指针,指到第一个数据,估计流水流不起来。P0、P2永远不变。

在KEIL中调试,P0/P2均无变化。

您的仿真有误,就程序而言,肯定是不会变的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yjicss123
2010-02-02
知道答主
回答量:27
采纳率:0%
帮助的人:27.4万
展开全部
这个程序有问题,不能实现花样流水灯,输出的永远是第一个值,它没有自增
可以这和写
P0=Pattern_P0[i%6];
P2=Pattern_P2[i%11];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cxtldh
2010-02-04 · TA获得超过342个赞
知道小有建树答主
回答量:640
采纳率:100%
帮助的人:449万
展开全部
你的程序是有问题啊, 怎么能P0=Pattern_P0; P2=Pattern_P2;这样赋值呢?用一个变量控制P0和P2口的数组位置,就加个
void main()
{
uchar n;
uchar i;
while(1)
{
for(i=136;i>0;i--)
{
P0=Pattern_P0[n%6];
P2=Pattern_P2[n%11];;
n++;
DelayMS(150);
}
}
}
包你行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式