【ct107d】独立键盘
独立键盘
独立键盘和矩阵键盘虽都是键盘,但程序完全不同
先说独立键盘:
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】独立键盘相关推荐
- 【蓝桥杯单片机】矩阵键盘和独立键盘新解(更稳定更高复用性)
实验开发板为CT107D蓝桥官方板,编译环境为MDK5 目录 一.矩阵键盘 二.独立键盘 参考宋雪松老师的写法: 采用多个缓冲区 可以扩展至16个键码对应的指令 一.矩阵键盘 通过修改Key_OU ...
- STC89C52单片机 独立键盘
独立键盘 键盘介绍 键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令.输入信息的必须设备 键盘在单片机应用系统中是使用最广泛的一种数据输入设备.键盘是由多个按键组成的. 按键的工作原理 按键 ...
- 51单片机独立键盘和矩阵键盘
独立键盘代码: #include<reg52.h> #include<intrins.h>#define uint unsigned int #define uchar uns ...
- 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)
这篇博文主要记录51单片机键盘篇(非编码键盘与编码键盘.非编码键盘的扫描方式.独立键盘.矩阵键盘.键盘消抖等)包含原理图.代码等 (一)基础补充 1.键盘的任务 2.键盘的识别 3.如何消除按键的抖动 ...
- 51单片机(五)独立键盘检测与矩阵键盘检测
独立键盘检测与矩阵键盘检测 一.独立键盘检测 1.工作原理 2.举例 2.1 位定义 2.2 数码管显示 3.3 按键 2.4 中断服务函数 2.5 完整程序 二.矩阵键盘检测 1.工作原理 2.程序 ...
- 蓝桥杯实验4--按键之独立键盘(proteus仿真)
开始试试按键的部分 首先说一下什么是按键 按键分为按结构可分为触点式和无触点式两类.开发板上用的是触点式的按键.按键在接口上分类可分为编码键盘和非编码键盘.按键通常使用机械式触点式按键开关,但是由于机 ...
- 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)
文章仅为本人学习记录,如有引用部分会另加说明引用出处 矩阵键盘检测原理:(独立键盘的原理在代码注释中很详细) 线反法的原理为:首先使P1口的高四位输出高电平,P1口低四位输出低电平,这时键盘的行线被拉 ...
- 80C51单片机:5.独立键盘、矩阵键盘检测
80C51单片机系列 80C51单片机 点亮第一个发光二极管,及流水灯案例 数码管显示及封装与消隐 中断.定时器 独立键盘.矩阵键盘检测 文章目录 80C51单片机系列 前言 独立键盘 独立键盘封装 ...
- 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)
说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.键盘的分类 二.独立键盘的识别 三.一个读取独立按键状态的程序 四.矩阵键盘的识别 五. ...
最新文章
- 介绍一个效率爆表的数据采集框架
- 天昊生物16S扩增子绝对定量测序项目文章再次登陆《Science of the Total Environment》...
- ie6多文件上传_一个好的“文件上传”功能必须要注意的这些点你都知道吗?
- 成功解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed
- Win7 一键获得管理所有权限(最高权限)注册表
- ftp 服务器 性能,FTP 服务器性能 测试点
- Android 集成华为推送 push
- “从0开始的FreeRTOS”系列教程第一讲
- 终于讲透了,史上最详细的RS485串口通讯!
- 如何在win10自带的Edge浏览器中切换成IE浏览器浏览网站
- rar和zip格式的压缩与解压
- 第三天.......
- 使用nginx 同一端口根据不同域名转发到不同端口
- 视觉SLAM笔记(33) 对极约束求解相机运动
- 程序人生路上的新阶段
- 百度 android 市场,百度
- 【探索】停止线程和暂停线程
- 一键ghost(1key ghost)更改备份路径的方法
- iOS简易蓝牙对战五子棋游戏设计思路之一——核心蓝牙通讯类的设计
- showdoc mysql版_Showdoc
热门文章
- 王者荣耀服务器维护七月,《王者荣耀》7.28不停服维护更新攻略教程 7月28日更新公告...
- htm盒子模型与定位
- 怎么在html的表格中加筛选,excel中表头合并单元格的筛选
- 配方奶粉,尽量不用鲜奶
- win7 从网络访问此计算机',在里面把guest用户组添加上,大白菜修复win7系统没有权限访问网络资源的办法...
- 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)
- AI科普(一):什么是人工智能?
- 若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是: A)scanf(“ %d%lx,%le“,x,y,z); B)scanf(“%2d * %d%lf“,
- 购买实体网站服务器,实体服务器购买
- 网站流量有什么作用?可以刷流量吗?