STC89C52RC单片机控制流水灯

       本项目是采用STC89C52RC单片机控制P1口连接的8个LED灯顺序点亮的流水灯控制系统设计与制作。源文连接:基于STC89C52RC的流水灯设计

       流水灯控制系统设计电路:

图片

       设计要求:首先点亮连接P1.7引脚的LED灯,延时一段时间后熄灭,再点亮连接到P1.6引脚连接的LED灯,延时一段时间后熄灭,如此一次按照这个顺序点亮每个LED灯,直到点亮最后一个连接到P1.0引脚的发光LED等,再从P1.7引脚的LED灯开始点亮,循环不止,产生一种动态显示的流水控制效果。

      流水灯控制系统的源程序如下:

//程序功能:采用库函数实现的流水灯控制程序
#include<reg51.h>//包含头文件reg51.h,定义了51单片机的专用寄存器   
#include <intrins.h>             //包含内部函数库,提供移位和延时操作函数
//函数名:delay
//函数功能:实现软件延时
//形式参数:无符号整型变量i,控制空循环的循环次数
//返回值:无
void delay(unsigned int i)      //定义延时函数
{      unsigned int k;
         for (k=0;k<i;k++)  ;
  }
void main()                        //主函数
{                                          //主程序开始
       P1 = 0x7F;                  //P1端口输出0x7F
        while(1)                      //无限循环
       {                                  //循环体语句组开始
             P1 = _cror_(P1,1); //调用内部函数_cror_(),将P1的二进制数值循环右移
             delay(5000);           //延时
          }                                      //循环体语句组结束
}                                              //结束控制程序

      程序通过向P1口写入一个8位二进制数来改变每个引脚的输出状态,从而控制8个发光二极管的亮灭。其中,P1=0x7F,将P1口的8位设置为01111111输出,点亮P1.7引脚连接的发光二极管。可以通过内部函数_cror_()实现循环右移功能,使P1端口在01111111、10111111…11111110之间变化,并且通过while循环语句重复执行,实现状态循环右移和延时,从而实现流水灯效果。

猜你喜欢

转载自blog.csdn.net/chanchairen/article/details/121554437