#include <reg52.h>
sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
sbit LED1 = P1^4; //LED端口声明
sbit LED2 = P1^5;
sbit LED3 = P1^6;
sbit LED4 = P1^7;
unsigned char KeySec=0;//键值变量
/**********************************
1ms延时程序(仅限于STC15W 1T MCU)
**********************************/
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
/**********************************
按键扫描程序
**********************************/
void key_scan()
{
static unsigned char count=0;//静态计数变量
static bit sign_key=0; //静态标志位
unsigned char time_key,time_LED;//临时变量
time_LED=P1&0xf0;//保存4个LED状态
P1M0=0x00;//P1.4~7设置弱上拉
P1M1=0x00;//P1.4~7设置弱上拉
P1|=0xf0; //P1.4~7置高电平
if(P1&0xf0!=0xf0)//有键按下
{
if(++count>=10 && sign_key==0)//消抖
{
sign_key=1;//自锁
time_key=P1&0xf0;//保存P1.4~7状态
switch(time_key)
{
case 0xe0: KeySec=1; break;//输出键值
case 0xd0: KeySec=2; break;
case 0xb0: KeySec=3; break;
case 0x70: KeySec=4; break;
}
}
}
else //抬起
{
count=0;//计数变量清0
sign_key=0;//键态标志清0
}
P1&=0x0f; //P1.4~7清0
P1|=time_LED;//还原4个LED状态
P1M0=0xf0; //还原P1.4~7推挽设置
P1M1=0x00; //还原P1.4~7推挽设置
}
/*********************************
按键服务程序
*********************************/
void key_service()
{
switch(KeySec)
{
case 1: LED1=~LED1;KeySec=0;break;
case 2: LED2=~LED2;KeySec=0;break;
case 3: LED3=~LED3;KeySec=0;break;
case 4: LED4=~LED4;KeySec=0;break;
}
}
/********************************
主程序
********************************/
void main()
{
P1M0=0xf0;//P1.4~7设置推挽
P1M1=0x00;//P1.4~7设置推挽
while(1)
{
key_scan();
key_service();
Delay1ms();//控制主循环周期约1ms
}
}
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
IMG_20210831_153850.jpg (1.76 MB, 下载次数: 134)
IMG_20210831_153905.jpg (1.55 MB, 下载次数: 140)
CSDN_1630400410697.jpg (238.88 KB, 下载次数: 131)
lkc8210 发表于 2021-8-31 16:29
例子用的是STC15
188610329 发表于 2021-8-31 17:56
你是几个LED,几个按键?一般一个IO复用LED和按键,不是很推荐,如果LED是周期点亮,比如数码管的公共级,通 ...
温存723 发表于 2020-8-15 23:18
又涨姿势了 很实用
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
捕获.PNG (56.6 KB, 下载次数: 130)
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
U (78.33 KB, 下载次数: 157)
angmall 发表于 2021-9-14 22:03
你把你的代码完整地贴上来看看
(不要截图!不要截图!不要截图!)
angmall 发表于 2021-9-14 22:03
你把你的代码完整地贴上来看看
(不要截图!不要截图!不要截图!)
jizhongbiao 发表于 2021-9-17 09:06
可以用状态机做,在较短的时间间隔里面切换状态,一个状态用来检测按键,一个状态用来点亮led。
jianuli 发表于 2021-9-14 22:54
#include
#include
jianuli 发表于 2021-9-14 22:54
#include
#include
lkc8210 发表于 2021-9-17 17:39
用了地板的电路(就是10k+1k+1k那个)
再加上你的代码
只改了其中一句
188610329 发表于 2021-9-17 22:00
你电路设计不合理啊……
在按键设计中,一般都是避免和 强推挽共用的…… 按你的电路设计,其实你可以 ...
188610329 发表于 2021-9-17 22:00
你电路设计不合理啊……
在按键设计中,一般都是避免和 强推挽共用的…… 按你的电路设计,其实你可以 ...
jianuli 发表于 2021-9-17 23:45
比如有时仅剩一个IO口时,要做指示跟按键用,也可以这样用吧
jianuli 发表于 2021-9-17 21:11
大佬,昨天还是前天我也验证可以了,就是按键按下的那个判断语句少了括号,加上了就可以了,但是这个电路 ...
lkc8210 发表于 2021-9-20 14:22
有没有微亮没留意
试完就把电路拆了
回看我上传的gif
jianuli 发表于 2021-9-14 22:54
#include
#include
wulin 发表于 2020-8-15 07:36
LED灯、按键共用4个单片机IO示例
jackyangjiali 发表于 2023-3-31 07:08
我要说一下此电路配合此程序是错误的,事实上此电路,在弱上拉下无法将接有正向的导通的LED端口拉向高电 ...
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |