標(biāo)題:
STC8單片機(jī)單擊,雙擊,長(zhǎng)按代碼,純邏輯語(yǔ)法
[打印本頁(yè)]
作者:
ycbw
時(shí)間:
2023-3-12 12:25
標(biāo)題:
STC8單片機(jī)單擊,雙擊,長(zhǎng)按代碼,純邏輯語(yǔ)法
單片機(jī)初學(xué)入門寫(xiě)的,沒(méi)用定時(shí)器計(jì)數(shù)器,純粹的邏輯代碼,高手請(qǐng)路過(guò)。
#include <STC8Gxx.H>
//--聲明全局函數(shù)--//
void Delay10ms(unsigned int c); //延時(shí)10ms
unsigned int i, y, z, key_on;
//--定義要使用的IO口--//
sbit out_1 = P5^4; //定義使用的IO口1
sbit out_2 = P5^5; //定義使用的IO口2
sbit out_3 = P3^3; //定義使用的IO口3
sbit k1 = P3^2; //定義按鍵使用的IO口
void Delay10ms(unsigned int c) //延時(shí)函數(shù)
{
unsigned char a, b
for (;c>0;c--)
{
for (b=162;b>0;b--)
{
for (a=235;a>0;a--);
}
}
}
void main()
{
P5M0 = 0x18;
P5M1 = 0x00;
P3M0 = 0x08;
P3M1 = 0x00; //設(shè)置需要端口模式
out_1 = 0;
out_2 = 0;
out_3 = 0; //端口上電狀態(tài)
i = 0; y = 0; z = 0; key_on = 0; //變量初始化
while(1)
{
if((!k1 || z) && i<15) //按鍵按下,并只會(huì)執(zhí)行1.5S
{
Delay10ms(2);
if(!k1) //按下
{
key_on = 1; //標(biāo)志位,允許計(jì)時(shí)開(kāi)始
z = 1; //狀態(tài)鎖定
}
if(z==1 && k1==1) //松開(kāi)
{
y ++; //y次數(shù)+1
z = 0; //狀態(tài)解鎖
}
}
if(key_on==1 && i<16) //限制總時(shí)長(zhǎng)1.6S
{
i ++; //循環(huán)i次數(shù)+1
Delay10ms(10);
}
/*
1次:按y=0,z=0 ;松y=1,z=0
2次:按y=1,z=1 ;松y=2,z=0
3次:按y=2,z=1 ;松y=3,z=0
4次:按y=3,z=1 ;松y=4,z=0
長(zhǎng)按:按松均為 y=0,z=1
*/
if(k1 && i>=15) //松開(kāi)后處理
{
if(y==0 && z==1) //長(zhǎng)按
{
out_1 = 0; out_2 = 0; out_3 = 0;
}
else if(z==0 && y>0)
{
if(y==1) //單擊
{
//out_3 = ~out_3;
}
else if(y==2) //雙擊
{
out_1 = ~out_1;
}
else if(y==3) //三擊
{
out_2 = ~out_2;
}
else //4擊及以上為長(zhǎng)按
{
out_1 = 0; out_2 = 0; out_3 = 0;
}
}
i = 0; y = 0; z = 0; key_on = 0;
}
}
}
復(fù)制代碼
作者:
wangwing
時(shí)間:
2023-3-14 12:51
時(shí)鐘是多少?
作者:
liucan2020
時(shí)間:
2023-3-14 14:23
這個(gè)方法可以借用一下,感覺(jué)有點(diǎn)意思。
作者:
liucan2020
時(shí)間:
2023-3-14 14:24
wangwing 發(fā)表于 2023-3-14 12:51
時(shí)鐘是多少?
這個(gè)是用延時(shí)來(lái)做的 ,沒(méi)用定時(shí)器 ,時(shí)間頻率可以按自己的來(lái)算
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1