简捷的键盘扫描去抖方法

简捷的键盘扫描去抖方法
简捷的键盘扫描去抖方法

实验报告七-键盘扫描及显示实验

信息工程学院实验报告 课程名称:微机原理与接口技术 实验项目名称:键盘扫描及显示实验 实验时间: 班级: 姓名: 学号: 一、实 验 目 的 1. 掌握 8254 的工作方式及应用编程。 2. 掌握 8254 典型应用电路的接法。 二、实 验 设 备 了解键盘扫描及数码显示的基本原理,熟悉 8255 的编程。 三、实 验 原 理 将 8255 单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。实验具体内容如下:将键盘进行编号,记作 0~F ,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编号。 键盘及数码管显示单元电路图如图 7-1 和 7-2 所示。8255 键盘及显示实验参考接线图如图 7-3 所示。 图 7-1 键盘及数码管显示单元 4×4 键盘矩阵电路图 成 绩: 指导老师(签名):

图 7-2 键盘及数码管显示单元 6 组数码管电路图 图 7-3 8255 键盘扫描及数码管显示实验线路图 四、实验内容与步骤 1. 实验接线图如图 7-3 所示,按图连接实验线路图。

图 7-4 8255 键盘扫描及数码管显示实验实物连接图 2.运行 Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。 图 7-5 8255 键盘扫描及数码管显示实验程序编辑界面 3. 运行程序,按下按键,观察数码管的显示,验证程序功能。 五、实验结果及分析: 1. 运行程序,按下按键,观察数码管的显示。

【内部培训资料】键盘快捷键

通用键盘快捷键 ?CTRL+C(复制) ?CTRL+X(剪切) ?CTRL+V(粘贴) ?SHIFT+DELETE(永久删除所选项,而不将该项放入"回收站 ?CTRL+Z(撤消) ?DELETE(删除) ?SHIFT+DELETE(永久删除所选项,而不将该项放入"回收站") ?按住CTRL 键拖动项(复制所选项) ?按住CTRL+SHIFT 拖动项(创建所选项的快捷方式) ?F2 键(重命名所选项) ?CTRL+向右键(将插入点移动到下一个单词的开头) ?CTRL+向左键(将插入点移动到前一个单词的开头) ?CTRL+向下键(将插入点移动到下一段的开头) ?CTRL+向上键(将插入点移动到前一段的开头) ?按住CTRL+SHIFT 使用任一箭头键(突出显示文本块) ?按住SHIFT 使用任一箭头键(选择窗口中或桌面上的多个项,或者选择文档中的文本) ?CTRL+A(全选) ?F3 键(搜索文件或文件夹) ?ALT+ENTER(查看所选项的属性) 1

?ALT+F4(关闭活动项,或者退出活动程序) ?ALT+ENTER(显示所选对象的属性) ?ALT+空格键(打开活动窗口的快捷菜单) ?CTRL+F4(关闭允许您同时打开多个文档的程序中的活动文档) ?ALT+TAB(在打开的各项之间切换) ?ALT+ESC(按各项打开时的顺序循环切换这些项) ?F6 键(循环切换窗口中或桌面上的屏幕元素) ?F4 键(在"我的电脑"或"Windows 资源管理器"中显示"地址"栏列表)?SHIFT+F10(显示所选项的快捷菜单) ?ALT+空格键(显示活动窗口的系统菜单) ?CTRL+ESC(显示"开始"菜单) ?ALT+菜单名中带下划线的字母(显示对应的菜单) ?已打开的菜单上命令名中带下划线的字母(执行对应的命令) ?F10 键(激活活动程序中的菜单栏) ?向右键(打开右侧的紧邻菜单,或者打开子菜单) ?向左键(打开左侧的紧邻菜单,或者关闭子菜单) ?F5 键(更新活动窗口) ?BACKSPACE(在"我的电脑"或"Windows 资源管理器"中查看上一级的文件夹) ?ESC(取消当前任务) 2

单片机矩阵键盘扫描程序

#include #include #define uint unsigned int #define uchar unsigned char sbit E=P2^7; //1602使能引脚 sbit RW=P2^6; //1602读写引脚 sbit RS=P2^5; //1602数据/命令选择引脚 uint keyflag ; //键盘正在读取标志位,如果Keyflag为1 ,表示正在读取键盘,停止其他功能; char x,y,m,n,c; //Keyflag为0,读取键盘结束,恢复其他功能 char flag1=0; //频率范围10~1000Hz uchar Hrate = 0; //一个周期内高点平占据时间 uchar Lrate = 0; //一个周期内低电平占据时间 uint FREQ0; //定时器T0的计数变量// uint FREQ1; //定时器T1的计数变量// sbit P2_1=P2^0; //设置P2.1,作为信号输出口// uint disbuf[3]; uint figure=0; int sum2=0; int sum1=0; int flag=0; uint count=0; uint max=0; uint disbuf_temp=0; /******************************************************************** * 名称: 1602显示延时函数delay() * 功能: 延时,延时时间大概为5US。

* 输出: 无 ***********************************************************************/ void delay() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } /******************************************************************** * 名称: bit Busy(void) * 功能: 这个是一个读状态函数,读出函数是否处在忙状态 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ bit Busy(void) { bit busy_flag = 0; RS = 0; RW = 1; E = 1; delay(); busy_flag = (bit)(P0 & 0x80); E = 0; return busy_flag; } /******************************************************************** * 名称: wcmd(uchar del) * 功能: 1602命令函数 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ void wcmd(uchar del) { while(Busy()); RS = 0; RW = 0; E = 0; delay(); P0 = del; delay(); E = 1;

矩阵键盘的工作原理和扫描确认方式

9.3.1 矩阵键盘的工作原理和扫描确认方式 来源:《AVR单片机嵌入式系统原理与应用实践》M16华东师范大学电子系马潮 当键盘中按键数量较多时,为了减少对I/O 口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行或列线上的电平变化可以确定哪个按键被按下。 图9-7 为一个 4 x 3 的行列结构,可以构成12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个16 键的键盘。很明显,在按键数量多的场合,矩阵键盘与独立式按键键盘相比可以节省很多的I/O 口线。 矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态,因此会大量占用MCU 的时间,所以较好的方式也是采用状态机的方法来设计,尽量减少键盘查询过程对MCU 的占用时间。 下面以图9-7 为例,介绍采用行扫描法对矩阵键盘进行判别的思路。图9-7 中,PD0、PD1、PD2 为3 根列线,作为键盘的输入口(工作于输入方式)。PD3、PD4、PD5、PD6 为4根行线,工作于输出方式,由MCU(扫描)控制其输出的电平值。行扫描法也称为逐行扫描查询法,其按键识别的过程如下。 √将全部行线PD3-PD6 置低电平输出,然后读PD0-PD2 三根输入列线中有无低电平出现。只要有低电平出现,则说明有键按下(实际编程时,还要考虑按键的消抖)。如读到的都是高电平,则表示无键按下。 √在确认有键按下后,需要进入确定具体哪一个键闭合的过程。其思路是:依

键盘扫描显示实验原理及分析报告

键盘扫描显示实验原理及分析报告 一、实验目的-------------------------------------------------------------1 二、实验要求-------------------------------------------------------------1 三、实验器材-------------------------------------------------------------1 四、实验电路-------------------------------------------------------------2 五、实验说明-------------------------------------------------------------2 六、实验框图-------------------------------------------------------------2 七、实验程序-------------------------------------------------------------3 八、键盘及LED显示电路---------------------------------------------14 九、心得体会------------------------------------------------------------- 15 十、参考文献--------------------------------------------------------------15

电脑的基本操作培训

电脑的基本操作培训 一、电脑开关机、重启和休眠的方法。 1.休眠和关机的区别和休眠的做用以及休眠的开启方法。 休眠:计算机在关闭前首先将内存中的信息存入硬盘的一种状态。 特点:将计算机从休眠中唤醒时,所有打开的应用程序和文档都会恢复到桌面上。 休眠和关机的区别:关机不保存信息,休眠保存用户状态和相关信息,如果使用休眠后会在下次启动电脑时大大加快启动速度。计算机进入休眠状态时,计算机内存中的所有内容将保存到硬盘,并且最后关闭计算机。再次开机后计算机返回到休眠计算机时的状态,原来打开的所有程序和文档将全都还原到桌面。 开启休眠的方法:打开“控制面板”中的“电源选项”。单击休眠选项卡,选中启用休眠支持复选框,然后单击应用。如果休眠选项卡不可用,则说明计算机不支持该功能。

休眠的方法:单击“开始”,然后单击“关闭计算机”,然后按住shift 键,最后点‘休眠“。 2.开机 正确的开机顺序:打开电源,打开显示器,打印机等外部设备,然后按下主机开机按钮。这样做的原因是开机时会有一个很大的电流冲

击,打开显示器、打印机等外部设备后,这个电流冲击就会分散到这些外部设备上,这样可以减少对主机的损害。 3.关机 关机和开机的顺序恰恰相反,先关闭主机,等主机关闭后,再关闭显示器等外部设备,最后关闭电源。* 4.重启 2种情况 正常重启:一般是系统需要,比如安装完驱动后,电脑一般要求重新启动。这种情况属于正常重启。 非正常重启:这种情况一般最常见的原因是死机,只能重新启动电脑。如何判断死机?最简单的方法是看数字键盘开关Num Lock灯(在键盘的左上角)是否可以闪动.如果死机,按下重启按钮重启电脑。* #演示:启用休眠的方法 二、键盘和鼠标的设置与使用。 1.键盘字符区功能区编辑区数字区 指示灯的控制键:数字键盘开关大小写切换键 上档键SHIFT的作用。

经典的矩阵键盘扫描程序

键盘是单片机常用输入设备,在按键数量较多时,为了节省I/O口等单片机资源,一般采取扫描的方式来识别到底是哪一个键被按下。即通过确定被按下的键处在哪一行哪一列来确定该键的位置,获取键值以启动相应的功能程序。 4*4矩阵键盘的结构如图1(实物参考见万用板矩阵键盘制作技巧)。在本例中,矩阵键盘的四列依次接到单片机的P1.0~P1.3,四行依次接到单片机的P1.4~P1.7;同时,将列线上拉,通过10K电阻接电源。 查找哪个按键被按下的方法为:一个一个地查找。 先第一行输出0,检查列线是否非全高; 否则第二行输出0,检查列线是否非全高; 否则第三行输出0,检查列线是否非全高; 如果某行输出0时,查到列线非全高,则该行有按键按下; 根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。 下面是具体程序:

void Check_Key(void) { unsigned char row,col,tmp1,tmp2; tmp1 = 0x10; //tmp1用来设置P1口的输出,取反后使 P1.4~P1.7中有一个为0 for(row=0;row<4;row++) // 行检测 { P1 = 0x0f; // 先将p1.4~P1.7置高 P1 =~tmp1; // 使P1.4~p1.7中有一个为0 tmp1*=2; // tmp1左移一位 if ((P1 & 0x0f) < 0x0f) // 检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测 { tmp2 = 0x01; // tmp2用于检测出哪一列为0 for(col =0;col<4;col++) // 列检测 { if((P1 & tmp2)==0x00) // 该列如果为低电平则可以判定为该列 { key_val =key_Map[ row*4 +col ]; // 获取键值,识别按键;key_Map为按键的定义表 return; // 退出循环 } tmp2*=2; // tmp2左移一位 } } } } //结束 这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精炼。

实验四 键盘扫描及显示设计实验报告

实验四键盘扫描及显示设计实验报告 一、实验要求 1. 复习行列矩阵式键盘的工作原理及编程方法。 2. 复习七段数码管的显示原理。 3. 复习单片机控制数码管显示的方法。 二、实验设备 1.PC 机一台 2.TD-NMC+教学实验系统 三、实验目的 1. 进一步熟悉单片机仿真实验软件 Keil C51 调试硬件的方法。 2. 了解行列矩阵式键盘扫描与数码管显示的基本原理。 3. 熟悉获取行列矩阵式键盘按键值的算法。 4. 掌握数码管显示的编码方法。 5. 掌握数码管动态显示的编程方法。 四、实验内容 根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能: 1.扫描键盘输入,并将扫描结果送数码管显示。 2.键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。 实验具体内容如下: 将键盘进行编号,记作 0~F,当按下其中一个按键时,将该按键对应的编号在一个数码 管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数 码管上可以显示最近 4 次按下的按键编号。 五、实验单元电路及连线 矩阵键盘及数码管显示单元

图1 键盘及数码管单元电路 实验连线 图2实验连线图 六、实验说明 1. 由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为 5~10ms。这是一个很重要的时间参数,在很多场合都要用到。 键抖动会引起一次按键被误读多次。为了确保 CPU 对键的一次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按

单片机4X4键盘扫描和显示课程设计

二、设计内容 1、本设计利用各种器件设计,并利用原理图将8255单元与键盘及数码管显示单元连接,扫描键盘输入,最后将扫描结果送入数码管显示。键盘采用4*4键盘,每个数码管可以显示0-F共16个数。将键盘编号,记作0-F,当没按下其中一个键时,将该按键对应的编号在一个数码管上显示出来,当在按下一个 键时,便将这个按键的编号在下一个数码管上显示,数码管上 可以显示最近6次按下的按键编号。 设计并实现一4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。 三、问题分析及方案的提出 4×4键盘的每个按键均和单片机的P1口的两条相连。若没有按键按下时,单片机P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。单片机定时对P1口进行程序查询,即可发现键盘上是否有按键按下以及哪个按键被按下。 实现4×4键盘的接口需要用到单片机并编写相应的程序来识别键盘的十六个按键中哪个按键被按下。因为此题目还要求将被按下的按键显示出来,因此可以用两个数码管来分别显示被按下的按键的行与列

表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。例如0xD7是键盘的第二行第四列的按键 对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。 五、电路设计及功能说明 4×4键盘的十六个按键分成四行四列分别于P1端口的八条I/O 数据线相连;两个七段数码管分别与单片机的P0口和P2口的低七 位I/O数据线相连。数码管采用共阳极的接法,所以需要下拉电阻 来分流。结合软件程序,即可实现4×4键盘的接口及显示的设计。 当按下键盘其中的一个按键时,数码管上会显示出该按键在4×4键 盘上的行值和列值。所以实现了数码管显示按键位置的功能 四、设计思路及原因 对于4×4键盘,共有十六个按键。如果每个按键与单片机的一个引脚相连,就会占用16个引脚,这样会使的单片机的接口不够用(即使够用,也是对单片机端口的极大浪费)。因此我们应该行列式的接法。行列式非编码键盘是一种把所有按键排列成行列矩阵的键盘。在这种键若没有按键按下时,单片机从P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。因此0xEX(X表示任意4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X 二、实验内容

51单片机矩阵键盘扫描程序

/*----------------------------------------------- 名称:矩阵键盘依次输入控制使用行列逐级扫描 论坛:https://www.360docs.net/doc/c34078580.html, 编写:shifang 日期:2009.5 修改:无 内容:如计算器输入数据形式相同从右至左使用行列扫描方法 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//us级延时函数声明 void DelayMs(unsigned char t); //ms级延时 void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数 unsigned char KeyScan(void);//键盘扫描 unsigned char KeyPro(void); void Init_Timer0(void);//定时器初始化 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num,i,j; unsigned char temp[8]; Init_Timer0(); while (1) //主循环 { num=KeyPro();

C语言 4x4键盘扫描程序

C语言 4*4键盘扫描电路模块 #include #define uchar unsigned char //byte #define uint unsigned int //word void keyscan(); //函数声明 void fun0(); //定义每个按键的功能函数 void fun1(); void fun2(); void fun3(); void fun4(); void fun5(); void fun6(); void fun7(); void fun8(); void fun9(); void fun10(); void fun11(); void fun12(); void fun13(); void fun14(); void fun15(); /******************************************************************** ******** 主程序 ********************************************************************* *******/ void main(void) { while(1) //循环扫描 { keyscan(); } } /******************************************************************** ******** 按键功能函数 fun0~fun15 ********************************************************************* *******/ void fun0(void) { P3=0x00; }

掌握 WINDOWS 操作系统中键盘和鼠标的基本操作;

步骤/方法 1 一:基本硬件组成简介1(?)计算机的基本组成 计算机从外观上来看主要有主机和显示器组成,计算机系统由运算器,控制器,存储器,输入设备和输出设备五大部分组成。运算器和控制器集成在一起又称为中央处理器简称为CPU;存储器分为内部存储器和外部存储器,内部存储器简称为内存(RAM),外部存储器简称为外存如硬盘,光盘,移动磁盘等;输入设备是用来从外界向计算机系统输入数据的唯一途径,常见的输入设备有鼠标,键盘,扫描仪等;输出设备是计算机将处理结果显示给用户的,常见的输出设备有显示 器,绘图仪,音响等。 (2)主机的组成 主机由主板,内存,CPU,硬盘,光驱,数据线和电源。 (3) 主机面板按钮?开机按钮(Power),复位键(Rest)死机时按一下该键系统将重 新启动。?(4)面板接口 计算机主机前面板上一般有USB和音响和话筒接口,BUS接口又称为即插即用接口(不用关闭计算机系统,在开机状态可以直接插),USB设备均可以使用此接口和计算机相连接,常见的USB设备有USB键盘,USB鼠标,USB口打印机,U盘,移动硬盘等,此外还可以用来和数码相机,手机相连接。用户要特别注意的是我们称USB设备为即插即用设备但是向移动类存储磁盘最好不要直接拔出,因为这样容易损坏磁盘导致数据丢失。正确的方法是:单击桌面右下角的图标,然后单击右下角弹出的小窗口,等出现“安全删除USB”再拔下USB设备。计算机主机后面板上有电源,POST,串口,并口,显示器,网络,USB,

音响和话筒接口,这些接口大部分是主板上自带的。声卡,网卡,显卡可以是主板上集成的设备也可以是独立的设备。注:不同的主板接口布局有所不同,但是接口规格和形式都是符合国际标准的。?串口:这种接口的数据传送模式是串行通讯,所以它只能连接串行设备。 并口:这种接口的数据传送模式是并行通讯,主要和并口设备连接,通常可以和并口打印机相连接。 COM口:COM口有两个,一个COM口是鼠标接口,一个COM口是键盘接口,接口的旁边都有标示。 ?2?二:计算机软件介绍 (1)系统软件:Windows98/2000/2002/XP Windows优化大师。?(2)应用软件:Word/Excel/Photoshop(应用于某一领域)。?三:开机、关机?(1)开机:①先打开显示器开关按钮(标有Power字样的按钮)。 ②再打开主机开关按钮(标有Power字样的按钮)。 (2)关机:①单击“开始”菜单。 ②单击“关闭计算机”。?③等待主机面板上的指示灯灭了以后,再关闭显示器的电源。 切不可在计算机工作的时候将电源突然切断,这样对硬盘是有损害的,严重时会 造成数据丢失或损坏硬盘。 四:键盘简介?键盘是计算机必不可少的输入设备,目前使用最广泛的是101或 102键的键盘。根据键盘使用功能可 以将键盘分为三个区:功能键盘区,打字键盘区和数字小键盘区。 (1) 功能键盘区:包括Esc,F1----F12,Tab,CapsLooK,Shif t,Ctrl,Alt,PrintScreen,ScrollLock,Pause,In sert,Home,PageUp,Delete,End,PageDown,NumLock等

经典的矩阵键盘扫描程序

经典的矩阵键盘扫描程序 查找哪个按键被按下的方法为:一个一个地查找。 先第一行输出0,检查列线是否非全高; 否则第二行输出0,检查列线是否非全高; 否则第三行输出0,检查列线是否非全高; 如果某行输出0时,查到列线非全高,则该行有按键按下; 根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。 下面是具体程序: void Check_Key(void) { unsigned char row,col,tmp1,tmp2; tmp1 = 0x10; //tmp1用来设置P1口的输出,取反后使 P1.4~P1.7中有一个为0 for(row=0;row<4;row++) // 行检测 { P1 = 0x0f; // 先将p1.4~P1.7置高 P1 =~tmp1; // 使P1.4~p1.7中有一个为0 tmp1*=2; // tmp1左移一位 if ((P1 & 0x0f) < 0x0f) // 检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测 { tmp2 = 0x01; // tmp2用于检测出哪一列为0 for(col =0;col<4;col++) // 列检测

{ if((P1 & tmp2)==0x00) // 该列如果为低电平则可以判定为该列 { key_val =key_Map[ row*4 +col ]; // 获取键值,识别按键;key_Map为按键的定义表 return; // 退出循环 } tmp2*=2; // tmp2左移一位 } } } } //结束 这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精炼。 4*4矩阵键盘扫描程序 /* 设置行线为输入线,列线为输出线 */ uchar KeyScan(); //按键扫描子程序 void delay10ms(); //延时程序 uchar key_free(); //等待按键释放程序 void key_deal(); //键处理程序 //主程序 void main() { while(1) { KeyScan(); key_free(); key_deal(); } } //按键扫描子程序 uchar KyeScan() { unsigned char key,temp; P1=0xF0; if(P1&0xF0!=0xF0) { delay10ms(); //延时去抖动 if(P1&0xF0!=0xF0) { P1=0xFE; //扫描第一列

2x2行列式键盘扫描程序

#include #define uchar unsigned char #define uint unsigned int sbit rs=P3^5; sbit dula=P2^6; sbit wela=P2^7; sbit led2=P1^1; sbit led4=P1^3; sbit led6=P1^5; sbit led8=P1^7; sbit feng=P2^3; uchar templ; void delay1(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { dula=1; P0=0; dula=0; while(1) { P3=0xfb; templ=P3; templ=templ&0xf0; while(templ!=0xf0) { delay1(10); templ=P3; templ=templ&0xf0; while(templ!=0xf0) { templ=P3; switch(templ) { case 0xbb: led6=~led6; feng=0;

feng=1; break; case 0xeb: led4=~led4; feng=0; delay1(100); feng=1; break; } while(templ!=0xf0) { templ=P3; templ=templ&0xf0; } } } P3=0xfe; templ=P3; templ=templ&0xf0; while(templ!=0xf0) { delay1(10); templ=P3; templ=templ&0xf0; while(templ!=0xf0) { templ=P3; switch(templ) { case 0xbe: led8=~led8; feng=0; delay1(100); feng=1; break; case 0xee: led2=~led2; feng=0;

经典按键扫描程序

以下假设你懂C语言,因为纯粹的C语言描述,所以和处理器平台无关,你可以在MCS-51,AVR,PIC,甚至是ARM平台上面测试这个程序性能。以下以AVR的MEGA8作为平台讲解,没有其它原因,因为我手头上只有AVR的板子而已没有51的。用51也可以,只是芯片初始化部分不同,还有寄存器名字不同而已。 核心算法: unsigned char Trg; unsigned char Cont; void KeyRead( void ) { unsigned char ReadData = PINB^0xff; // 1 Trg = ReadData & (ReadData ^ Cont); // 2 Cont = ReadData; // 3 } 下面是程序解释:Trg(triger)代表的是触发,Cont(continue)代表的是连续按下。 1:读PORTB的端口数据,取反,然后送到ReadData 临时变量里面保存起来。(端口值与0XFF 按位异或,有按键按下为0,异或后相应的位就为1,相当于将读取的端口值取反) 2:算法1,用来计算触发变量的。一个位与操作,一个异或操作,我想学过C语言都应该懂吧?Trg为全局变量,其它程序可以直接引用。 3:算法2,用来计算连续变量。 看到这里,有种“知其然,不知其所以然”的感觉吧?代码很简单,但是它到底是怎么样实现我们的目的的呢?好,下面就让我们绕开云雾看青天吧。 我们最常用的按键接法如下:AVR是有内部上拉功能的,但是为了说明问题,我是特意用外部上拉电阻。(STM32可以将端口设置为输入上拉模式)那么,按键没有按下的时候,读端口数据为1,如果按键按下,那么端口读到0。下面就看看具体几种情况之下,这算法是怎么一回事。 (1)没有按键的时候 端口为0xff,ReadData读端口并且取反,很显然,就是 0x00 了。(0XFF^0XFF=0X00)Trg = ReadData & (ReadData ^ Cont); (初始状态下,Cont也是为0的)很简单的数学计算,因为ReadData为0,则它和任何数“相与”,结果也是为0的。 Cont = ReadData; 保存Cont 其实就是等于ReadData,为0; 结果就是: ReadData = 0; Trg = 0; Cont = 0; (2)第一次PB0按下的情况 端口数据为0xfe,ReadData读端口并且取反,很显然,就是 0x01 了。(0XFE^0XFF=0X01)Trg = ReadData & (ReadData ^ Cont); 因为这是第一次按下,所以Cont是上次的值,应为为0。那么这个式子的值也不难算,也就是 Trg = 0x01 & (0x01^0x00) = 0x01 Cont = ReadData = 0x01; 结果就是: ReadData = 0x01; Trg = 0x01;Trg只会在这个时候对应位的值为1,其它时候都为0 Cont = 0x01;

键盘扫描及显示设计实验

【实验内容】 将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。键盘采用4×4键盘,每个数码管显示值可为0~F 共16个数。实验具体内容如下:将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示本次按键的按键编号。8255键盘及显示实验参考接线图如图1所示。 【实验步骤】 1. 按图1连接线路图; 2. 编写实验程序,检查无误后编译、连接并装入系统; 3. 运行程序,按下按键,观察数码管的显示,验证程序功能。 【程序代码】 MY8255_A EQU 0600H MY8255_B EQU 0602H MY8255_C EQU 0604H MY8255_CON EQU 0606H SSTACK SEGMENT STACK DW 16 DUP(?) SSTACK ENDS DA TA SEGMENT DTABLE DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H table1 db 0dfh,0efh,0f7h,0fbh,0fdh,0feh count db 0h DA TA END ODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DA TA

MOV DS,AX MOV SI,3000H MOV AL,03H MOV [SI],AL ;清显示缓冲 MOV [SI+1],AL MOV [SI+2],AL MOV [SI+3],AL MOV [SI+4],AL MOV [SI+5],AL MOV DI,3005H MOV DX,MY8255_CON ;写8255控制字 MOV AL,81H OUT DX,AL BEGIN: CALL DIS ;调用显示子程序 CALL CLEAR ;清屏 CALL CCSCAN ;扫描 JNZ INK1 JMP BEGIN INK1: CALL DIS CALL DALL Y CALL DALL Y CALL CLEAR CALL CCSCAN JNZ INK2 ;有键按下,转到INK2 JMP BEGIN ;======================================== ;确定按下键的位置 ;======================================== INK2: MOV CH,0FEH MOV CL,00H COLUM: MOV AL,CH MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C IN AL,DX L1: TEST AL,01H ;is L1? JNZ L2 MOV AL,00H ;L1 JMP KCODE L2: TEST AL,02H ;is L2? JNZ L3 MOV AL,04H ;L2 JMP KCODE L3: TEST AL,04H ;is L3?

教会键盘速成教材(基础)新

前言 我是一个完全靠自学的音乐学生,也曾经有过正规学习音乐的梦想,也向上帝恳切的祷告,到专业的音乐学习机构去系统的学习音乐。但是上帝好像堵住了他自己的耳朵,完全不理会我的祈求。不过我的信心没有因此而软弱,因为上帝在他的计划中早有安排…… 感谢神,如今我已经是一名音乐教师了,回想起上帝的恩典和他伟大的计划,不禁感叹神的伟大。他定义要叫我成为一名培养基层教会中普通信徒的教师。所以亲自的交给我速成而且好听的钢琴技巧,使跟我学习过的学员都能在经过短暂培训后就能一边学习一边侍奉教会了。 正规的音乐学院培养出来的精英们确实是实力强大,素养很高。但是数量却不是很多,并不能满足快速建立起来的教会需求,并且学习的时间和周期比较长,让很多有家庭和经济上困难的信众都没有时间和经济实力来献上自己去学习。因此,在多年的音乐探索中,在上帝亲自的指导下,我总结出了一套适用于短期速成而且实用性强的键盘教程。让有心奉献的每一个人都有机会成为侍奉的瓦器。 这套教程的特点是,简单易学,注重音乐理论和理论的实践。并且强调音乐的自由性,鼓励大家即兴发挥和即兴创作。让音乐成为生活中的一种享受,一种自由抒发情感的有力工具。 本教程共分三大部分 第一部分是《键盘基础与无旋律伴奏》 这部分主要介绍了弹琴所需要的一些基本功,还有基本的和声概念。以及简单配置和弦的方法。使用大量的练习曲来让大家直接投入到教会的侍奉之中去。 第二部分是《键盘独奏》 这部分主要介绍了键盘独奏的知识,包括4beat8beat16beat的流行伴奏方式和一些美化旋律的技巧,还有很多实用而华丽的插音技巧。让你用键盘来打动每一个听众。这部分学习结束后,你便可以成为一个合格的司琴人员了。 第三部分是综合提高 这部分主要是介绍一些高级的和声知识,以及歌曲创作的基本知识。另外还有许多其他风格的伴奏型式供大家丰富自己的弹奏。这部分学习完毕,你就可以成为一个Musicman(音乐人)了。 如果大家按部就班的仔细学好这三本教程,你就已经打开了音乐的大门了,当然要想可以自由自在的翱翔在音乐的天空路还有很远。在时间和精力允许的情况下你应该继续向那些有过专业音乐培训经验的老师和学生多多的学习,甚至当条件允许以后再走近音乐院校,这些东西都能够成为帮助你的良好引导。 最后祝大家,学习顺利。遇到问题可以随时联系我。Emil-music5000@https://www.360docs.net/doc/c34078580.html,也可以和我在QQ中探讨关于音乐的问题QQ707745155。

键盘扫描原理及应用键盘

本资源为网上搜集而来,如果该程序涉及或侵害到您的版权请立即写信通知我

键盘扫描 键盘是由按键构成,是单片机系统里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人-机通信。 1.按键及键抖动 按键是一种常开型按钮开关。平时,按键的两个触点处于断开状态,按下按键时两个触点才闭合(短路)。如图1-1所示,平常状态下,当按键K未被按下时,按键断开,PA0输入口的电平为高电平;当按键K被按下时,按键闭合,PA0输入口的电平为低电平。 图1-1 按键电路 图1-2 按键抖动 一般的按键所用开关都是机械弹性开关,由于机械触点的弹性作用,按键开

关在闭合时不会马上稳定地连接,在断开进也不会马上完全的断开,在闭合和断开的瞬间均有一连串的抖动。按键按下的电压信号波形图如图1-2所示,从图中可以看出按键按下和松开的时候都存在着抖动。抖动时间的长短因按键的机械特性不同而有所不同,一般为5ms~10ms。 如果不处理键抖动,则有可能引起一次按键被误读成多次,所以为了确保能够正确地读到按键,必须去除键抖动,确保在按键的稳定闭合和稳定断开的时候来判断按键状态,判断后再做处理。按键在去抖动,可用硬件或软件两种方法消除。由于使用硬件方法消除键抖动,一般会给系统的成本带来提高,所以通常情况下都是使用软件方法去除键抖动。 常用的去除键抖动的软件方法有很多种,但是都离不开基本的原则:就是要么避开抖动的时候检测按键或是在抖动的时候检测到的按键不做处理。这里说明一下常用的两种方法: 第一种方法是检测到按键闭合电平后先执行一个延时程序,做一个12ms~24ms的延时,让前抖动消失后再一次检测按键的状态,如果仍是闭合状态的电平,则认为真的有按键按下;若不是闭合状态电平,则认为没有键按下。若是要判断按键松开的话,也是要在检测到按键释放电平之后再给出12ms~24ms的延时,等后抖动消失后再一次检测按键的状态,如果仍为断开状态电平,则确认按键松开。这种方法的优点是程序比较简单,缺点是由于延时一般采用跑空指令延时,造成程序执行效率低。 第二种方法是每隔一个时间周期检测一次按键,比如每5ms扫描一次按键,要连续几次都扫描到同一按键才确认这个按键被按下。一般确认按键的扫描次数由实际情况决定,扫描次数的累积时间一般为50ms~60ms。比如,以5ms为基本时间单位去扫描按键的话,前后要连续扫描到同一个按键11次而达到50ms 来确认这个按键。按键松开的检测方法也是一样要连续多次检测到按键状态为断开电平才能确认按键松开。这种方法的优点是程序执行效率高,不用刻意加延时指令,而且这种方法的判断按键抗干扰能力要更好;缺点是程序结构较复杂。 在以下的介绍中,我们将使用第二种方法来去除键抖动。 2.键盘结构及工作原理 键盘一般有独立式和行列式(矩阵式)两种。当然还有其它的结构,比如交互式结构等等,不过其它的结构比较少用,在这里就不介绍了。在中颖的单片机中,有些单片机的LCD驱动引脚的SEGMENT口可以共享按键扫描口,当选择为按键扫描口时,可以使用这些口来扫描按键,所以在外部电路可以连接LCD和按键矩阵,采用分时扫描进行处理,下面也将介绍这个特殊应用的方法和注意的地方。 独立式键盘结构

相关文档
最新文档