C 关于单片机IO和函数的求助

Yukikazee 2019-11-05 11:45:34
刚接触单片机,写了一个呼吸流水灯的代码,但是呼吸灯函数要写八次,想用一个子函数控制灯,想请教一下各位,怎样才能把P1^0-P1^7与呼吸灯函数联系起来?

#include<reg52.h>
#define uint unsigned int
sbit l1=P1^0;
sbit l2=P1^1;
sbit l3=P1^2;
sbit l4=P1^3;
sbit l5=P1^4;
sbit l6=P1^5;
sbit l7=P1^6;
sbit l8=P1^7;
void delayms(uint);
void huxi(char *pl){
int l,d=250,t=1;
while(1)
{
for(l=0;l<d;l++)
{
pl=0;
delayms(l);
pl=1;
delayms(d-l);
}
for(l=0;l<d;l++)
{
pl=0;
delayms(d-l);
pl=1;
delayms(l);
}
break;
}
}//huxi


void main()
{
char led;
while(1)
{
led=l1;
huxi(&led);
led=l2;
huxi(&led);
led=l3;
huxi(&led);
led=l4;
huxi(&led);

}
} //main

void delayms(uint x)
{
uint i;
for(i=x;i>0;i--);
}



上网查了一下,指针不能对io口操作?还有什么其他办法?
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
不闻窗外事 2019-11-06
  • 打赏
  • 举报
回复
sbit l1=P1^0;
sbit l2=P1^1;
sbit l3=P1^2;
sbit l4=P1^3;
sbit l5=P1^4;
sbit l6=P1^5;
sbit l7=P1^6;
sbit l8=P1^7;
你这些不都是在对io口进行使用的方法,你直接对l1,l2...进行赋值,就是对io进行操作啊,你这个程序不都在操作了
Yukikazee 2019-11-06
  • 打赏
  • 举报
回复
引用 4 楼 不闻窗外事 的回复:
你不要把P1当参数啊,直接在函数中操作P1就行,这个东西是固定的,没必要做参数啊,你直接不传参数就得了,你可以直接操作所有的接口啊,P1 = 0x01;P1=0x02;这种,或者你可以把0x01这种做个变量当参数
一语点醒!成了!感谢
不闻窗外事 2019-11-06
  • 打赏
  • 举报
回复
你不要把P1当参数啊,直接在函数中操作P1就行,这个东西是固定的,没必要做参数啊,你直接不传参数就得了,你可以直接操作所有的接口啊,P1 = 0x01;P1=0x02;这种,或者你可以把0x01这种做个变量当参数
Yukikazee 2019-11-06
  • 打赏
  • 举报
回复
引用 1 楼 不闻窗外事 的回复:
sbit l1=P1^0;
sbit l2=P1^1;
sbit l3=P1^2;
sbit l4=P1^3;
sbit l5=P1^4;
sbit l6=P1^5;
sbit l7=P1^6;
sbit l8=P1^7;
你这些不都是在对io口进行使用的方法,你直接对l1,l2...进行赋值,就是对io进行操作啊,你这个程序不都在操作了


看起来是在对io操作,编译后也没有问题,但是写到单片机里灯就是不亮,所以我觉得还是把P1和流水灯函数参数联系的过程出现了问题,我又查了一下,说是指针不能对io进行操作,所以我想问问大佬还有没有其他办法能把参数和P1联系起来
喜欢做我自己 2019-11-06
  • 打赏
  • 举报
回复
stati关键字了解一下,将那八条语句合起来变成一个函数,里面定义一个static变量,每进入这个函数一次,变量自增一次,到变量为8时,重新设置其为0, static n = 0; P1^n; n++; if(n == 8) n = 0;

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧