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

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

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

tatus16_09=tatus16_09|0x04;

}

else

{

ucLedStatus16_09=ucLedStatus16_09&0xfb;

}

if(ucLed_dr12==1)

{

ucLedStatus16_09=ucLedStatus16_09|0x08;

}

else

{

ucLedStatus16_09=ucLedStatus16_09&0xf7;

}

if(ucLed_dr13==1)

{

ucLedStatus16_09=ucLedStatus16_09|0x10;

}

else

{

ucLedStatus16_09=ucLedStatus16_09&0xef;

}

if(ucLed_dr14==1)

{

ucLedStatus16_09=ucLedStatus16_09|0x20;

}

else

{

ucLedStatus16_09=ucLedStatus16_09&0xdf;

}

if(ucLed_dr15==1)

{

ucLedStatus16_09=ucLedStatus16_09|0x40;

}

else

{

ucLedStatus16_09=ucLedStatus16_09&0xbf;

}

if(ucLed_dr16==1)

{

ucLedStatus16_09=ucLedStatus16_09|0x80;

}

else

{

ucLedStatus16_09=ucLedStatus16_09&0x7f;

}

hc595_drive(ucLedStatus16_09,ucLedStatus08_01); //74HC595底层驱动函数

}

}

void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01)

{

unsigned char i;

unsigned char ucTempData;

hc595_sh_dr=0;

hc595_st_dr=0;

ucTempData=ucLedStatusTemp16_09; //先送高8位

for(i=0;i<8;i++)

{

if(ucTempData>=0x80)hc595_ds_dr=1;

else hc595_ds_dr=0;

hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器

delay_short(15);

hc595_sh_dr=1;

delay_short(15);

ucTempData=ucTempData<1;

}

ucTempData=ucLedStatusTemp08_01; //再先送低8位

for(i=0;i<8;i++)

{

if(ucTempData>=0x80)hc595_ds_dr=1;

else hc595_ds_dr=0;

hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器

delay_short(15);

hc595_sh_dr=1;

delay_short(15);

ucTempData=ucTempData<1;

}

hc595_st_dr=0; //ST引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来

delay_short(15);

hc595_st_dr=1;

delay_short(15);

hc595_sh_dr=0; //拉低,抗干扰就增强

hc595_st_dr=0;

hc595_ds_dr=0;

}

/* 注释一:

* 以下程序,看似简单而且重复,其实蕴含着鸿哥的大智慧。

* 它是基于鸿哥的switch状态机思想,领略到了它的简单和精髓,

* 以后任何所谓复杂的工程项目,都不再复杂。

*/

void led_flicker_01_08() //第一路独立运行的任务 第1个至第8个LED的跑马灯程序,逐个亮,逐个灭.

{

switch(ucLedStep_01_08)

{

case 0:

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

{

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

ucLed_dr1=1; //第1个亮

ucLed_update=1; //更新显示

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

}

break;

case 1:

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

{

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

ucLed_dr2=1; //第2个亮

ucLed_update=1; //更新显示

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

}

break;

case 2:

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

{

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

ucLed_dr3=1; //第3个亮

ucLed_update=1; //更新显示

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

}

break;

case 3:

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

{

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

ucLed_dr4=1; //第4个亮

ucLed_update=1; //更新显示

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

}

break;

case 4:

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

{

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

ucLed_dr5=1; //第5个亮

ucLed_update=1; //更新显示

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

}

break;

case 5:

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

{

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

ucLed_dr6=1; //第6个亮

ucLed_update=1; //更新显示

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

}

break;

case 6:

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

{

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

ucLed_dr7=1; //第7个亮

ucLed_update=1; //更新显示

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

}

break;

case 7:

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

{

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

ucLed_dr8=1; //第8个亮

ucLed_update=1; //更新显示

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

}

break;

case 8:

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

{

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

ucLed_dr8=0; //第8个灭

ucLed_update=1; //更新显示

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

}

break;

case 9:

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

{

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

ucLed_dr7=0; //第7个灭

ucLed_update=1; //更新显示

ucLedStep_01_08=10; //切换到下一个

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

网站地图

Top