其中P0^1-P0^7控制二极管发光,0亮,1不亮
我的程序 想用函数实现左移 ,然后挨个返回 值 ,实现LED灯 从右向左 依次亮!
这个结果是 右一先亮 然后后面7个全亮了,为什么?
#include<reg52.h>
int delay(int m)
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<2000;j++)
;
}
int zuoyi(void)
{
int i,m;
delay(20);
for(i=0,m==0xfe;i<7;i++)
{
m<<=1;
return(m);//m左移一位后返回m值
delay(20);//延时
}
}
main()
{
int i,a;
while(1)
{
P0=0xfe;
for(;;a++)
{
P0=zuoyi();//m返回值赋给P0,目的是让PO从右8向左依次亮 a=0;
}
}
}
你的意思是,zuoyi()函数执行7次之后,才返回一个最终值吗?return()不是在for循环内吗?为什么不是循环一次返回一次?
追答没看仔细,不好意思。m是局部变量,退出函数后会被丢失。还有m没有赋初值,在第一次调用时都是随机的,
追问for(i=0,m==0xfe;i<7;i++)
m已经赋值了
还是不太明白 可不可以帮我把函数内部改一下,使能够用函数 实现逐步左移,没多少分 再给你加10分吧
噢 对头 应该是m=0xfe
噢 应该是m=0xfe
追答C程序
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
void main()
{
P0=0x7f;
while(1)
{
P0=_cror_(P0,1); //P0的值向左循环移动
Delay(150);
}
}
protues仿真图