一、目标
P0端口作为输出口,外接LED。编写程序,当按键K未按下时,LED进行循环左移显示。
如果第一次按下按键K后,LED进行循环右移显示。
如果第二次按下按键K后,LED进行拉幕式闭幕式花样显示。
如果第三次按下按键K后,又恢复左移显示。
二、Proteus
三、代码实现
1、分析一下我们要完成的目标。
默认左流水,第一次按右流水,第二次按拉闭幕式,再按恢复默认。也就是说可以用一个counter记录按下次数,初始化counter=0,然后每次按下K就令counter++,然后进行counter=counter%3取余数。则:
余数为0时应该对应默认的左流水;
余数为1时对应右流水;
余数为2时对应拉闭幕式。
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char//宏定义
#define uint unsigned int //宏定义
sbit K=P3^2;
uint counter=0;//用于记录按下按键的次数
2、然后逐个实现不同规律的流水灯
在实现流水灯的同时,通过counter来判断在亮灯过程中按键是否再次被按下,如果有被按下则返回(直接跳出当前执行的流水函数),重新判断要被执行的流水灯顺序。
void right_display()//右流水
{
uint p0=0xfe;
uint i=0;
for(i=0;i<8;i++)
{
if(counter!=1){
return;}
P0=p0;
Delay(