51单片机用P0和P1口控制16路彩灯做流水灯,用C语言怎么写,我只会单用P0或P1,不知道P0和P1怎么衔接

如题所述

你可以使用
第一:全局变量,如果P1工作,P0 停止,.....
或者:定义P0口的同时,定义P1口,比方说原来是P0=255;delay();P0=128;delay();...
改成P0 =255;P1=255;delay();P0=128:P1=255;delay();....
我没有51的开发板,只是用软件仿真了,这个程序仅供参考
#include<reg52.h>
#include<intrins.h>
void main()
{
bit flag;

flag=0;
P1=255;
P0=255;
while(1)
{
for(;;)
{
//add your code
//for example
P1<<=1;
if(P1==0) { flag=1; break;}
}
if(flag==1)
for(;;)
{
P0<<=1;
if(P0==0){ flag=0;
P1=255;
P0=255;
_nop_();
break; }
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-11
很简单,程序如下:
#include<reg51.h>
#include <intrins.h> //--楼主的问题, 解决方法是在这里面。
#define uint unsigned int
void main()
{
uint x = 0x7fff; //16位数, 有一个低电平.
while(1) {
x = _iror_(x, 1); //16位数环行移位--这是关键.
P0 = x / 256; //输出高8位.
P1 = x % 256; //输出低8位.
delayms(1000); //适当延时, 函数请自行编写.
}
}
第2个回答  2011-01-10
判断P0是否到了最后一位,是的话,关闭P0,然后执行P1口的流水灯,同理判断P1是否到了最后一位,是的话,关闭P1,然后执行P0口的流水灯
相似回答