標(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