搜索
bottom↓
回复: 15

关于流水灯里面的一个参数疑问?

[复制链接]

出0入0汤圆

发表于 2012-5-25 23:22:34 | 显示全部楼层 |阅读模式
//实例31:用数组作函数参数控制流水花样
#include<reg51.h>
/*************************************************
函数功能:延时约150ms
*************************************************/
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*************************************************
函数功能:流水点亮P0 口8 位LED
*************************************************/
void led_flow(unsigned char a[8])//<======================括号里面的8有什么用,什么我把里面的8改成空格,流水灯的效果没有区别??
{
unsigned char i;
for(i=0;i<8;i++)
{
P1=a[i];
delay();
}
}
/*************************************************
函数功能:主函数
*************************************************/
void main(void)
{
while(1)
{
unsigned char code
Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//流水灯控制码
led_flow(Tab);
}
}



问题在上面的注释里,个人是个C新手,希望热心人帮一把,先谢谢啦.

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-5-25 23:25:59 | 显示全部楼层
你看一下c语言关于形参的问题就知道了

出0入0汤圆

 楼主| 发表于 2012-5-25 23:35:20 | 显示全部楼层
如果是参数,应该很严格的吧,什么改成空格或其它的数值如200等,也照流不误的呢?

出0入0汤圆

发表于 2012-5-25 23:37:48 | 显示全部楼层
本帖最后由 y574924080 于 2012-5-26 00:33 编辑

unsigned char a[]传递的是函数首地址

unsigned char a[8]传递的也是首地址???

我还以为是数组下溢第一个地址咧

修改了~~~
////////////////////////////////////
//  unsigned char a[]传递的是数组首地址
//打错字了

出0入0汤圆

 楼主| 发表于 2012-5-25 23:51:16 | 显示全部楼层
4楼可能有些误会了.
1楼的程序没问题,我是从网上找来的,流水灯能运行.
我的问题是为什么里面的8改成空格或200,流水灯仍然能运行的呢?

出0入0汤圆

发表于 2012-5-25 23:54:53 | 显示全部楼层
答案就是四楼嘛

出0入0汤圆

 楼主| 发表于 2012-5-25 23:57:05 | 显示全部楼层
無智 发表于 2012-5-25 23:54
答案就是四楼嘛

我可以真是太菜了,4楼是答案我还不知道,能不能说的容易理解一点?

出0入0汤圆

发表于 2012-5-26 00:00:46 | 显示全部楼层
Tab[ ]是一个char型的数组,
led_flow(Tab); //这里形参传递是该数组的首地址。你的led_flow函数里边就是做了8个动作。
你将函数原型中的a[num]改成200也是对你传入参数的前8个字符做操作。

如果你for到9或者更大,就会有异常了:)

出0入0汤圆

发表于 2012-5-26 00:02:44 | 显示全部楼层
unsigned char a[]  告诉KEIL这里是数组在RAM里的首地址,就是形参数,建力个模型,模型的具体大小还未知。


unsigned char a[Tab]告诉KEIL这是实参数了,这个模型的大小已确定,可以根据大小分配了。

出0入0汤圆

发表于 2012-5-26 00:02:58 | 显示全部楼层
在定义中:
void led_flow(unsigned char a[8]) // 8的作用其实有点象注释;
在你明白只要做8次动作的前提下,完全可以定义为void led_flow(unsigned char *a)

出0入0汤圆

 楼主| 发表于 2012-5-26 00:13:17 | 显示全部楼层
無智 发表于 2012-5-26 00:02
在定义中:
void led_flow(unsigned char a[8]) // 8的作用其实有点象注释;
在你明白只要做8次动作的前提 ...

我做了多次实验,也觉得它像一个注释,当时看见它是的括号里,所以以为它会对整个程序起重要作用,试着改了很多不同的数,结果流水灯效果没变,才发贴问个明白.

现在明白了,谢谢你们.

出0入0汤圆

发表于 2012-5-26 00:38:21 | 显示全部楼层
又学到东西了~~~~~~

出0入0汤圆

发表于 2012-5-26 12:40:37 | 显示全部楼层
mook_dj 发表于 2012-5-26 00:13
我做了多次实验,也觉得它像一个注释,当时看见它是的括号里,所以以为它会对整个程序起重要作用,试着改了很 ...

推荐一本书给你《C prime plus》,对C语言有一个全面的讲述。

出0入0汤圆

发表于 2012-5-26 13:39:27 | 显示全部楼层
把8改成空格,应该效果是一样的

出0入0汤圆

发表于 2012-5-26 13:41:20 | 显示全部楼层
mook_dj 发表于 2012-5-26 00:13
我做了多次实验,也觉得它像一个注释,当时看见它是的括号里,所以以为它会对整个程序起重要作用,试着改了很 ...

呵呵,还是把C好好认真学一遍吧

出0入0汤圆

 楼主| 发表于 2012-5-28 00:38:59 | 显示全部楼层
汇编我会,看了几个C教程,总觉得有点烦琐,所以想从简单的C入手,记得以前学汇编时也是从简单的开始,点亮一个灯,点闪一个灯,流水灯等,后来基本学会汇编,我现在也用这个方法学C,从浅入深,例程基本都看明白,有时改改例程里面的东西,例如闪烁时间、流水灯的方向等等,觉得效果不错!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 16:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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