实验中我们使用的是52单片机

目录

前言

一、单片机是什么?

二、实验步骤

1.独立键盘检测

1.2代码如下(示例):

1.3图片

1.4视频

2.矩阵键盘检测

2.2代码如下(示例):

2.3图片

2.4视频

总结:以上就是今天要讲的内容,本文仅仅简单介绍了单片机键盘检测的应用实现,而单片机键盘检测相关理论可以参考教材进行学习



前言

文章内主要概念引自郭天祥老师《新概念51单片机C语言版》一书

主要展示郭天祥老师书中第四章 键盘检测原理及应用实现。分为仿真、实体两部分。


一、单片机是什么?

单片机就是在一块硅片上集成了微处理器、存储器及各种输入/输出接口的芯片,这样一块芯片就具有了计算机的属性,因而被成为单片微型计算机,简称单片机。

二、实验步骤

1.独立键盘检测

1.1需求:用数码管的前两位显示一个十进制数,变化范围为00~59,开始时显示00,每按下S2一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次;数值归零;按下S5一次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止自动加1。

按键检测流程图:

1.2代码如下(示例):

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;                 // 申明U1锁存器的锁存端
sbit wela=P2^7;                 // 申明U2锁存器的锁存端
uchar code table[]={  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint);uchar numt0,num;void display(uchar numdis)        // 显示子函数
{uchar shi,ge;                  // 分离两个分别要显示的数shi=numdis/10;ge=numdis%10;dula=1;P0=table[shi];              // 送十位选段数据dula=0;P0=0xff;                   // 送位选数据前关闭所有显示,防止打开位选锁存时wela=1;                     // 原来段选数据通过位选锁存器造成混乱P0=0xfe;wela=0;delayms(5);              // 延时dula=1;P0=table[ge];               // 送个位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);
}void delayms(uint xms)
{uint i,j;for(i=xms;i>0;i--)             // i=xms即延时约xms毫秒for(j=110;j>0;j--);
}void init()                    // 初始化函数
{TMOD=0x01;             // 设置定时器0为工作方式1(0000 0001)TH0=(65536-45872)/256;      // 初装值50ms一次中断TL0=(65536-45872)%256;EA=1;                       // 开总中断ET0=1;                       // 开定时器0中断
}void keyscan()
{if(key1==0){delayms(10);if(key1==0){num++;if(num==60)           // 当到60时重新归0num=0;while(!key1);         // 等待按键释放}}if(key2==0){delayms(10);if(key2==0){if(num==0)           // 当到0时重新归60num=60;num--;while(!key2); }}if(key3==0){delayms(10);if(key3==0){num=0;                 // 清0while(!key3);}}if(key4==0){delayms(10);if(key4==0){while(!key4)TR0=~TR0;          // 停止或启动定时器0}}
}void main()
{init();                        // 初始化函数while(1){keyscan();display(num);}
}void T0_time() interrupt 1
{TH0=(65536-45872)/256;     // 重装初值TL0=(65536-45872)%256;numt0++;if(numt0==20)              // 如果到了20次,说明1秒时间到{numt0=0;              // 然后把num清0重新再计20次num++;if(num==60)num=0; }
}

1.3图片

TX-1C实验板上独立键盘与单片机连接图:


Proteus电路仿真图:

本电路图需用到

6位共阴数码管1个;

74HC573锁存器两个;

button按钮4个;

上拉电阻;

电源;

接地

单片机实体图:

1.4视频

独立键盘检测

2.矩阵键盘检测

2.1需求:实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0~F,6个数码管同时静态显示。

2.2代码如下(示例):

#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;                 // 申明U1锁存器的锁存端
sbit wela=P2^7;                 // 申明U2锁存器的锁存端
uchar code table[]={  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint xms)
{uint i,j;for(i=xms;i>0;i--)         //i=xms即延时约xms毫秒for(j=110;j>0;j--);
}void display(uchar num)
{P0=table[num];         //显示函数只送段选数据dula=1;dula=0;
}void matrixkeyscan()
{uchar temp,key;P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0)         //等待按键释放{temp=P3;temp=temp&0xf0;}display(key);              // 显示}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=12;break;case 0xd7:key=13;break;case 0xb7:key=14;break;case 0x77:key=15;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}
}void main()
{P0=0;          //关闭所有数码管段选dula=1;dula=0;P0=0xc0;           // 位选中所有数码管wela=1;wela=0;while(1){matrixkeyscan();  //不停调用键盘扫描程序}

2.3图片

TX-1C实验板上矩阵键盘按键与单片机连接图:

Proteus仿真电路图:

6位共阴数码管1个;

74HC573锁存器两个;

button按钮4个;

上拉电阻;

电源;

接地

单片机实体:

2.4视频

矩阵键盘检测

仿真视频:

先用keil编译生成hex文件;

再用Proteus仿真电路选择生成的hex文件进行仿真。

keil编译

Proteus


总结:
以上就是今天要讲的内容,本文仅仅简单介绍了单片机键盘检测的应用实现,而单片机键盘检测相关理论可以参考教材进行学习

51单片机(郭天祥版)——键盘检测原理及应用实现相关推荐

  1. 51单片机(五)独立键盘检测与矩阵键盘检测

    独立键盘检测与矩阵键盘检测 一.独立键盘检测 1.工作原理 2.举例 2.1 位定义 2.2 数码管显示 3.3 按键 2.4 中断服务函数 2.5 完整程序 二.矩阵键盘检测 1.工作原理 2.程序 ...

  2. 《例说51单片机(C语言版)(第3版)》——1-2 8051基础知识

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1-2节,作者 张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公 ...

  3. 《例说51单片机(C语言版)(第3版)》一1.2 8051基础知识

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.2节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...

  4. 《例说51单片机(C语言版)(第3版)》一1.7 实时练习

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.7节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...

  5. c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序

    当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章 用51单片机中断编写的4x4键盘程序 作者:未知   来源:山涧一溪流   点击数:-  更新时间:2014年06 ...

  6. 《例说51单片机(C语言版)(第3版)》——1-5 MCS-51的开发流程与工具

    本节书摘来异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.5节,作者:张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公众 ...

  7. 《例说51单片机(C语言版)(第3版)》一1.5 MCS-51的开发流程与工具

    本节书摘来自异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.5节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区"异步社区& ...

  8. 三、键盘检测原理及应用实现

    键盘检测原理及应用实现 视频链接:[3-4] 独立按键控制LED移位_哔哩哔哩_bilibili 对应课程P7-P10 键盘实际上就是一组按键,在单片机的外围电路中,通常用到的按键都是机械弹性开关,当 ...

  9. 51单片机学习笔记(郭天祥版)(3)——引脚讲解、数码管静态显示、中断系统(外部中断,定时器中断)...

    学习引脚的功能 9引脚 复位管脚,当给2个机器周期(24个时钟振荡周期)的高电平时会复位,单片机正常工作时会给0.5v的低电平 VPD备用电源的输入端,当主电源VCC发生故障降低到某一规定的低电平时, ...

  10. 51单片机学习笔记(郭天祥版)(8)——1602液晶

    右边那个用于插入1602,左边那个电位器(滑动变阻器)用于调节液晶的对比度,转动后,字符的颜色会发生深浅变化. 这样插上去,插反了容易把液晶烧坏. 1602:1行可以显示16个字符,一共两行. 还有1 ...

最新文章

  1. mongodb 监控命令mongostat
  2. Oracle修改字段类型方法
  3. mysql中的强制索引_MYSQL中常用的强制性操作(例如强制索引)
  4. Eudemon 防火墙基本配置
  5. jsf标签,jsp标签与jstl标签
  6. 操作系统课程设计:模拟文件系统
  7. 【天线】【1】一些名词和简单概念的解释
  8. 基于PLC的智能化配电箱系统
  9. m3u8格式转换器android,m3u8文件视频转换器(安卓版)
  10. MFC按方向键旋转立方体线框
  11. 神经网络pid控制原理框图,神经网络pid控制原理图
  12. MySQL基于位置的恢复
  13. Xubuntu22.04之连接filco蓝牙键盘
  14. 【渝粤题库】广东开放大学 基础会计 形成性考核
  15. 时间序列平稳性检验(ADF)和白噪声检验(Ljung-Box)
  16. 哈工大深圳计算机导师介绍,杜建军 - 教师名录 - 教师队伍 - 哈尔滨工业大学(深圳)...
  17. 【TS】1552- 浅谈TS运行时类型检查
  18. lamport面包店算法详细讲解及代码实现
  19. 基于STC89C52单片机的智能风扇
  20. 打开ftp文件发生错误,请检查是否有权限

热门文章

  1. VMware esxi6.7U3B安装镜像集成Realtek8168网卡驱动
  2. 自动化缺陷检测系统---项目总览
  3. 最新 IOS应用开发Icon规格自动裁剪器(C#)
  4. php里macd预测算法,股票MACD指标算法公式
  5. windows下cfree5中%d输出浮点数的问题
  6. ele-ui表单验证规则中的手机号码和邮箱的验证规则
  7. R语言条形图 bar chart
  8. 基础平面设计(文字排版篇)
  9. linux下制作dos启动u盘启动,linux dos启动盘怎样做
  10. axure9 邮件点击效果_Axure9操作学习