键盘分编码键盘和非编码键盘。键盘上闭合建的识别有专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘,而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的,非编码键盘分为:独立键盘和矩阵式键盘。

我所用的独立键盘的硬件连接如下图所示

当S1被按下时,S1两端就会导通,由于P35与GND相连,所以就会变成低电平,则会检测到按键被按下。

计数器的显示我用的是板子上的四个共阳极数码管,原理图如下,当位选端P20给一个低电平时,Q3这个PNP三极管即导通,那么数码管K1则亮。P0则是控制数码管的段选,RL1即为限流电阻。

接下来就是说当我按下键S1时,数字加1,按下S2时,数码管减一,数码管显示的范围是从0~9999,具体操作如下。

#include<reg52.h>
#define uint unsigned int        //宏定义
#define uchar unsigned char
sbit S1 = P3^5;        //位定义
sbit S2 = P3^4;
sbit S3 = P3^3;
sbit S4 = P3^2;

void delay(uchar i);        //声明延时函数
    
uint key_counter = 0;        //定义一个整型变量来显示

unsigned char leddata[]={         //定义一个数组来存放数码管显示
 
                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"P"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //熄灭
                0xFF  //自定义
 
                         };

int main()
{
    while(1)
    {
        if(S1 == 0)
        {
            delay(5);            //消抖
            if(S1 == 0 && key_counter < 9999)
            {
                key_counter++;
                while(!S1);                //松手检测
            }
        }
        if(S2 == 0)
        {
            delay(5);
            if(S2 == 0 && key_counter > 0)
            {
                key_counter--;
                while(!S2);
            }
        }
        if( 0 <= key_counter && key_counter <=9)
        {
            P2 = 0Xf7;        //P23给低电平只有最后一位数码管显示,只显示0~9
            P0 = leddata[key_counter];
            delay(5);
            P2 = 0xff;
        }
        if( 9 < key_counter && key_counter <= 99)
        {
            P2 = 0Xf7;        //显示个位
            P0 = leddata[key_counter%10];
            delay(5);
            P2 = 0Xfb;        //显示十位
            P0 = leddata[key_counter/10];
            delay(5);
            P2 = 0xff;
        }
        if( 99 < key_counter && key_counter <= 999)
        {
            P2 = 0Xf7;        //显示个位
            P0 = leddata[key_counter%10];
            delay(5);
            P2 = 0Xfb;        //显示十位
            P0 = leddata[key_counter/10%10];
            delay(5);
            P2 = 0Xfd;        //显示百位
            P0 = leddata[key_counter/100];
            delay(5);
            P2 = 0xff;
        }
        if( 999 < key_counter && key_counter <= 9999)
        {
            P2 = 0Xf7;        //显示个位
            P0 = leddata[key_counter%10];
            delay(5);
            P2 = 0Xfb;        //显示十位
            P0 = leddata[key_counter/10%10];
            delay(5);
            P2 = 0Xfd;        //显示百位
            P0 = leddata[key_counter/100%10];
            delay(5);
            P2 = 0xfe;        //显示千位
            P0 = leddata[key_counter/1000];
            delay(5);
            P2 = 0xff;
        }     
    }
}

/*
*********************************************************************
**函数名称:delay
**函数作用:延时函数
*********************************************************************
*/
void delay(uchar i)
{
  uchar j,k; 
  for(j=i;j>0;j--)
  for(k=125;k>0;k--);
}

89c51按键计数器相关推荐

  1. Verilog实现按键计数器

    Verilog实现按键计数器 文章目录 Verilog实现按键计数器 一.简介 二. 代码实现 三.效果 一.简介 计数器我们都知道,这里我们旨在使用Verilog HDL 来实现按键计数器的操作,功 ...

  2. 51单片机按键计数器程序_51单片机是如何存储程序和数据的

    在学校很少用到外扩ROM/RAM的情况,都是用C语言编程,不差空间,代码太大了,买个大ROM的芯片就行了.现在工作了,单位是做SoC的,采用了51的IP核,才算对51的代码/数据空间有了清晰的认识. ...

  3. MCU实战经验:多种的按键处理

    按键通常有:IO口按键(BUTTON),AD按键(通过AD采样电压),IR(遥控器) 按按键功能分:有短按键,长按键,连续按键.打个比方,遥控电视机,按一下音量键,音量增加1,这个就是短按键. 按住音 ...

  4. 一个学妹写的按键检测函数把我秀翻了!

    摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍 上来第一个例程就是使用按键点亮一个LED灯,好家伙.点灯小师弟比较在行,毕竟32.FP ...

  5. 外设驱动库开发笔记39:按键操作驱动

      按键在我们的项目中是经常使用到的组件.一般来说,我们都是在用到按键时直接针对编码,但这样每次都做很多重复性的工作.所以在这里我们考虑做一般性抽象得到一个可应用于按键操作的通用性驱动程序. 1.功能 ...

  6. (转) MCU实战经验---多种的按键处理

    之前的一个项目按键比较多,面板上面有按键,遥控器,处理的稍微复杂一点,MCU使用的是STM8S005K6. 关于按键部分的处理,现在拿处理来和大家分享一下,说的不对的地方还请各位大侠请教,大家共同进步 ...

  7. stm32F407按键例程安富莱

    /* ************************************************************************************************* ...

  8. 2.8 STM32_按键扫描_安富莱

    1.程序优点 扩展性非常强,功能比较齐全: bsp_key按键驱动程序用于扫描独立按键,具有软件滤波机制,采用FIFO机制保存键值.可以检测如下事件: 按键按下. 按键弹起. 长按键. 长按时自动连发 ...

  9. 【雕爷学编程】Arduino动手做(102)---TM1638按键数码管

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

最新文章

  1. 佩奇扑街、外星人疯狂!Python 告诉你大年初二应该看哪部电影
  2. JavaScript:从此不再怕闭包
  3. phpmyadmin 导出mysql_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]
  4. 网络硬件设备(职高高考笔记)
  5. Unity使用Aspose.Words创建表格和UI截图一起插入到Word中并保存到本地的一种解决方案
  6. 单片机c语言编程乘法运算符,单片机C语言编程常用的运算符介绍
  7. 学习笔记——矩阵键盘的扫描原理与基本应用
  8. 如何自己制作CHM电子书?
  9. 项目工作量估算的专家法
  10. 让人春分日 哈工科教110132.平面分割
  11. 完数什么意思_苹果序列号字母和数字都代表什么含义 iPhone的序列号字母与数字含义...
  12. mysql怎样修改my ini_修改mysql里面的my.ini文件后,如果让这个改动生效?
  13. 2021泰安高考成绩排名查询,泰安高中学校排名2021最新排名,泰安高中排名前十
  14. 基于python文本挖掘实战_python实现CNN中文文本分类
  15. uniapp 流文件pdf_uniapp写入字节流文件bytes
  16. 读书笔记——《人生的智慧》
  17. 网络威胁情报项目:为什么仍然很疯狂
  18. Windows 7官方原版镜像下载【简体中文版32位+64位】
  19. U盘提示磁盘结构损坏且无法读取怎么办?
  20. 万能五笔6.5绿色美化版试用手记

热门文章

  1. 《AutoCAD Advanced 3D Modeling》学习笔记
  2. Dy(3+)/Eu(3+)共掺钒磷酸钇荧光粉|磷酸钇掺镝YPO4:Dy3+|钼酸锌掺镝ZnMoO4 : Dy3+齐岳稀土发光材料
  3. 含稀土配合物粒径小/发色性能好的聚苯乙烯荧光微球/交联羧基聚苯乙烯微球/单分散荧光微球/红色荧光微球
  4. Jenkins安装(win系统)
  5. deepwalk运行总结
  6. 临床路径管理系统方案/案列/APP/软件/小程序/网站
  7. 如何使用学术搜索引擎和SCI论文资源获取方法
  8. 使用ccproxy实现 代理上网
  9. Flutter之仿美团菜单列表简单版
  10. Java缅甸文_Android_Android键盘输入语言设置默认打开myanmar缅甸语的步骤,locale是通过系统设置的地区和l - phpStudy...