else if(CountData<90) {
Delay(10000); }
else if(CountData<120) {
CountData=0; }
CountData=CountData+1; LED=~LED; } }
//判断闪动次数是否位于60-90之间
//用10000作为基数开始延时函数
//判断闪动次数是否位于90-120之间
//仅进行一次操作即可退出.
//闪动次数基数++
//将显示端口进行取反操作
四、 运行效果:
程序运行效果为:开机后程序以慢速闪动,一段时间后速度开始加快,再等待时间,闪灯的速度达到最快,之后一段时间后,闪动将回到开始状态。
实验二 流水灯演示
一、 实验简介:
本程序全面的表现了子程序的用法,它从对几个子程序的操作,显示不同的流灯技术,流水灯的不同需要不同的表现的形式,而这里主要介绍了移位操作和内部数据存储及读入操作。延时函数采用可重入标志,可进行函数的递归调用。
二、 实验原理图:
三、 实现代码:
//===================================================================== // // 开发日期: 2009/01/20
//
// 修改日期:
//
// 程序作者: guojun 邮箱:GuoGuoExkj@126.com
//
// 开发商:益芯科技某公司——技术部
//
// 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.
//
// 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处.
//
//===================================================================== //
#include
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();
//由俩边到中间进行显示