键盘扫描实验设计报告

合集下载

实验一 矩阵键盘检测

实验一  矩阵键盘检测

实验一矩阵键盘检测一、实验目的:1、学习非编码键盘的工作原理和键盘的扫描方式。

2、学习键盘的去抖方法和键盘应用程序的设计.二、实验设备:51/AVR实验板、USB连接线、电脑三、实验原理:键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。

我们可以通过键盘输入数据或命令来实现简单的人机通信。

1、按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。

前者造价低,后者寿命长.目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。

按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。

编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别.全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。

非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成.由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。

2、按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。

也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。

此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。

当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。

因此,键信息输入是与软件结构密切相关的过程。

对于一组键或一个键盘,通过接口电路与单片机相连.单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。

键盘扫描程序实验报告

键盘扫描程序实验报告

一、实验目的1. 理解键盘扫描的基本原理。

2. 掌握使用C语言进行键盘扫描程序设计。

3. 学习键盘矩阵扫描的编程方法。

4. 提高单片机应用系统的编程能力。

二、实验原理键盘扫描是指通过检测键盘矩阵的行列状态,判断按键是否被按下,并获取按键的值。

常见的键盘扫描方法有独立键盘扫描和矩阵键盘扫描。

独立键盘扫描是将每个按键连接到单片机的独立引脚上,通过读取引脚状态来判断按键是否被按下。

矩阵键盘扫描是将多个按键排列成矩阵形式,通过扫描行列线来判断按键是否被按下。

这种方法可以大大减少引脚数量,降低成本。

本实验采用矩阵键盘扫描方法,使用单片机的并行口进行行列扫描。

三、实验设备1. 单片机开发板(如51单片机开发板)2. 键盘(4x4矩阵键盘)3. 连接线4. 调试软件(如Keil)四、实验步骤1. 连接键盘和单片机:将键盘的行列线分别连接到单片机的并行口引脚上。

2. 编写键盘扫描程序:(1)初始化并行口:将并行口设置为输入模式。

(2)编写行列扫描函数:逐行扫描行列线,判断按键是否被按下。

(3)获取按键值:根据行列状态,确定按键值。

(4)主函数:调用行列扫描函数,读取按键值,并根据按键值执行相应的操作。

3. 调试程序:将程序下载到单片机,观察键盘扫描效果。

五、实验程序```c#include <reg51.h>#define ROW P2#define COL P3void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void scan_key() {unsigned char key_val = 0xFF;ROW = 0xFF; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值}void main() {while (1) {scan_key();if (key_val != 0xFF) {// 执行按键对应的操作}}}```六、实验结果与分析1. 实验结果:程序下载到单片机后,按键按下时,单片机能够正确读取按键值。

矩阵式键盘设计实训报告

矩阵式键盘设计实训报告

一、实验目的1. 掌握矩阵式键盘的工作原理及电路设计方法。

2. 熟悉单片机与矩阵键盘的接口连接及编程技巧。

3. 提高动手实践能力,培养创新意识。

二、实验设备1. 单片机实验平台2. 矩阵键盘模块3. 数字多用表4. 编译器(如Keil51)5. 连接线三、实验原理矩阵键盘是一种常用的键盘设计方式,通过行列交叉点连接按键,从而实现多个按键共用较少的I/O端口。

矩阵键盘通常采用逐行扫描的方式检测按键状态,当检测到按键按下时,根据行列线的电平状态确定按键位置。

四、实验内容1. 矩阵键盘电路设计2. 矩阵键盘编程3. 矩阵键盘测试与调试五、实验步骤1. 电路设计(1)根据矩阵键盘的规格,确定行线和列线的数量。

(2)将行线和列线分别连接到单片机的I/O端口。

(3)在行线上串联电阻,防止按键抖动。

(4)连接电源和地线。

2. 编程(1)初始化单片机的I/O端口,将行线设置为输出,列线设置为输入。

(2)编写逐行扫描程序,逐行拉低行线,读取列线状态。

(3)根据行列线状态判断按键位置,并执行相应的操作。

3. 测试与调试(1)将编写好的程序下载到单片机中。

(2)连接矩阵键盘,观察按键是否正常工作。

(3)使用数字多用表检测行列线电平,确保电路连接正确。

(4)根据测试结果,对程序进行调试,直到矩阵键盘正常工作。

六、实验结果与分析1. 电路连接正确,按键工作正常。

2. 逐行扫描程序能够正确检测按键位置。

3. 按键操作能够触发相应的程序功能。

七、实验总结1. 通过本次实训,掌握了矩阵式键盘的工作原理及电路设计方法。

2. 熟悉了单片机与矩阵键盘的接口连接及编程技巧。

3. 提高了动手实践能力,培养了创新意识。

八、心得体会1. 在实验过程中,遇到了电路连接错误和程序调试困难等问题,通过查阅资料、请教老师和同学,最终成功解决了问题。

2. 本次实训让我深刻体会到理论知识与实际操作相结合的重要性,同时也认识到团队合作的重要性。

九、改进建议1. 在电路设计过程中,可以考虑增加去抖动电路,提高按键稳定性。

键盘 实验报告

键盘 实验报告

键盘实验报告实验报告:键盘引言:键盘是计算机输入设备中最常用的一种设备,用于输入字符、数字、命令等等。

键盘以一定的方式将我们按下的按键转换成计算机可识别的信号,从而实现输入功能。

本实验的目的是了解键盘的工作原理、结构以及使用方法。

实验目的:1. 了解键盘的工作原理;2. 掌握键盘通信协议;3. 掌握键盘的结构和按键布局;4. 学习键盘的使用方法。

实验原理:键盘的工作原理是通过扫描矩阵的方式实现的,常见的键盘为4x4矩阵结构,也有其他规格的矩阵结构。

按键的每一个位置都与键盘电路中的一个电气开关相连接,当按下某个按键时,会导电并向计算机发送信号。

键盘通过PS/2或USB 接口与计算机相连,传输按键的信息。

键盘结构通常包括以下部分:1. 按键:键盘上的每一个按键代表一个字符、数字、命令或功能等。

按键大致分为四个区域:字母区、数字区、符号区和功能区。

2. 电路板:键盘的电路板上连接着按键开关,实现按键的电气连接和信号传输。

3. 导线和线缆:将电路板与接口连接,传递信号。

4. 接口:键盘通过PS/2或USB接口与计算机相连,实现信号的传输。

实验步骤:1. 准备一个计算机和一台键盘,确保键盘的连接正确。

2. 打开计算机,进入操作系统。

3. 在文本编辑器中打开一个文档,用来记录实验结果。

4. 将注意力集中在键盘上,按下键盘上的一个按键,观察文档中的输入情况。

5. 重复步骤4,测试其他按键,记录测试结果。

6. 关闭计算机,结束实验。

实验结果与分析:通过本实验,我们了解到键盘的工作原理是通过扫描矩阵的方式实现的,按键通过电路板中的电气开关与计算机相连,实现键盘输入。

键盘的按键布局通常分为四个区域:字母区、数字区、符号区和功能区。

通过实验测试,我们发现按键输入是可靠的,按下按键时能够正确输入对应的字符或数字。

键盘的使用方法是简单明了的,只需要按下对应的按键即可完成输入。

实验总结:键盘作为计算机最常用的输入设备,广泛应用于各个领域。

按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验设计内容:给8个按键键盘的每个键定义一个功能,从左到右按键一次按下时,分别显示数字1-8,当有两个及以上的按键按下时,显示数字9。

LCD初始显示个人学号,当有按键按下时,最后一位显示对应的数字。

实验程序:#include <reg51.h>sbit key=P0^6; //键盘公共线,见原理图sbit ls1=P0^2; //千位公共极sbit ls2=P0^3; //百位公共极sbit ls3=P0^4; //十位公共极sbit ls4=P0^5; //个位公共极unsigned char keyval; //读取的键值#define Dat P1 //数据输出端char a;char b[4]={0,3,3,0}; //初始值为学号后四位unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时----------------------------Delay(unsigned int t){ while(t--); }//显示----------------------------void Display(unsigned char mun){ unsigned char j;for(j=0;j<50;j++){ Dat=a;Dat=tab[b[0]]; //把得到7段显示码数据送P1端口ls1=0; //点亮千位Delay(100); //显示一会ls1=1; //关闭,显示下一位Dat=tab[b[1]];ls2=0; //点亮百位Delay(100);ls2=1;Dat=tab[b[2]];ls3=0; //点亮十位Delay(100);ls3=1; //个位Dat=tab[b[3]];ls4=0;Delay(100);ls4=1;}}Dat=0xff; //P1恢复为0xff}//--键盘扫描程序-------------------------------------- Scankey(){ unsigned char i;key=0; //拉低键盘公共线if(Dat!=0xff) //有键按下{ Delay(1000); //消抖动if(Dat!=0xff) //有键按下{ i=~Dat;a=Dat; //读取键盘状态,switch(i){ case 0x01: keyval=0x01;break; //K1case 0x02: keyval=0x02;break; //K2case 0x04: keyval=0x03;break; //K3case 0x08: keyval=0x04;break; //K4case 0x10: keyval=0x05;break; //K5case 0x20: keyval=0x06;break; //K6case 0x40: keyval=0x07;break; //K7case 0x80: keyval=0x08;break; //K8default: keyval=0x09;break; } //其它双键按下不处理,均为9 b[3]=b[2];b[2]=b[1];b[1]=b[0];b[0]=keyval;while(Dat!=0xff){key=1; //暂时关闭键盘,不干扰显示Display(keyval); //等待按键抬起key=0; //开启键盘检测}}}key=1; //释放键盘公共线}//--主程序--------------------------------------------------------- main(){while(1){ Display(keyval); //显示Scankey(); //键盘扫描}}。

单片机实验报告实验5行列式键盘实验

单片机实验报告实验5行列式键盘实验

学号姓名专业电气工程及其自动化班级实验5 行列式键盘实验一、实验目的(1)、学习掌握行列式键盘接口方法(2)、学习掌握行列式键盘编程方法。

二、实验内容用单片机P1口接4*4键盘,P0口接共阳数码管,编程实现键字的显示。

P1.0-P1.3为行,P1.4-P1.7为列。

先给端口设处置FEH,相当于给第一行置0,然后分写列值,如果对应的列值为0,说明该行与该列交叉处的键是按下的,接下来扫描第二行,与第一行的操作相同。

这就是行列式键盘扫描原理。

当扫描到某行的键按下时,就退出扫描,然后取键值,再将键值对应的额编码送P0端口显示。

三、实验设备计算机(已安装Keil和Proteus软件)元器件:A T89C51, CAP, CAP-ELEC, CRYSTAL, RES, 7SEG-COM-AN-GRN, RESPACK-7, BUTTON四、实验硬件电路实验源程序:#include<reg51.h>charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x7 1};charkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x 77};char getkey(void){char key_scan[]={0xef,0xdf,0xbf,0x7f};char i=0,j=0;for(i=0;i<4;i++){P1=key_scan[i];if((P1&0x0f)!=0x0f){for(j=0;j<16;j++){if(key_buf[j]==P1)return j;}}}return -1;}void main(void){char key=0;P0=0x00;while(1){key=getkey();if(key!=1)P0=~led_mod[key]; }}五、实验要求(1)、根据实验内容设计相应的调试程序,并通过仿真,运行正确。

小键盘实验报告心得

小键盘实验报告心得

小键盘实验报告心得引言小键盘是一种新型的输入设备,它具有独特的设计和功能,可以方便地输入数字和特殊符号。

在本次实验中,我通过使用小键盘,了解了其工作原理和使用方法,并对其进行了实际操作和测试。

本文将总结我的实验心得和体会,并对小键盘的优缺点进行评价。

实验过程和结果在实验过程中,我首先详细了解了小键盘的结构和工作原理。

小键盘主要由数字键、功能键和控制键组成,使用USB接口与计算机连接。

它工作时,通过电脑上的驱动程序进行配置和映射,使每个按键都能产生对应的输入信号。

在实验中,我使用了Windows系统自带的小键盘驱动程序进行配置。

经过一番设置和调试,我成功地将小键盘与计算机连接并进行了测试。

在测试中,我发现小键盘的响应速度非常快,按键的手感也很舒适,操作起来非常流畅。

同时,小键盘支持多种输入模式,可以通过切换键自由切换输入方式,非常方便实用。

我还测试了小键盘的一些实际应用场景,包括数字输入、计算器模式、游戏操作等。

在数字输入方面,小键盘的数字按键布局合理,操作起来快速准确,比起常规键盘更加高效。

在计算器模式下,小键盘提供了常用的算术运算按键,可以方便地进行简单计算。

在游戏操作方面,小键盘的功能键和控制键的设计非常人性化,能够满足不同游戏的操作需求。

心得体会通过本次实验,我对小键盘有了深入的了解,并受益匪浅。

首先,小键盘的设计十分合理,按键布局和手感都非常优秀,能够提供良好的使用体验。

其次,小键盘的配置和映射功能非常强大,可以根据个人需求进行个性化设置,满足不同用户的需求。

最后,小键盘的多种输入模式和应用场景使其具备了广泛的适用性,既可以用于日常办公,也可以用于游戏娱乐。

小键盘的出现对于数字输入、数据处理和游戏操作等方面都带来了很大的便利。

在数字输入方面,小键盘能够提高输入的速度和准确性,同时也减轻了手腕的负担。

在数据处理方面,小键盘具备快速输入特殊符号和快捷键等功能,能够提高效率。

在游戏操作方面,小键盘的功能键和控制键能够提供更多的操作选项,增强游戏的可玩性。

单片机实验五报告_单片机键盘实验

单片机实验五报告_单片机键盘实验

单片机实验五报告_单片机键盘实验一、实验目的本次单片机键盘实验的主要目的是让我们深入了解单片机与键盘的接口技术,掌握如何通过编程实现对键盘输入的检测和响应,从而提高我们在单片机应用开发中的实际操作能力。

二、实验原理在单片机系统中,键盘通常是作为输入设备使用的。

常见的键盘有独立式键盘和矩阵式键盘两种类型。

独立式键盘是每个按键单独占用一根 I/O 线,其优点是电路简单,编程容易,但缺点是占用较多的 I/O 口资源。

矩阵式键盘则是将按键排列成矩阵形式,通过行线和列线的交叉来识别按键。

这种方式可以有效地节省 I/O 口资源,但电路和编程相对复杂一些。

在本次实验中,我们采用了矩阵式键盘。

其工作原理是通过逐行扫描或者逐列扫描的方式,检测行线和列线的电平状态,从而确定按下的按键。

三、实验设备及材料1、单片机开发板一块2、计算机一台3、编程软件(如 Keil C51)4、下载工具(如 STCISP)四、实验步骤1、硬件连接将矩阵式键盘与单片机的 I/O 口进行连接,注意行线和列线的对应关系。

连接好电源和地线,确保硬件电路正常工作。

2、软件编程打开编程软件,创建一个新的工程。

编写初始化程序,包括设置 I/O 口的工作模式、中断等。

编写键盘扫描程序,通过循环扫描行线和列线的电平状态,判断是否有按键按下。

当检测到按键按下时,根据按键的编码执行相应的操作,如在数码管上显示按键值、控制 LED 灯的亮灭等。

3、编译和下载对编写好的程序进行编译,检查是否有语法错误。

如果编译成功,使用下载工具将程序下载到单片机中。

4、实验调试观察硬件电路的工作状态,看是否有异常现象。

按下不同的按键,检查程序的响应是否正确。

如果出现问题,通过调试工具(如单步调试、断点调试等)查找并解决问题。

五、实验代码以下是本次实验的部分关键代码:```cinclude <reg51h>//定义键盘的行和列define ROW_NUM 4define COL_NUM 4//定义行线和列线的端口sbit ROW1 = P1^0;sbit ROW2 = P1^1;sbit ROW3 = P1^2;sbit ROW4 = P1^3;sbit COL1 = P1^4;sbit COL2 = P1^5;sbit COL3 = P1^6;sbit COL4 = P1^7;//定义按键值的编码unsigned char code KeyCodeMapROW_NUMCOL_NUM ={{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'','0','','D'}};//键盘扫描函数void KeyScan(){unsigned char i, j, temp;unsigned char keyValue = 0;//逐行扫描for (i = 0; i < ROW_NUM; i++){//先将所有行线置高电平ROW1 = ROW2 = ROW3 = ROW4 = 1;//将当前行线置低电平switch (i){case 0: ROW1 = 0; break;case 1: ROW2 = 0; break;case 2: ROW3 = 0; break;case 3: ROW4 = 0; break;}//读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4;//如果有列线为低电平,则表示有按键按下if (temp!= 0xF0){//延迟去抖动delay_ms(10);//再次读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4; if (temp!= 0xF0){//确定按下的按键for (j = 0; j < COL_NUM; j++){if ((temp &(1 << j))== 0){keyValue = KeyCodeMapij;break;}}//执行相应的操作switch (keyValue){case '1'://具体操作break;case '2':break;//其他按键的操作}}}}}//主函数void main(){while (1){KeyScan();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第一章引言 (1)1.1 键盘及LED扩展电路概述 (1)1.2 系统的主要功能 (1)第二章系统的硬件设计 (2)2.1 系统的硬件构成及功能 (3)2.2 主控模板硬件设计 (3)2.3 ARM芯片及引脚说明 (3)2.4 LED数码显示管 (6)2.5 键盘设计 (8)第三章系统的软件设计 (12)3.1 软件总体功能设计 (12)3.2各功能模块软件设计 (16)第四章结束语 (18)致谢 (18)参考文献 (18)附录 (19)第一章引言1.1键盘及LED扩展电路概述键盘及LED扩展电路主要是由74HC164移位寄存器、数码显示管、按键、电阻、电容、导线等构成的。

将8个按键用总线分别与两个74HC164移位寄存器、数码显示管联接起来,两个74HC164移位寄存器联接起来。

一个用来存段码,一个用来存位码。

在没有按键动作时,74HC164 移位寄存器的数据输入端AB(A 和B 作为一个2 个输入端的与门为74HC164 提供数据,在此电路里并联)的输入电平为1,供电路产生移位逻辑时钟脉冲信号的输入端CP也为1 电平。

此时按下键就给了CP 端一个低电平,当键松开后CP端即恢复高电平,于是CP端就得到了一个输入翻转兼移位的低电平脉冲信号.当74HC164得到了一个0 数据的同时输出端Q7~Q0 的数据将全部左移一位。

通过DATA端持续给其传送数据,当装满寄存器后开始循环,而寄存器与数码显示管是相通的,寄存器把对应位的高、低电平传给数码管,使符合条件(段码、位码)的0-9在数码管上显示出来。

1.2系统的主要功能该系统使用前后台的程序编写方法,完成三个基本的功能。

1.任意按下键盘,能在数码显示管上将按下的键对应的十六进制数显示出来图1.1.13. 键盘扫描的流程图如右:系统的硬件设计1.3系统的硬件构成及功能2.1.1 74HC164 移位寄存器在计算机系统中为了高效地实现计算机系统之间的远距离通信,且要使通信电路简单、可靠,则采用串行输入、输出的方式,例如串行口、I2C 和SPI 通信等,甚至当今广泛应用的互联网通信,都采用了这种方式来实现,移位寄存器的作用就是实现并行输入、串行输出或串行输入、并行输出。

图2.1.174HC164 是一种常用的八位串入并出移位寄存器,它的电路原理图及逻辑符号见图2.1.1 所示。

在电路原理图中,8 个D 触发器首尾相接,数据输入端A 和B 通过与门G 接到F1 的输入端作为整个移位寄存器的串行输入,触发器F1~F8 的输出分别为芯片的并行输出Q0~Q7,8 个触发器的时钟输入端连接在一起形成芯片的时钟输入端CP,这样在时钟上升沿的作用下,串行输入数据A·B 逐位从左向右移动。

它的特性表如表 4.19 所示,从表中可以看出若要将八位数据D7~D0 传送到输出Q7~Q0,必须在8 个CP 脉冲的作用下,从D7到D0 逐位送到输入D。

例如将二进制数(11010110)B 串行传送到74HC164 并行输出(Q7 为高位,Q0 为低位),时序图如图2.1.2 所示。

图中横坐标表示时间,纵坐标表示高、低电平,因此波形中串行数据从左至右、由高位Q7(本例为1)至低位Q0(本例为0)输入,在时钟脉冲的作用下,逐位从左至右移位,8 个时钟脉冲过后,二进制数(11010110)B 在Q7~Q0 并行输出。

图中纵向虚线表示相位对准每个CP 脉冲的上升沿;阴影部分表示不必关心这时的状态;方向指向右下方的8 个箭头表示最早输入的1 经过8 次移位到达Q7。

图2.1.2 移位寄存器时序图图中纵向虚线表示相位对准每个CP 脉冲的上升沿;阴影部分表示不必关心这时的状态;方向指向右下方的8 个箭头表示最早输入的1 经过8 次移位到达Q7。

1.4主控模板硬件设计1.EasyARM2103开发板2.74LS164芯片3.8位数码显示管4.引脚芯片5.四脚按键、电阻、电容、发光二极管、跳线若干1.5ARM芯片及引脚说明2.LPC2103芯片(1)引脚图2.3.1 LPC2103引脚(2)元件布局图EasyARM2103开发板的底板与PACK板的元件布局如图2.8、图2.9所示。

图2.3.2 底板元件布局图图2.3.3 PACK板元件布局图1.6LED数码显示管LED数码管分共阳极与共阴极两种,其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。

共阴极LED数码管则与之相反,它是将发光二极管的阴极(负极)短接后作为公共阴极。

当驱动信号为高电平、控制端接低电平时,才能发光。

1. LED封装图图2.4.1LED封装图2.数码管结构数码管由8个发光二极管(以下简称字段)构成,通过不同的合可用来显示数字0~9,字符A~F、H、L、P、R、U、Y等符号及小数点“.”。

数码管又分为共阴极和共阳极两种类型。

3.数码管工作原理共阳极数码管中8个发光二极管的阳极(二极管正端)连接一起,即为共阳极接法,简称共阳数码管。

通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。

当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。

根据发光字段的不同组合可显示出各种数字或字符。

此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

共阴极数码管中8个发光二极管的阴极(二极管负端)连接在一起,即为共阴极接法,简称共阴数码管。

通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。

当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。

同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

4.单片机LED断码表单片机LED共阳极段码表【0-F】DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H[0-7]DB 80H,90H,88H,83H,0c6H,0a1H,86H,8eH[8-F]单片机LED共阴极段码表【0-F】DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H[0-7]DB 7FH,6FH ,77H,7CH,39H,5EH,79H,71H,76H[8-F]为了满足某些特殊用户需要有时也会用到以下特别字符的段码表单片机LED共阳极段码表【HLPRUY-.熄灭】DB 89H,0C7H,8CH,0CEH,0C1H,91H,0BFH,7FH,0FFH [ HLPRUY -.熄灭 ]单片机LED共阴极段码表【HLPRUY-.熄灭】DB 76H,38H,73H,31H,3EH,6EH,40H,80H,00H [ HLPRUY-.熄灭 ]其中 [ HLPRUY-,熄灭 ],这些特殊字符中有些看起来不是很形象,但有时不可避免的会用到.1.7键盘设计图2.5.1 独立式按键原理图图2.5.2 矩阵式按键原理图无论是单片机控制系统还是单片机测量系统,都需要一个人机对话装置,这种人机对话装置通常采用键盘和显示器。

键盘是单片机应用系统中人机对话常用的输入装置,而显示器是单片机应用系统人机对话中的常用输出装置。

键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。

键盘由许多键组成,而每个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。

单片机接收到按键的触点信号后作相应的功能处理。

因此对于单片机系统来说键盘接口信号是输入信号。

单片机的键盘接口分为独立式和矩阵式。

独立式键盘的每个按键都有一个信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个键相互独立互不影响。

如图2.5.1所示,当按下键1时,无论其它键是否按下,键1的信号线就由1变0;当松开键1时,无论其它键是否按下,键1的信号线就由0变1。

矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个按键按下时通过该键将相应的行、列母线连通。

若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。

矩阵式键盘原理图如图2.5.2所示。

针对以上两大类键盘工作方式,单片机又有三种键盘扫描方式:查询方式;定时扫描方式和中断扫描方式。

查询方式是指在程序中用一段专门的扫描和读按键程序不停查询有无按键按下,确定键值。

这种方式电路简单,但需要占用单片机的机器时间。

定时扫描方式是指利用单片机内的定时器来产生定时中断,然后在定时中断的服务程序中扫描,检查有无按键按下,确定键值。

这种方式的电路也比较简单,不占用单片机的机器时间,但需要占用一个定时器,同时定时的时间不能过长,否则可能检测不到相应得按键。

中断扫描方式是指当有键按下时由相应的硬件电路产生中断信号,单片机在中断服务程序中扫描,检查有无按键按下,确定键值。

这种方式硬件电路上必须要产生中断线,需要与门和非门来产生。

但中断方式不占用单片机的机器时间,也不会出现定时方式时的检测不到键盘的情况。

系统的软件设计1.8软件总体功能设计/******************************************************************** **************************************程序名称:SPI驱动键盘板(按键显示键的编号)**所用芯片:ARM2103**引脚设置:P0.4为SPI的CLK(时钟线);P0.5为GPIO输入;P0.6为SPI的MOSI(数据传输线)**功能描述:按下键盘板上的一个键,就在8个数码管上都显示它的编号**程序作者:张会**编写日期:2010年11月16日********************************************************************* ***********************************/#define key (1<<5)#include "config.h"uint8 data[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};//段码表uint8 bit[ ]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位码表uint32 Flags=FALSE;char i=0; //位码循环变量char whichkeydown=8; //标志哪一个键按下了,0~7号键。

/******************************************************************** ********** delay延时函数 delay(1000000)防抖效果最好********************************************************************* *******/void delay(uint32 time){while(time>0){time--;}}/********************************************************************************/void __irq Timer0ISR(void){Flags=TRUE;T0IR=0x01;VICVectAddr=0x00;}/******************************************************************** **********/void Timer0Init(void){T0TCR=0x02; //TC复位T0PR=0x00; //不分频T0MCR=0x03; //MR0匹配时,发生中断和TC复位T0MR0=Fpclk/400; //25msT0IR=0x01;//中断设置VICIntSelect&=~(1<<4);VICVectCntl0=0x20|4;VICVectAddr0=(uint32)Timer0ISR;VICIntEnable=1<<4;T0TCR=0x01; //启动timer0}/******************************************************************** ******************************************************************************* *******/void SPIInit(void){SPI_SPCCR=0x08; //设置传输速率,此处设为最大速率Fpclk/8SPI_SPCR=SPI_SPCR&(0<<2) //每次传送的数据由8~11位设置|(1<<3) //起始和结束:数据在SCK第二个时钟沿采样|(1<<4) //时钟极性控制:SCK低有效|(1<<5) //选择为主模式&(~(1<<6)) //设置为数据传送时高位在先【高位在先是键盘板使用模式,由74HC164移位寄存器特点决定的】|(0<<7); //SPI中断使能}/******************************************************************** ******************************************************************************* *******/void SendData(uint8 number){SPI_SPDR=number; //传送的数据A内容(段码)IOCLR=1<<7;while((SPI_SPSR & (1<<7))==0); //等待传送结束(SPI_SPSR第七位置1时表示传送结束)IOSET=1<<7;}/******************************************************************** ********** main函数*********************************/int main (void){PINSEL0=PINSEL0 &(~(0x03<<8))|(1<<8) //设置P0.4为SPI的CLK(时钟线)&(~(1<<10)) //设置P0.5为GPIO&(~(0x03<<12))|(1<<12); //设置P0.6为SPI的MOSI(数据传输线)PINSEL0&=~(0x03<<14);IODIR|=1<<7;PINSEL1&=~(0x03<<2);IODIR|=1<<17;IOSET=1<<17;Timer0Init( );IRQEnable( );while(1){if(TRUE==Flags){Flags=FALSE; //清零SendData(data[i]);SendData(bit[i]);if((IO0PIN&(1<<5))==0){whichkeydown=i;}else{if(whichkeydown==6) //按下6号键,点亮灯{whichkeydown=8;IOCLR=1<<17;}}i=(i+1)%8;}}return 0;}/**************************文件结束********************************/1.9各功能模块软件设计1.delay延时函数功能:用来防止键盘抖动 [delay(1000000)键盘防抖效果最好]相关知识:如果不处理键抖动,则有可能引起一次按键被误读成多次,所以为了确保能够正确地读到按键,必须去除键抖动,确保在按键的稳定闭合和稳定断开的时候来判断按键状态,判断后再做处理。

相关文档
最新文档