原创 智能车 数码管及跑马灯演示

2010-2-26 21:14 2854 6 6 分类: MCU/ 嵌入式

小车图片2010-2-139289905.jpg


一、 实验简介:
本程序主要是将数码管及跑马灯放在一起显示,它主要说明了,如何将在单系中运行多个看似并行运行的子系统.本程序在此将跑马灯子程序放入到一个头文件中,对于一个大的工程这样将有益于程序文件的管理。
二、 实验原理图:
   


点击看大图
 


三、 实现代码:
//===============================================================//
//  开发日期:2009/01/26                        //
//  修改日期:                                                    //
//  程序作者: guojun     益芯科技                            //
//  程序备注:此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。   //
//  特别声明:此程序可作研究之用,但引用、转载、使用请注明出处。      //
//===============================================================//
#include <AT89x51.h>                                  //包含端口定义头文件
unsigned char code LedShowData[]={0x9F,0x25,0x0D,0x99,0x49, //定义数码管显示字符
                               0x41,0x1F,0x01,0x19,0x03}; //1,2,3,4,5,6,7,8,9,0
#define Led P1                                            //定义显示端口
unsigned char CountData="0";                                 //定义数码管计数器
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--);                                 //通过循环进行延时
  P2=LedShowData[CountData];                        //置数码管显示数据到P2端口
  CountData++;                                       //数码管地址计数器++(加1)
  if(CountData>=10)                                   //判断计数器累计数值
  {
   CountData="0";                                       //计数器清零
  }
}
#include <跑马灯.h>                                 //包含显示方式头文件 
void main()                                           //主程序入口
{
 while(1)                                             //无穷循环开始.
 { LeftToRight();                                   //从左到右进行显示                      
   RightToLeft();                                      //从右到左进行显示
   BothToMid();                                      //由两边到中间进行显示
   MidToBoth();                                      //由中间到两边进行显示
 }
}
////////////////////////////////////////////////跑马灯.h/////////////////////////////////////////////////////
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;                                       //空返回,表明此次子程序的结束.
}
四、 运行效果:
本程序运行效果:本程序运行后,可以看到跑马灯按,从左到右,从右到左,从两边到中间,从中间到两边将依次运行。并且在运行过程中,可以看到数码管依次从1-9-0的顺序显示数字符号。

PARTNER CONTENT

文章评论0条评论)

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