您的位置:首页 > 编程语言

编程控制8位LED循环点亮

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

 



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

    编程如下:

1、循环左移

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

#include<intrins.h>            //本征函数头文件,包含此头文件可以在程序中直接调用本征函数_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<reg51.h>    

#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口也可以执行同样的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: