51函数参数?51单片机多参数函数怎么写的啊
一、51单片机C语言
朋友,很简单啊,看我的:
第一个错误:在unsigned char array[7]={0xFE,0xFD,0xFA,0xF7,0xEF,0xEF,0xDF,0xAF,0x7F}
中,定义了7个元素,但在大括号中有9个元素,
第二个错误:就上面那个unsigned char array[7]={0xFE,0xFD,0xFA,0xF7,0xEF,0xEF,0xDF,0xAF,0x7F},后面有个分号,即为:unsigned char array[7]={0xFE,0xFD,0xFA,0xF7,0xEF,0xEF,0xDF,0xAF,0x7F};
第三个错误:延时函数定义错误:缺少形参名,应该定义为:
void msec(unsigned int Dlay);
后面定义为: void msec(unsigned int Delay){
unsigned char j;
while((x--)!=0){
for(j=0,j<=125;j++)
{;}
}
}
Delay你也可换其它的名字,
后结果为:
#include<reg51.h>
void msec(unsigned int Delay);
void main()
{
unsigned char array[8]={0xFE,0xFD,0xFA,0xF7,0xEF,0xEF,0xDF,0xAF};
unsigned int i;
for(i=0;i<=7;i++)
{
P1=array[i];
msec(100);
}
}
void msec(unsigned int Delay)
{
unsigned int j;
while((Delay--)!=0)
for(j=0;j<=125;j++)
{;};
}
朋友,你还不把分给我,我就服了你了:void msec(unsigned int x)
{
unsigned char j;
while((x--)!=0)
for(j=0;j<=125;j++)
{;};
}
for(j=0;j<=125;j++)
j=0;后面有个分号
二、C51函数是如何调用
在你原来的函数基础上,加上三个参数,分别是:
1要*作的PORT口
2要进行的*作
3要*作的引脚
当然,如果你的目标很明确,可以把以上三个参数裁剪掉一些,利于系统的效率提高.
下面是我写的示例程序,你可能参考一下:
#include<reg52.h>
#define Pin0 0x01
#define Pin1 0x02
#define Pin2 0x04
#define Pin3 0x08
#define Pin4 0x10
#define Pin5 0x20
#define Pin6 0x40
#define Pin7 0x80
#define OPT_CPL 0x00//----取反某位*作
#define OPT_CLR 0x01//----清零某位*作
#define OPT_SET 0x02//----置一某位*作
void Operate(
/*这里写你原来的参数,*/
unsigned char Port_Num,
unsigned char Opr_Style,
unsigned char Pins
)
{
//----如果在单片机PORT口范围之内,刚读取当前PORT口的状
//----如果不在范围之内,死循环
//----注意,为了效率起见,这个部分可以根据实际应用进行裁剪
if(Port_Num== 0)
{
Port_Num= P0;
}
else if(Port_Num== 1)
{
Port_Num= P1;
}
else if(Port_Num== 2)
{
Port_Num= P2;
}
else if(Port_Num== 3)
{
Port_Num= P3;
}
else
{
while(1);
}
//----如果是取反相应位,进行异或*作
//----如果清零相应位,则位与*作
//----如果置位相应位,则位或*作
//----如果都不在范围之内,则死循环
//----这段代码也根据实际情况裁剪
if(Opr_Style== OPT_CPL)
{
Port_Num ^= Pins;
}
else if(Opr_Style== OPT_CLR)
{
Port_Num&=~Pins;
}
else if(Opr_Style== OPT_SET)
{
Port_Num|= Pins;
}
else
{
while(1);
}
//----如果在单片机PORT口范围之内,刚读取当前PORT口的状
//----如果不在范围之内,死循环
//----注意,为了效率起见,这个部分可以根据实际应用进行裁剪
if(Port_Num== 0)
{
P0= Port_Num;
}
else if(Port_Num== 1)
{
P1= Port_Num;
}
else if(Port_Num== 2)
{
P2= Port_Num;
}
else if(Port_Num== 3)
{
P3= Port_Num;
}
else
{
while(1);
}
//----以上的内容,可根据实际情况进行裁剪,以实现程序优化
//----添加你的功能的其他代码---------------
}
void main(void)
{
//----使用示例:函数功能的同时,置位P2口的P2.0,P2.5,P2.7
Operate(/*这里写你原来的参数*/2,OPT_SET,(Pin0|Pin5|Pin7));
//----使用示例:函数功能的同时,清零P1口的P1.2,P1.5,P2.6
Operate(/*这里写你原来的参数*/1,OPT_CLR,(Pin2|Pin5|Pin6));
}
三、51单片机多参数函数怎么写的啊
51单片机C程序中子函数是可以有多个形参的,第二个参数y也要声明类型的,应该写成(uint x,uint y)。但是就你的流水灯程序,没必要写那么麻烦,延时函数带一个参数就够了,第二个循环变量放在函数中声明并且固定初值,你这是自找麻烦了。曾经回答过这种提问,因这种两个形参的延时函数在编译时会产生错误,变成弄巧成拙了,延时没有效果了。
四、51单片机用c语言怎么写延时函数
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M*100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达呢?我们可以用两套for循环
void delay(int i){
int x,y;
for(x=i;x>0;x--){
for(y=120;y>0;y--)
}
}
参数 i代表该函数延时多少ms