独立键盘

独立键盘和矩阵键盘虽都是键盘,但程序完全不同
先说独立键盘:

1、独立按键的处理思路
一般情况下,独立按键有两个引脚,其中一个通过上拉电阻接到单片机的I/O端口,另外一端接地。也就是说,平时按键没有动作的时候,输出的是高电平,如果有按下动作发生,则输出的是低电平。那么,我们在程序设计的时候,只要扫描跟按键引脚相连的I/O端口,如果发现有低电平产生,则判定该按键处于按下状态。有些时候,电路或者外围有电磁干扰,也会使单片机的I/O端口产生低电平,这种干扰信号会让单片机误认为是按键动作。所以,在扫描按键的时候应该做去抖动处理,把干扰信号过滤掉,从而获得准确的按键状态信号。


原理图中若想操作独立键盘想让J5端子2 3 引脚短接,这样当有键按下之后低电平将会从io口送出,然后我们检测io口的电平是否为低电平来判断按键是否按下.

CT107D 开发版任务:

程序如下:

#include "reg52.h"  sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;        sbit S7 = P3^0;
sbit S6 = P3^1;
sbit S5 = P3^2;
sbit S4 = P3^3;        unsigned char code SMG_NoDot[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};void Delay(unsigned char t)
{while(t--);
}void Init74HC138(unsigned char n)
{switch(n){case 4:HC138_A = 0;HC138_B = 0;HC138_C = 1;break;case 5:HC138_A = 1;HC138_B = 0;HC138_C = 1;break;case 6:HC138_A = 0;HC138_B = 1;HC138_C = 1;break;case 7:HC138_A = 1;HC138_B = 1;HC138_C = 1;break;case 8:HC138_A = 0;HC138_B = 0;HC138_C = 0;break;}
}void ShowKeyNum(unsigned char value)
{Init74HC138(6);P0 = 0x01;Init74HC138(7);P0 = value;
}void ScanKeys()
{if(S7 == 0){Delay(200);if(S7 == 0){while(S7 == 0);ShowKeyNum(SMG_NoDot[1]);}}if(S6 == 0){Delay(200);if(S6 == 0){while(S6 == 0);ShowKeyNum(SMG_NoDot[2]);}}if(S5 == 0){Delay(200);if(S5 == 0){while(S5 == 0);ShowKeyNum(SMG_NoDot[3]);}}if(S4 == 0){Delay(200);if(S4 == 0){while(S4 == 0);ShowKeyNum(SMG_NoDot[4]);}}
}{while(1){ScanKeys();}
}

非常的简单 ,但在蓝桥杯中 独立键盘的应用是有很多的嵌套; 如让S5 S6 按键来实现功能的切换 当S5作用时S6不工作,反之S6工作S5不工作,即S5 S6 是功能选择 其他键在嵌套进来实现功能.
如题目:

在第一次程序的基础上 改动,

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar stat=0;sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
sbit key=P3^6;sbit D1=P0^0;
sbit D2=P0^1;
sbit D3=P0^2;
sbit D4=P0^3;
sbit D5=P0^4;
sbit D6=P0^5;
sbit D7=P0^6;
void HC_138(uchar n) //138译码器选择
{switch(n){case(4):P2=(P2&0x1f)|0x80; break;case(5):P2=(P2&0x1f)|0xa0; break;case(6):P2=(P2&0x1f)|0xc0; break;case(7):P2=(P2&0x1f)|0xe0; break;}
}
void delay(uint t)
{while(t--);
}
void init() //关闭蜂鸣器
{HC_138(5);P0=0X00;
}
void scankey() //键盘扫描
{if(S7==0){delay(100);if(S7==0){if(stat==0){D1=0;stat=1;}else if(stat==1){D1=1;stat=0;}}}if(S6==0){delay(100);if(S6==0){if(stat==0){D2=0;stat=2;}else if(stat==2){D2=1;stat=0;}}}if(S5==0){delay(100);if(S5==0){if(stat==1){D4=0;while(S5==0)D4=1;}else if(stat==2){D6=0;while(S5==0)D6=1;} }}if(S4==0){delay(100);if(S4==0){if(stat==1){D3=0;while(S4==0)D3=1;}else if(stat==2){D5=0;while(S4==0)D5=1;}    }}}
void main()
{key=0;init();HC_138(4);P0=0XFF;while(1){scankey();}
}

这里设置一个变量stat 通过他的值来嵌套.

【ct107d】独立键盘相关推荐

  1. 【蓝桥杯单片机】矩阵键盘和独立键盘新解(更稳定更高复用性)

    实验开发板为CT107D蓝桥官方板,编译环境为MDK5   目录 一.矩阵键盘 二.独立键盘 参考宋雪松老师的写法: 采用多个缓冲区 可以扩展至16个键码对应的指令 一.矩阵键盘 通过修改Key_OU ...

  2. STC89C52单片机 独立键盘

    独立键盘 键盘介绍 键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令.输入信息的必须设备 键盘在单片机应用系统中是使用最广泛的一种数据输入设备.键盘是由多个按键组成的. 按键的工作原理 按键 ...

  3. 51单片机独立键盘和矩阵键盘

    独立键盘代码: #include<reg52.h> #include<intrins.h>#define uint unsigned int #define uchar uns ...

  4. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)

    这篇博文主要记录51单片机键盘篇(非编码键盘与编码键盘.非编码键盘的扫描方式.独立键盘.矩阵键盘.键盘消抖等)包含原理图.代码等 (一)基础补充 1.键盘的任务 2.键盘的识别 3.如何消除按键的抖动 ...

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

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

  6. 蓝桥杯实验4--按键之独立键盘(proteus仿真)

    开始试试按键的部分 首先说一下什么是按键 按键分为按结构可分为触点式和无触点式两类.开发板上用的是触点式的按键.按键在接口上分类可分为编码键盘和非编码键盘.按键通常使用机械式触点式按键开关,但是由于机 ...

  7. 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)

    文章仅为本人学习记录,如有引用部分会另加说明引用出处 矩阵键盘检测原理:(独立键盘的原理在代码注释中很详细) 线反法的原理为:首先使P1口的高四位输出高电平,P1口低四位输出低电平,这时键盘的行线被拉 ...

  8. 80C51单片机:5.独立键盘、矩阵键盘检测

    80C51单片机系列 80C51单片机 点亮第一个发光二极管,及流水灯案例 数码管显示及封装与消隐 中断.定时器 独立键盘.矩阵键盘检测 文章目录 80C51单片机系列 前言 独立键盘 独立键盘封装 ...

  9. 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)

    说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.键盘的分类 二.独立键盘的识别 三.一个读取独立按键状态的程序 四.矩阵键盘的识别 五. ...

最新文章

  1. 介绍一个效率爆表的数据采集框架
  2. 天昊生物16S扩增子绝对定量测序项目文章再次登陆《Science of the Total Environment》...
  3. ie6多文件上传_一个好的“文件上传”功能必须要注意的这些点你都知道吗?
  4. 成功解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed
  5. Win7 一键获得管理所有权限(最高权限)注册表
  6. ftp 服务器 性能,FTP 服务器性能 测试点
  7. Android 集成华为推送 push
  8. “从0开始的FreeRTOS”系列教程第一讲
  9. 终于讲透了,史上最详细的RS485串口通讯!
  10. 如何在win10自带的Edge浏览器中切换成IE浏览器浏览网站
  11. rar和zip格式的压缩与解压
  12. 第三天.......
  13. 使用nginx 同一端口根据不同域名转发到不同端口
  14. 视觉SLAM笔记(33) 对极约束求解相机运动
  15. 程序人生路上的新阶段
  16. 百度 android 市场,百度
  17. 【探索】停止线程和暂停线程
  18. 一键ghost(1key ghost)更改备份路径的方法
  19. iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
  20. showdoc mysql版_Showdoc

热门文章

  1. 王者荣耀服务器维护七月,《王者荣耀》7.28不停服维护更新攻略教程 7月28日更新公告...
  2. htm盒子模型与定位
  3. 怎么在html的表格中加筛选,excel中表头合并单元格的筛选
  4. 配方奶粉,尽量不用鲜奶
  5. win7 从网络访问此计算机',在里面把guest用户组添加上,大白菜修复win7系统没有权限访问网络资源的办法...
  6. 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)
  7. AI科普(一):什么是人工智能?
  8. 若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是: A)scanf(“ %d%lx,%le“,x,y,z); B)scanf(“%2d * %d%lf“,
  9. 购买实体网站服务器,实体服务器购买
  10. 网站流量有什么作用?可以刷流量吗?