蓝桥单片机_06独立按键的拓展应用
程序员文章站
2022-03-13 17:18:17
...
1. 题目
2. 代码
#include "reg52.h"
unsigned char k=0;
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit L5=P0^4;
sbit L6=P0^5;
void SelectHC573(unsigned char n)
{
switch(n){
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void Delay(unsigned char t)
{
while(t--);
}
void Select_Button()
{
if(S7==0){ //如果按下S7
Delay(100);
if(S7==0){
if(k==0){ //k=0时表示没有按键按下
L1=0;
k=1;
}
else if(k==1){ //k=1表示已经按下S7,再按S7是关闭S7,即熄灭L1
L1=1;
k=0; //关闭S7后将k的状态空出来
}
while(S7==0);
}
}
if(S6==0){ //如果按下S6
Delay(100);
if(S6==0){
if(k==0){ //k=0表示没有按键按下
L2=0;
k=2;
}
else if(k==2){ //k=2表示已经按下S6,再按S6时关闭S6,即熄灭L2
L2=1;
k=0; //关闭S6后将k的状态空出来
}
while(S6==0);
}
}
if(S5==0){ //如果按下S5
Delay(100);
if(S5==0){ //S5等于0时,判断S7与S6的状态
if(k==1){
L3=0; //S7打开时L3亮
while(S5==0);
L3=1;
}
else if(k==2){
L5=0; //S6打开时L2亮
while(S5==0);
L5=1;
}
}
}
if(S4==0){ //如果按下S4
Delay(100);
if(S4==0){ //S4等于0时,判断S7与S6的状态
if(k==1){
L4=0; //S7打开时L4亮
while(S4==0);
L4=1;
}
else if(k==2){
L6=0; //S6打开时L6亮
while(S5==0);
L6=1;
}
}
}
}
void main()
{
SelectHC573(4);
while(1){
Select_Button();
}
}
3. 注
本博客是学习完B站某视频后所写,如有错误,欢迎指正;如有侵权,删除。
学习网址:https://www.bilibili.com/video/av41275873?p=4。
上一篇: STM32定时器中断显示时间
下一篇: 基于51单片机的时钟设计