这个也很容易做到啊,设置状态Mode如下:
0、按键没有按下,P1 P2的LED都熄灭。
1、P3.0按下时,P2的led跑马。
2、P3.1按下时,P1的led跑马闪烁,松开按键停止跑马,按下执行。
3、两按键同时按下,P1P2口的led都在跑马。
没有想象中那么难,现在定时器的中断服务函数里面写好跑马灯的状态
switch( Mode )
{
case 0:P1 = 0xff;P2 = 0xff;break;
case 1: P2 = ~(1< if(i==8) i=0;
P1 = 0xff;
break;
case 2: P1 = ~(1< if(i==8) i=0;
P2 = 0xff;
break;
case 3: P1 = ~(1< P2 = ~(1< if(i==8) i=0;
default:break;
}
同时,在while(1)里面扫描按键,延时消抖我就不写了,就是这么个意思
if( P3 & 0xff == 0xff) Mode = 0;
if( P3 & 0xff == 0xfe) Mode = 1;
if( P3 & 0xff == 0xfd) Mode = 2;
if( P3 & 0xff == 0xfc) Mode = 3;
完全意义上的同时执行多项功能是不可能的,因为程序是顺序执行的,每个功能占用一定的时间片:如果多项功能之间不争夺CPU资源,也就是说不占用累加器A及内存,可以基本上(不是绝对)实现同时执行多项相应功能;如果多项功能之间不争夺CPU资源,就实现不了了。
广义上的同时执行,也是cpu的时间片轮转执行的,