编程控制8位LED循环点亮

发布者:创意狂想最新更新时间:2020-06-20 来源: eefocus关键字:编程控制  8位LED  循环点亮 手机看文章 扫描二维码
随时随地手机看文章

8个LED正极通过1千欧的限流电阻接到电源正极,负极接单片机控制端P0口。只要P0口管脚输出低电平,对应的LED就会被点亮。原理图如下:


单片机控制外部器件是通过I/O口的操作来实现的,因此对外围器件的操作,实际上是对I/O口的操作。


编程如下:


1、循环左移

#include              //51系列单片机头文件包含对单片机内部寄存器等的定义

#include            //本征函数头文件,包含此头文件可以在程序中直接调用本征函数_crol_(a,n)

#define uchar unsigned char     /*以下三句属宏定义语句,以#define LED P0为例,它表示在以后的程序中LED就表示P0,目的在于提高程序的可读性。*/

#define uint unsigned int

#define LED P0

void delay()      /*延时1秒子程序,单片机的C程序中通常会采用这种软件延时的方式,但这种延时并不准确*/

{

 uint a,b;

 for(a=0;a<=350;a++);

  for(b=0;b<=32000;b++);   /*在板子上实验了很多次,觉得这样延时LED的闪烁速度比较合适。*/

     

}

void main()      /*主程序,通常情况下,主程序要尽量简单,功能模块尽可能在子程序中实现。*/

{

 uchar temp;

 LED=0xff;      /*初始化P0口.*/

 temp=0xfe;     /*设置初始值。*/

 while(1)

 {

  LED=temp;     /*让第一个LED点亮。*/

  temp=_crol_(temp,1);    /*循环点亮。循环右移:_cror_*/

  delay();              /*调用1s延时子程序*/

 }

}


2、数组实现LED的循环闪烁

#include    

#define uchar unsigned char

#define uint unsigned int

void delay(uint i);         /*函数声明,让编译器知道有这个函数,防止调用的时候找不到。就像变量使用前要定义一样。也可以把下边的delay函数体提到main函数上边,就不需要函数声明了。*/

uchar led_data[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   /*数组包含led_data[0]到led_data[7]*/

void main()       1111 1110                              1101 1111

{

 uint i;

 while(1) 

 {

  for(i=0;i<8;i++)

  {

   P0=led_data[i];

   delay(60000);

   P0=0xff;

   delay(60000);

  }

 }

}


void delay(uint i)    /*delay函数的函数头,形式必须和函数声明的形式一致。*/

{

 while(i--);

}


以上方法只是以P0口为例,对P1口也可以执行同样的操作。

关键字:编程控制  8位LED  循环点亮 引用地址:编程控制8位LED循环点亮

上一篇:定时器0控制LED的闪烁时间;计数器1来控制数码管的显示
下一篇:单片机的P2口接8个开关,P0口接8个LED灯

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved