微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第21节:多任务并行处理两路跑马灯

第21节:多任务并行处理两路跑马灯

时间:11-22 来源:互联网 点击:

步骤

}

break;

case 10:

if(uiTimeCnt_01_08>=const_time_level_01_08) //时间到

{

uiTimeCnt_01_08=0; //时间计数器清零

ucLed_dr6=0; //第6个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=11; //切换到下一个步骤

}

break;

case 11:

if(uiTimeCnt_01_08>=const_time_level_01_08) //时间到

{

uiTimeCnt_01_08=0; //时间计数器清零

ucLed_dr5=0; //第5个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=12; //切换到下一个步骤

}

break;

case 12:

if(uiTimeCnt_01_08>=const_time_level_01_08) //时间到

{

uiTimeCnt_01_08=0; //时间计数器清零

ucLed_dr4=0; //第4个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=13; //切换到下一个步骤

}

break;

case 13:

if(uiTimeCnt_01_08>=const_time_level_01_08) //时间到

{

uiTimeCnt_01_08=0; //时间计数器清零

ucLed_dr3=0; //第3个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=14; //切换到下一个步骤

}

break;

case 14:

if(uiTimeCnt_01_08>=const_time_level_01_08) //时间到

{

uiTimeCnt_01_08=0; //时间计数器清零

ucLed_dr2=0; //第2个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=15; //切换到下一个步骤

}

break;

case 15:

if(uiTimeCnt_01_08>=const_time_level_01_08) //时间到

{

uiTimeCnt_01_08=0; //时间计数器清零

ucLed_dr1=0; //第1个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=0; //返回到最开始处,重新开始新的一次循环。

}

break;

}

}

void led_flicker_09_16() //第二路独立运行的任务 第9个至第16个LED的跑马灯程序,逐个亮并且每次只能亮一个.

{

switch(ucLedStep_09_16)

{

case 0:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr16=0; //第16个灭

ucLed_dr9=1; //第9个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=1; //切换到下一个步骤

}

break;

case 1:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr9=0; //第9个灭

ucLed_dr10=1; //第10个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=2; //切换到下一个步骤

}

break;

case 2:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr10=0; //第10个灭

ucLed_dr11=1; //第11个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=3; //切换到下一个步骤

}

break;

case 3:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr11=0; //第11个灭

ucLed_dr12=1; //第12个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=4; //切换到下一个步骤

}

break;

case 4:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr12=0; //第12个灭

ucLed_dr13=1; //第13个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=5; //切换到下一个步骤

}

break;

case 5:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr13=0; //第13个灭

ucLed_dr14=1; //第14个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=6; //切换到下一个步骤

}

break;

case 6:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr14=0; //第14个灭

ucLed_dr15=1; //第15个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=7; //切换到下一个步骤

}

break;

case 7:

if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到

{

uiTimeCnt_09_16=0; //时间计数器清零

ucLed_dr15=0; //第15个灭

ucLed_dr16=1; //第16个亮

ucLed_update=1; //更新显示

ucLedStep_09_16=0; //返回到开始处,重新开始新的一次循环

}

break;

}

}

void T0_time() interrupt 1

{

TF0=0; //清除中断标志

TR0=0; //关中断

if(uiTimeCnt_01_08<0xffff) //设定这个条件,防止uiTimeCnt超范围。

{

uiTimeCnt_01_08++; //累加定时中断的次数,

}

if(uiTimeCnt_09_16<0xffff) //设定这个条件,防止uiTimeCnt超范围。

{

uiTimeCnt_09_16++; //累加定时中断的次数,

}

TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f

TL0=0x2f;

TR0=1; //开中断

}

void delay_short(unsigned int uiDelayShort)

{

unsigned int i;

for(i=0;i

{

; //一个分号相当于执行一条空语句

}

}

void delay_long(unsigned int uiDelayLong)

{

unsigned int i;

unsigned int j;

for(i=0;i

{

for(j=0;j<500;j++) //内嵌循环的空指令数量

{

; //一个分号相当于执行一条空语句

}

}

}

void initial_myself() //第一区 初始化单片机

{

TMOD=0x01; //设置定时器0为工作方式1

TH0=0xf8; //重装

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top