找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4472|回復(fù): 8
收起左側(cè)

單片機(jī)按鍵控制數(shù)碼管的程序怎么改延時(shí)去抖動(dòng)呢?大佬們幫幫忙。

[復(fù)制鏈接]
ID:279740 發(fā)表于 2018-3-1 21:19 | 顯示全部樓層 |閱讀模式
求延時(shí)去按鍵抖動(dòng)的程序,我現(xiàn)在按鍵一下有時(shí)跳了兩下。。。。。

程序

程序

仿真圖

仿真圖
回復(fù)

使用道具 舉報(bào)

ID:279740 發(fā)表于 2018-3-6 16:48 來(lái)自觸屏版 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2018-3-2 07:25
給個(gè)例子你看看
                if(K1==0)                //檢測(cè)按鍵K1是否按下
                {

感謝你的回答
回復(fù)

使用道具 舉報(bào)

ID:288124 發(fā)表于 2018-3-6 11:47 | 顯示全部樓層
檢測(cè)到按鍵松開(kāi)后再+1
回復(fù)

使用道具 舉報(bào)

ID:279740 發(fā)表于 2018-3-4 21:05 | 顯示全部樓層
wulin 發(fā)表于 2018-3-2 20:25
不知道為什么程序帖上來(lái)會(huì)丟符號(hào)?

嗯,知道了。還是要感謝你
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-3-2 20:25 | 顯示全部樓層

不知道為什么程序帖上來(lái)會(huì)丟符號(hào)? 無(wú)標(biāo)題.jpg

回復(fù)

使用道具 舉報(bào)

ID:279740 發(fā)表于 2018-3-2 16:56 | 顯示全部樓層
wulin 發(fā)表于 2018-3-2 13:25
仿真軟件里的元件都是按理想狀態(tài)使用的,有沒(méi)有防抖語(yǔ)句無(wú)所謂,你按一次出現(xiàn)多次計(jì)數(shù)是你的程序缺陷。單片 ...

謝謝你的幫助
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-3-2 13:25 | 顯示全部樓層
本帖最后由 wulin 于 2018-3-2 13:33 編輯

仿真軟件里的元件都是按理想狀態(tài)使用的,有沒(méi)有防抖語(yǔ)句無(wú)所謂,你按一次出現(xiàn)多次計(jì)數(shù)是你的程序缺陷。單片機(jī)的電源、地、復(fù)位及外部晶振都是默認(rèn)存在,不需要畫(huà)出來(lái),你的圖畫(huà)錯(cuò)了,地線標(biāo)志要放在兩個(gè)振蕩電容之間。想要改變晶振頻率只要在單片機(jī)屬性里修改即可,不信你試試這個(gè)程序。把注釋掉的防抖語(yǔ)句添加回去效果還是一樣的,但在實(shí)際電路中必須要防抖。#include <AT89X52.H>
#define uint unsigned int                 //宏定義變量uint為無(wú)符號(hào)整型數(shù)據(jù)
#define uchar unsigned char         //宏定義變量uchar為無(wú)符號(hào)字符型數(shù)據(jù)

sbit key=P3^0;                                        //按鍵端口定義        
uchar code table[]={        //共陽(yáng)數(shù)碼管段碼0~F
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

uchar i;                                        //按鍵計(jì)數(shù)變量
bit key_sign=0;                //按鍵有效標(biāo)志
//uchar count=0;                        //消抖計(jì)數(shù)變量               

void main()        
{        

        while(1)        
        {
                if(key==0)                                        //檢測(cè)按鍵如果為0
                {
//                        count++;                                //消抖計(jì)數(shù)
//                        if(count>=250)
//                        {
                                if(key_sign==0)
                                {                        
                                        key_sign=1;                //按鍵有效標(biāo)志置1,防止重復(fù)計(jì)數(shù)
                                        i++;
                                        if(i>=16)
                                                i=0;
                                }
//                        }
                }
                else                                                //按鍵抬起
                {
                        key_sign=0;                                //按鍵有效標(biāo)志清0
//                        count=0;                                //消抖計(jì)數(shù)清0
                }        
                P2=table;
        }
}


無(wú)標(biāo)題.jpg


回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-3-2 07:25 | 顯示全部樓層
給個(gè)例子你看看
                if(K1==0)                //檢測(cè)按鍵K1是否按下
                {
                        Delay10ms();        //消除抖動(dòng)
                        if(K1==0)
                        {
                                j=_cror_(j,1);
                                while((i<50)&&(K1==0))         //檢測(cè)按鍵是否松開(kāi)
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                        }
                }               
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表