1.有数码管,两个按键,8个led灯
2.按一下S1第一个灯亮,依次往下,按下第9次的时候全亮,按下第10次的时候全灭;
3.同时每按下一次S1的时候,数码管显示次数;
4.按下S2的时候清零。
单片机两个按钮控制八盏灯
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
Minuw 2023-06-15 15:49关注不难
可参考#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” } } }解决 无用评论 打赏 举报 编辑记录