#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延時(shí)程序(僅限于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;//靜態(tài)計(jì)數(shù)變量
static bit sign_key=0; //靜態(tài)標(biāo)志位
unsigned char time_key,time_LED;//臨時(shí)變量
time_LED=P1&0xf0;//保存4個(gè)LED狀態(tài)
P1M0=0x00;//P1.4~7設(shè)置弱上拉
P1M1=0x00;//P1.4~7設(shè)置弱上拉
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狀態(tài)
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;//計(jì)數(shù)變量清0
sign_key=0;//鍵態(tài)標(biāo)志清0
}
P1&=0x0f; //P1.4~7清0
P1|=time_LED;//還原4個(gè)LED狀態(tài)
P1M0=0xf0; //還原P1.4~7推挽設(shè)置
P1M1=0x00; //還原P1.4~7推挽設(shè)置
}
/*********************************
按鍵服務(wù)程序
*********************************/
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設(shè)置推挽
P1M1=0x00;//P1.4~7設(shè)置推挽
while(1)
{
key_scan();
key_service();
Delay1ms();//控制主循環(huán)周期約1ms
}
}
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
IMG_20210831_153850.jpg (1.76 MB, 下載次數(shù): 134)
IMG_20210831_153905.jpg (1.55 MB, 下載次數(shù): 140)
CSDN_1630400410697.jpg (238.88 KB, 下載次數(shù): 131)
lkc8210 發(fā)表于 2021-8-31 16:29
例子用的是STC15
188610329 發(fā)表于 2021-8-31 17:56
你是幾個(gè)LED,幾個(gè)按鍵?一般一個(gè)IO復(fù)用LED和按鍵,不是很推薦,如果LED是周期點(diǎn)亮,比如數(shù)碼管的公共級(jí),通 ...
溫存723 發(fā)表于 2020-8-15 23:18
又漲姿勢(shì)了 很實(shí)用
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
捕獲.PNG (56.6 KB, 下載次數(shù): 130)
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
U (78.33 KB, 下載次數(shù): 157)
angmall 發(fā)表于 2021-9-14 22:03
你把你的代碼完整地貼上來看看
(不要截圖!不要截圖!不要截圖!)
angmall 發(fā)表于 2021-9-14 22:03
你把你的代碼完整地貼上來看看
(不要截圖!不要截圖!不要截圖!)
jizhongbiao 發(fā)表于 2021-9-17 09:06
可以用狀態(tài)機(jī)做,在較短的時(shí)間間隔里面切換狀態(tài),一個(gè)狀態(tài)用來檢測(cè)按鍵,一個(gè)狀態(tài)用來點(diǎn)亮led。
jianuli 發(fā)表于 2021-9-14 22:54
#include
#include
jianuli 發(fā)表于 2021-9-14 22:54
#include
#include
lkc8210 發(fā)表于 2021-9-17 17:39
用了地板的電路(就是10k+1k+1k那個(gè))
再加上你的代碼
只改了其中一句
188610329 發(fā)表于 2021-9-17 22:00
你電路設(shè)計(jì)不合理啊……
在按鍵設(shè)計(jì)中,一般都是避免和 強(qiáng)推挽共用的…… 按你的電路設(shè)計(jì),其實(shí)你可以 ...
188610329 發(fā)表于 2021-9-17 22:00
你電路設(shè)計(jì)不合理啊……
在按鍵設(shè)計(jì)中,一般都是避免和 強(qiáng)推挽共用的…… 按你的電路設(shè)計(jì),其實(shí)你可以 ...
jianuli 發(fā)表于 2021-9-17 23:45
比如有時(shí)僅剩一個(gè)IO口時(shí),要做指示跟按鍵用,也可以這樣用吧
jianuli 發(fā)表于 2021-9-17 21:11
大佬,昨天還是前天我也驗(yàn)證可以了,就是按鍵按下的那個(gè)判斷語句少了括號(hào),加上了就可以了,但是這個(gè)電路 ...
lkc8210 發(fā)表于 2021-9-20 14:22
有沒有微亮沒留意
試完就把電路拆了
回看我上傳的gif
jianuli 發(fā)表于 2021-9-14 22:54
#include
#include
wulin 發(fā)表于 2020-8-15 07:36
LED燈、按鍵共用4個(gè)單片機(jī)IO示例
jackyangjiali 發(fā)表于 2023-3-31 07:08
我要說一下此電路配合此程序是錯(cuò)誤的,事實(shí)上此電路,在弱上拉下無法將接有正向的導(dǎo)通的LED端口拉向高電 ...
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |