標(biāo)題: 單片機(jī)按鍵計數(shù),這種代碼該如何編譯呢? [打印本頁]

作者: 璇毓    時間: 2018-11-1 09:46
標(biāo)題: 單片機(jī)按鍵計數(shù),這種代碼該如何編譯呢?
請問大家 就是一個按鍵控制 進(jìn)行計數(shù) 然后計算每分鐘按鍵多少次這種代碼該如何編譯呢?

作者: a3748622    時間: 2018-11-1 14:47
很簡單啊,一個定時器定時1分鐘進(jìn)入一次中斷
一個變量,按鍵被觸發(fā)一次就+1

定時器中斷中,統(tǒng)計按鍵次數(shù)
作者: xuyaqi    時間: 2018-11-1 15:56
給個參考程序:
#include <reg52.h>
#include <absacc.h>
#include <stdio.h>


sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;

#define  UP   20
#define  DOWN  30
#define  STOP  40

code char CharTab[128] ={0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                         0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                         0xfe,0xb0,0xed,0xf9,0xb3,0xdb,0xdf,0xf0,// 01234567
                         0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,// 89
                         0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                         0xff,0xff,0xff,0xff,0xff,0x01,0x80,0xff,//      -./
                         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,// 01234567
                         0x7f,0x6f,0x11,0x1c,0x36,0x09,0x16,0x17,// 89         =
                         0xff,0x77,0x1f,0x4e,0x3d,0x4f,0x47,0xff,//  AbCdEFG
                         0x37,0xff,0x38,0x07,0x0e,0xff,0xff,0x7e,// HI  L NO
                         0x67,0xff,0xff,0x5b,0x46,0x3e,0xff,0xff,// P RSTU
                         0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                         0xff,0x77,0x1f,0x0d,0x3d,0x6f,0x47,0x7b,//  AbcdEFg
                         0x17,0xff,0x38,0x4e,0x0e,0xff,0x15,0x1d,// hi  lmno
                         0xff,0xff,0x05,0x5b,0x0f,0x1c,0xff,0xff,//   rStu
                         0xff,0x3b,0xff,0xff,0xff,0xff,0xff,0xff};


unsigned char temp;
unsigned char COUNTER;
unsigned int key_no;//按鍵次數(shù)
unsigned int sju;//20m秒計數(shù)
                                                                                                 
idata char  DisBuf[16];

void Ext_int0_INTT() interrupt 0
{
       
        key_no++;                                //計數(shù)值加1
       
}                                                                                                 

void tm0_INTT() interrupt 1
{
       
        COUNTER++;                                //計數(shù)值加1
       
}


/********************************************************************
                              主函數(shù)
*********************************************************************/
main()
{
        //long K;
        char bb;
       
       
        temp=0;
        COUNTER=0;
        TMOD=0x02;                        //定時器0在模式1下工作
        TL0=0xbf;                        //定時器每200us產(chǎn)生一次溢出
        TH0=0xbf;                        //自動重裝的值
       
        //顯示值
        /*K=87654321;
        for(bb=2;bb<8;){DisBuf[bb]=0x20;bb++;}//清緩存
        sprintf(DisBuf,"%lu",K);*/
       
        IT0=1;
        EX0=1;//
        ET0=1;                                //使能定時器0中斷
        EA=1;                                //使能總中斷
        TR0=1;                                //開始計時
       
        while(1)
        {

                if(COUNTER==100)//定時到 100-20ms,
                {
                  COUNTER=0;
                        sju++;if(sju>3000){EX0=0;}//sju=0;
                        if(sju==0){key_no=0;}

                        for(bb=0;bb<8;){DisBuf[bb]=0x20;bb++;}//清緩存
      sprintf(DisBuf,"%lu",(long)key_no);


      temp++;if(temp>=0x08){temp=0;}
            P0=temp;//位選
                       
                        P2=CharTab[DisBuf[temp]];//列值
                }

  }

}


作者: cuihaodianzi    時間: 2018-11-1 16:01
就是 頻率計,把 1s 改成 1min 就可以了




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