专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机流水灯设计

作者:佚名   来源:本站原创   点击数:  更新时间:2007年06月12日   【字体:

下面介绍几个单片机器流水灯设计的程序

51单片机流水灯C语言源程序(源创) **************************************************************
  文件名称:flash_led.c
  文件说明:流水灯C程序
  编写人员:Jerry Yang
  编写日期:2006年10月5日
  程序说明:MCU采用AT89S51,外接12M晶振,P1口输出
  版权标注:豪杰电子工作室(http://hokepoly.bokee.com)
*************************************************************/
#include<reg51.h>   //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int  //定义无符号整数
void delay(uint);   //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
  {
 temp=0x01;
   for(i=0;i<8;i++)  //8个流水灯逐个闪动
    {
    P1=~temp;
    delay(100);   //调用延时函数
    temp<<=1;
    }
 temp=0x80;
 for(i=0;i<8;i++)  //8个流水灯反向逐个闪动
  {
  P1=~temp;
  delay(100);   //调用延时函数
  temp>>=1;
  }
    temp=0xFE;
 for(i=0;i<8;i++)  //8个流水灯依次全部点亮
  {
  P1=temp;
  delay(100);   //调用延时函数
  temp<<=1;
  }
  temp=0x7F;
  for(i=0;i<8;i++)  //8个流水灯依次反向全部点亮
   {
  P1=temp;
  delay(100);   //调用延时函数
  temp>>=1;
  }
 }

}
 void delay(uint t)   //定义延时函数
{
register uint bt;
for(;t;t--)
 for(bt=0;bt<255;bt++);
}


/************************************************************
*89C51、S51单片机32个IO口流水灯测试程序
*Flash0、1、2、3分别对应单片机的P0、1、2、3四个口
*a程序对应流水灯从全灭到一个一个亮
*b程序对应流水灯从全亮到一个一个灭
*Author:大灵通
*2006-7-26 10:57,OK!
*************************************************************/
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define TimeDelay 60000
void delay(uint n);
void Flash0a(void);
void Flash0b(void);
void Flash1a(void);
void Flash1b(void);
void Flash2a(void);
void Flash2b(void);
void Flash3a(void);
void Flash3b(void);
/************************************************************
*Function: 主函数
*parameter:
*Return:
*Modify:
*************************************************************/
void main(void)
{
    while(1)
 {
  Flash1b();
  Flash1a();
 
  delay(TimeDelay);
  delay(TimeDelay);
 
  Flash0b();
  Flash0a();
 
  Flash2b();
  Flash2a();
 
  Flash1b();
  Flash1a();
 
  Flash3b();
  Flash3a();
 }
}
/************************************************************
*Function: 延时
*parameter:
*Return:
*Modify:
*************************************************************/
void delay(uint n)
{
 while(n!=0)
 {
  n--;
 }
}
void Flash0a(void)
{
 uchar i;
 uchar Temp;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P0 = ~Temp;
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P0 = 0xff;
}
void Flash0b(void)
{
 uchar i;
 uchar Temp;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P0 = Temp; 
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P0 = 0;
}
void Flash1a(void)
{
 uchar i;
 uchar Temp;
 P1 = 1;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P1 = ~Temp;
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P1 = 0xff;
}
void Flash1b(void)
{
 uchar i;
 uchar Temp;
 P1 = 1;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P1 = Temp; 
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P1 = 0;
}
void Flash2a(void)
{
 uchar i;
 uchar Temp;
 P2 = 1;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P2 = ~Temp;
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P2 = 0xff;
}
void Flash2b(void)
{
 uchar i;
 uchar Temp;
 P2 = 1;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P2 = Temp; 
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P2 = 0;
}
void Flash3a(void)
{
 uchar i;
 uchar Temp;
 P3 = 1;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P3 = ~Temp;
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P3 = 0xff;
}
void Flash3b(void)
{
 uchar i;
 uchar Temp;
 P3 = 1;
 Temp = 0x80;
 for(i=0;i<8;i++)
 {
  P3 = Temp; 
  delay(TimeDelay);
  Temp = Temp >> 1;
 }
 P3 = 0;
}

===========

;P1口八个LED灯做三路流水灯实验
;***************************************************************
;* Date : 2004.4.20                                                                                               *
;* Support Mb:020-34007281     E-mail:c51cn@163.com                                    *
;* Create by :dengdewu
http://www.c51.cn 更多例程请登陆网站                       *
;* 网站单片机学习资料同步更新,敬请新老朋友随时关注                         *
;***************************************************************

     ORG    0000H
     LJMP   MAIN
     ORG    030H
MAIN:MOV    P1,#0DBH        ;11011011--0为亮,1为灭
     ACALL  DELAY
     MOV     P1,#06DH       ;01101101
     ACALL   DELAY
     MOV     P1,#0B6H       ;10110110
     ACALL   DELAY
     AJMP    MAIN 
DELAY:MOV    R7,#255        ;延时子程序
D1:  MOV     R6,#255
D2:  DJNZ    R6,D2
     DJNZ    R7,D1
     RET
     END

关闭窗口

相关文章