今天又小伙伴又来考我了。问我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的小伙伴可以去试试了。
文章知识点与官方知识档案匹配,可进一步学习相关知识小程序技能树首页概览3663 人正在系统学习中 相关资源:专业LED灯光动画制作软件(安装后直接用!)_setup安装包-Delphi工具…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!