第21节:多任务并行处理两路跑马灯
步骤
}
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; //重装
多任务并行处理两路跑马 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)