欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)怎樣實(shí)現(xiàn)按鍵按下數(shù)字連加? [打印本頁(yè)]

作者: 非凡科技    時(shí)間: 2021-6-27 21:34
標(biāo)題: 單片機(jī)怎樣實(shí)現(xiàn)按鍵按下數(shù)字連加?
弱弱的問(wèn)下  按鍵按下mun怎樣實(shí)現(xiàn)連續(xù)加也就是按下按鍵1.2.3.4.5這樣,我用的mum++按著不放手就只+1不能連續(xù)加 請(qǐng)老師們指導(dǎo)下
作者: gxbdf    時(shí)間: 2021-6-27 23:11
這個(gè)可以通過(guò)定時(shí)器來(lái)實(shí)現(xiàn),比如當(dāng)按鍵時(shí)間小于2秒時(shí),按一次加1,當(dāng)超過(guò)2秒時(shí),沒(méi)50毫秒加1實(shí)現(xiàn)連加功能。例程如下:
#include<reg51.h>
unsigned int a;
unsigned char times;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>40)
{
a++;
printf("%d",a);
}
作者: 非凡科技    時(shí)間: 2021-6-28 08:34
gxbdf 發(fā)表于 2021-6-27 23:11
這個(gè)可以通過(guò)定時(shí)器來(lái)實(shí)現(xiàn),比如當(dāng)按鍵時(shí)間小于2秒時(shí),按一次加1,當(dāng)超過(guò)2秒時(shí),沒(méi)50毫秒加1實(shí)現(xiàn)連加功能。 ...

如果不用定時(shí)器呢
作者: topsoft    時(shí)間: 2021-6-28 08:52
用循環(huán)也可以,每次循環(huán)檢測(cè)到按鍵仍然按下內(nèi)部變量k就加一(沒(méi)繼續(xù)按下就k=0,考慮防抖會(huì)復(fù)雜一點(diǎn));當(dāng)k=100(或者其他值),實(shí)現(xiàn)連加,同時(shí)k=0,,,大致這樣子

循環(huán)時(shí)注意需要給其他處理留出時(shí)間
作者: YQR123    時(shí)間: 2021-6-28 09:44
學(xué)習(xí)長(zhǎng)短按鍵的實(shí)現(xiàn)方法,就會(huì)這個(gè)了,長(zhǎng)按鍵網(wǎng)上很多例子
作者: AUG    時(shí)間: 2021-6-28 09:47
可以用定時(shí)器定時(shí)掃描,也可以再主循環(huán)中用狀態(tài)機(jī)也可以。
作者: AUG    時(shí)間: 2021-6-28 09:49
非凡科技 發(fā)表于 2021-6-28 08:34
如果不用定時(shí)器呢

用狀態(tài)機(jī),2個(gè)狀態(tài),狀態(tài)1是讀取,狀態(tài)2執(zhí)行操作,在狀態(tài)1讀取到按下后,跳轉(zhuǎn)到狀態(tài)2讀取按下,執(zhí)行加操作后,跳回狀態(tài)1,重復(fù)執(zhí)行就可以了。
作者: Y_G_G    時(shí)間: 2021-6-28 14:58
我也是在學(xué)C語(yǔ)言,這是我寫(xiě)的
如果你是用別的單片機(jī)型號(hào),有上拉電阻也是可以亮燈的,延時(shí)部分要改一下,因?yàn)槲疫@是24MHZ的
/*=========================================================================================
名稱(chēng):單片機(jī)按鍵加1程序
作者:老玉
日期:20210625
最后更新日期:20210627
電路編號(hào):YGG_20210413.0_ST
MCU:STC88A4KS32
使用片上24MHZ時(shí)鐘,
功能描述:這是學(xué)習(xí)C8051用的入門(mén)程序,單片機(jī)按鍵加1,單擊加一次,長(zhǎng)按一直加,并顯示
;=========================================================================================*/
#include <REG52.h>
#define OUT P0                         //輸出顯示
sbit KEY=P3^2;                         //按鍵
sbit com0=P2^0;                         //數(shù)碼管的COM引腳
sbit com1=P2^1;
sbit com2=P2^2;
sbit com3=P2^3;
sfr P0M0=0x94;                        //stc8A4K端口控制寄存器
sfr P0M1=0x93;                        
unsigned int NUM;
//=================================================
void delay(unsigned char i)                   //延時(shí)
{
        unsigned int k;
        for(i;i>0;i--)
                {
                 for(k=1000;k>0;k--);
                }
}
//=====================================================================================
unsigned char ledtab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
//=====================================================================================
void display()                        
{       
                         unsigned char bat;
                        if(NUM>1000)NUM=0x00;
                        bat=NUM%10;                                 //顯示個(gè)位
                        OUT=ledtab[bat];
                        com0=0;
                        delay(10);
                        com0=1;

                        bat=NUM%100/10;                        //先求余100,再除以10,等到十位數(shù)
                        OUT=ledtab[bat];
                        com1=0;
                        delay(10);
                        com1=1;

                        bat=NUM%1000/100;
                        OUT=ledtab[bat];
                        com2=0;
                        delay(10);
                        com2=1;

                        bat=NUM/1000;
                        OUT=ledtab[bat];
                        com3=0;
                        delay(10);
                        com3=1;
}
//==================================================================================
void main()                                          //主程序
{
        P0M0=0xff;
        P0M1=0x00;
        KEY=1;
        while(1)
        {         
         unsigned char t;
         if(!KEY)                
                {
                        for(t=0;t<10;t++)display();
                        NUM++;
                }
         display();               
        }
}
//============================================================






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1