一个流水灯的程序,帮忙看看,谢谢:

/*******************************************************************/
/*
8个发光管间隔200ms由上至下,
再由下至上,再重复一次,
然后全部熄灭再以300ms间隔
全部闪烁5次。重复此过程
*/
/*********************************************************/
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
for(j=0;j<2;j++)
{
a=0xfe; //赋初值
for(i=0;i<8;i++) //左移
{
P1=a; //点亮小灯
delay(200); //延时200毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(i=0;i<8;i++) //右移
{
P1=a; //点亮小灯
delay(200); //延时200毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
P1=0xff; //全部熄灭
for(j=0;j<10;j++)
{
delay(300); //延时
P1=~P1; //全部取反10次,既闪烁5次
}
}
}

其中这个里面的:P1=~P1; //全部取反10次,既闪烁5次是怎么计算的怎么来的,不懂,取反的细节性东西,取反我知道怎么回事就是如0111取反为1000。
{
delay(300); //延时
P1=~P1; //全部取反10次,既闪烁5次
}

额 挺清楚的啊,就是你写的那段程序,
一亮一灭算闪烁一次,在这个过程中,发生了从灭到亮,又从亮到灭两次变化,
所以就是闪烁五次,取反十次
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网