1.有数码管,两个按键,8个led灯
2.按一下S1第一个灯亮,依次往下,按下第9次的时候全亮,按下第10次的时候全灭;
3.同时每按下一次S1的时候,数码管显示次数;
4.按下S2的时候清零。
不难
可参考
#include <reg52.h>
//数据段定义
unsigned char code Number[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
//定义每个按键的状态
#define K1 P1_0
#define K2 P1_1
#define K3 P1_2
//延时函数
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
//循环检测按键
char KeyScan(void)
{
if(K1 == 0) //K1按下
{
delay(5); //按键消抖
if(K1 == 0) //再次确认按键按下
{
while(K1 == 0); //等待按键松开
return 1;
}
}
if(K2 == 0) //K2按下
{
delay(5); //按键消抖
if(K2 == 0) //再次确认按键按下
{
while(K2 == 0); //等待按键松开
return 2;
}
}
if(K3 == 0) //K3按下
{
delay(5); //按键消抖
if(K3 == 0) //再次确认按键按下
{
while(K3 == 0); //等待按键松开
return 3;
}
}
return 0; //无按键按下
}
void main()
{
unsigned char a,counter = 0;
unsigned long i = 0;
while(1)
{
a = KeyScan(); //检测按键
if(a == 1) //按下K1
{
counter++; //计数器加1
if(counter == 3) //连续按下K1两次,K2一次,K3一次
{
P0 = Number[1]; //在数码管上显示“1”
delay(200); //延时一段时间
counter = 0; //计数器清零
}
}
else if(a == 2 || a == 3) //按下K2或K3
{
counter = 0; //计数器清零
}
else //无按键按下
{
P0 = Number[0]; //在数码管上显示“0”
}
}
}