51单片机中怎样用一个按键控制三种模式的流水灯,如控制流水灯流水速率(每按一下加速,到三后返回和第一次

麻烦高手贴个程序参考一下

#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit anjian = P1^0; //按键位
void delay(uint16 h) //延时程序
{
while(h--);
}
main()
{ uint8 k = 0 , i = 0;
P0 = 0xff;
anjian = 1;
while(1)
{
P0 = ~(1<<k++);
if(anjian == 0)
{
delay(200);
if(anjina == 0) i++;
if(i == 3)
i = 0;
}
switch(i)
{
case 0: delay(10000);break;
case 1: delay(20000);break;
case 2: delay(20000); break;
}
if(k==8) k=0;
}

}
//头一次回答问题,多多支持,全部知识都是自学的,但是我试验过可以符合你的要求运行,谢谢追问

麻烦你了,不过你的程序不容易看懂啊,它不能一直执行下去,只会执行一次

追答

请问你的是什么按键,我的是矩阵的,所以我在我的板子上是用一个矩阵的按键式,我的可以连续,程序还要根据你的板子布置按键不同需要改的

追问

哦,P0 = ~(1<<k++); 这个是什么意思呢?

追答

这个就是先把1,就是0000 0001这个数左移k位,当k = 1 时移一位,等于2时移2位,移完之后就取反,我的板子是低电平亮的,所以要取反,当移一位是取反就是1111 1110,移2位时取反就是1111 1101,所以就可以一直往左移
谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-04
简单介绍一下思路:定义一个控制变量,存储按键按下的次数并确定定时初值。每次流水完了以后检测该变量的值并赋相应的初值给定时程序。追问

程序写过,但没有出来结果,所以想参考一下别人的程序,不过还是要谢谢你

相似回答