点亮led灯的个数_16个LED灯循环点亮的小程序(代码)

今天又小伙伴又来考我了。问我16个LED灯循环点亮怎么变成。我也动了下手,将手里的8个LED灯循环点亮的小程序进行了修改,就完成了16个LED灯循环点亮的小实验。那么下面给大家分享下吧!

其实16个LED灯循环点亮更8个LED灯循环点亮一个道理!我这里用到了移位函数,移位函数都在intrins.h文件里面。这里注意移位函数的选择,8位数据和16位数据要用到不同的移位函数。这里是最关键的,其他的地方也就大同小异了。

下面就看看代码吧!

代码:

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

#include//因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;  //对数据类型进行声明定义

typedef unsigned char u8;

#define led1 P0   //将P0口定义为led0 后面就可以使用led代替P0口

#define led2 P2   //将P2口定义为led2 后面就可以使用led代替P2口

/*******************************************************************************

* 函 数 名         : delay

* 函数功能   : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}

/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出    : 无

*******************************************************************************/

void main()

{

u16 i,led;

led=0xfffe;

led1=0xff;

led2=0xff;

while(1)

{

for(i=0;i<15;i++)//将led右移一位

{

led1=led;

led2=_irol_(led,8);

led=_irol_(led,1);

delay(50000); //大约延时450ms

}

//试试将下面的注释去掉会怎样呢?去看看结果吧!

/***********************************************

for(i=0;i<15;i++)//将led右移一位

{

led1=led;

led2=_iror_(led,8);

led=_iror_(led,1);

delay(50000); //大约延时450ms

}

*************************************************/

}

}

代码是不是很简单呢。分享的文件里还有8个LED灯循环点亮的程序,方便大家作对比。还有Proteus的仿真工程,可以直接用软件仿真就可以查看具体效果了。安装了Proteus的小伙伴可以去试试了。

你可能感兴趣的:(点亮led灯的个数)