找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1668|回复: 3
打印 上一主题 下一主题
收起左侧

单片机按键计数,这种代码该如何编译呢?

[复制链接]
跳转到指定楼层
楼主
ID:412348 发表于 2018-11-1 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问大家 就是一个按键控制 进行计数 然后计算每分钟按键多少次这种代码该如何编译呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:419116 发表于 2018-11-1 14:47 | 只看该作者
很简单啊,一个定时器定时1分钟进入一次中断
一个变量,按键被触发一次就+1

定时器中断中,统计按键次数
回复

使用道具 举报

板凳
ID:94031 发表于 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;//按键次数
unsigned int sju;//20m秒计数
                                                                                                 
idata char  DisBuf[16];

void Ext_int0_INTT() interrupt 0
{
       
        key_no++;                                //计数值加1
       
}                                                                                                 

void tm0_INTT() interrupt 1
{
       
        COUNTER++;                                //计数值加1
       
}


/********************************************************************
                              主函数
*********************************************************************/
main()
{
        //long K;
        char bb;
       
       
        temp=0;
        COUNTER=0;
        TMOD=0x02;                        //定时器0在模式1下工作
        TL0=0xbf;                        //定时器每200us产生一次溢出
        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]];//列值
                }

  }

}

回复

使用道具 举报

地板
ID:149144 发表于 2018-11-1 16:01 | 只看该作者
就是 频率计,把 1s 改成 1min 就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表