一、 实验简介:
本程序主要是将数码管及跑马灯放在一起显示,它主要说明了,如何将在单系中运行多个看似并行运行的子系统.本程序在此将跑马灯子程序放入到一个头文件中,对于一个大的工程这样将有益于程序文件的管理。
二、 实验原理图:
三、 实现代码:
//===============================================================//
// 开发日期: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的顺序显示数字符号。
文章评论(0条评论)
登录后参与讨论