原创 智能车 流水灯演示

2010-2-26 21:12 2096 7 7 分类: MCU/ 嵌入式

小车图片2010-2-139289905.jpg


一、 实验简介:
本程序全面的表现了子程序的用法,它从对几个子程序的操作,显示不同的流灯技术,流水灯的不同需要不同的表现的形式,而这里主要介绍了移位操作和内部数据存储及读入操作。延时函数采用可重入标志,可进行函数的递归调用。
二、 实验原理图:


点击看大图


三、 实现代码:
//===================================================================== //
//  开发日期: 2009/01/20                                  //
//  修改日期:                                                             //
//  程序作者: guojun     //
//  程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.      //
//  特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处.            //
//===================================================================== //
#include <AT89x51.h>                             //包含头文件
#define Led P1                                   //定义显示端口号
unsigned int code BToM[]={0x7E,0x3C,0x18,0x00};  //定义由两边到中间显示数据
unsigned int code MToB[]={0xE7,0xC3,0x81,0x00};  //定义由中间到两边显示数据
void Delay() reentrant                        //定义可重入的延时函数
{ unsigned int DelayTime="10000";               //定义延时时间基数
  while(DelayTime--);                         //程序开始延时开始
}
void LeftToRight()                               //定义从左边到右边显示函数
{unsigned char TempCount="0";                      //定义显示次数变量
 Led=0xFE;                                      //定义初步显示数据
 for(TempCount=0;TempCount<8;TempCount++)       //通过循环进行数据显示
 {
  Delay();                                       //延时,用在每次移动数据开始处 
  Led="Led"<<1;                                  //由右边向左边移动数据
 }
 return;                                         //空返回语句,表明此子程序的结束.
}
void RightToLeft()                               //定义从右边到左边显示函数
{ unsigned char TempCount="0";                     //定义显示次数变量
  Led="0x7F";                                     //定义初步显示数据
  for(TempCount=0;TempCount<8;TempCount++)     //通过循环进行数据显示
  {
   Delay();                                      //延时,用在每次移动数据开始处
   Led="Led">>1;                                //由左边向右移动数据
  }
  return;                                        //空返语句,表明此子程序的结束.
}
void BothToMid()                                 //定义由两边到中间显示子程序
{ unsigned char TempCount="0";                     //定义临时次数变量
  Led="0xFF";
  for(TempCount=0;TempCount<5;TempCount++)      //通过循环依次进行次数运行
  {
   Delay();                                      //延时,在每次运行前.
   Led="BToM"[TempCount];                        //读入当次显示数据.
  }
 return;                                         //空返回,表明此子程序的结束.
}
void MidToBoth()                                 //定义由中间到两边子程序
{unsigned char TempCount="0";                      //定义临时次数变量
 Led=0xFF;
 for(TempCount=0;TempCount<5;TempCount++)       //通过循环进行数据显示
 {         
  Delay();                                       //延时,在每次数据显示前.
  Led="MToB"[TempCount];                         //读入当次显示数据.
 }
 return;                                         //空返回,表明此次子程序的结束.
}
void main()                                      //主程序入口处.
{
 while(1)                                        //无穷循环开始.
 { LeftToRight();                                //从左到右进行显示                      
   RightToLeft();                                //从右到左进行显示
   BothToMid();                                  //由两边到中间进行显示
   MidToBoth();                                  //由中间到两边进行显示
 }
}
四、 运行效果:
程序运行效果为:开机后,指示灯向从左向右依次点亮,从右向左依次点亮,由两边向中间依次点亮,由中间向两边依次点亮。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条