DSP-矩阵键盘扫描实验

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

班级学号姓名同组人

实验日期室温大气压成绩

实验五矩阵键盘扫描实验

一、实验目的

1、掌握键盘信号的输入,DSP I/O的使用;

2、掌握键盘信号之间的时序的正确识别和引入。

二、实验设备

1、一台装有CCS2000软件的计算机;

2、插上2812主控板的DSP实验箱;

3、DSP硬件仿真器。

三、实验原理

实验箱上提供一个 4 * 4的行列式键盘。TMS320F2812的8个I / O口与之相连,这里按键的识别方法是扫描法。

当有键被按下时,与此键相连的行线电平将由此键相连的列线电平决定,而行线的电平在无法按键按下时处于高电平状态。如果让所有的列线也处于高电平,那么键按下与否不会引起行线电平的状态变化,始终为高电平。所以,在让所有的列线处于高电平是无法识别出按键的。现在反过来,让所有的列线处于低电平,很明显,按键所在的行电平将被拉成低电平。根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按下。假如是5键按下,为了进一步判定是哪一列的按键被按下,可在某一时刻只让一条列线处于低电平,而其余列线处于高电平。那么按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。

模块说明:

此模块共有两种按键,KEY1—KEY4是轻触按键,在按键未按下时为高电平输入FPGA,当按键按下后对FPGA输入低电平,松开按键后恢复高电平输入,

KEY5—KEY8是带自锁的双刀双掷开关,在按键未按下时是低电平,按键按下时为高电平并且保持高电平不变,只有再次按下此按键时才恢复低电平输入。每当按下一个按键时就对FPGA就会对此按键进行编码,KEY1—KEY8分别对应的是01H、02H、03H、04H、05H、06H、07H、08H。在编码的同时对DSP产生中断INT1,这个时候DSP就会读取按键的值,具体使用方法可以参考光盘例程key,prj。

实验流程图:

1、把2812 模块小板插到大板上;打开液晶模块的电源开关;

2、按下键盘按键,液晶会显示所按键的号码。

3、设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行

4、启动Code Composer Studio 2.21选择菜单Debug→Reset CPU。

5、打开工程文件打开本实验的工程编译Example_key.prj,浏览Example_key.c文件的内容,理解各语句作用。

6、编译并下载程序,生成输出文件.OUT,通过仿真器把执行代码下载到DSP 芯片;

7、运行,按下键盘按键,液晶会显示所按键的号码。

五、实验结果

实验现象如下图所示:

通过本次CCS环境下矩阵键盘扫描LCD显示的仿真实验,让我了解并熟悉了CCS软件的安装和调试方法,DSP实验箱下载调试的步骤以及CCS环境下的DSP的C语言程序编写方法,对于12864液晶模块控制程序的编写和矩阵键盘的信号识别原理也有了更深的认识,对今后DSP的进一步学习奠定了应用基础。

运行程序后,在按下键盘上的按键时,会显示相对应的键号(键号为:0-9、A-D、#、* 共十六的键号),其显示是通过液晶显示器显示出来,显示格式为:“key is X”。通过本次实验使我了解KEY轻触按键的按键扫描及消除按键的机械抖动方法,4*4矩阵键盘的设定及其IO口的配置方式,进一步掌握用C语言编写DSP程序的方法,及编译、除错能力。

附页:实验原程序代码

#include "include/DSP281x_Device.h" // DSP281x Headerfile Include File #include "include/DSP281x_Examples.h" // DSP281x Examples Include File unsigned short key,keyvalue;

unsigned char nAsciiDot[] = // ASCII

{ //********************** };//ASCII字模的数据表-

void Gpio_select(void);

void delay(int time)

{ int i,j;

for(i=0;i

for(j=0;j<1200;j++);}

void wcom(unsigned char com)

{ Reg08=com; }

void wdata(unsigned char dat)

{ Reg07=dat; }

void lcdinit(void)

{ wcom(0xa4);

wcom(0xad);

wcom(0x03);

wcom(0xac);

wcom(0xe2); //initialize interal function

delay(10);

wcom(0xa2); //set nomal display

wcom(0xa0); //ADC select SEG1 to SEG132

wcom(0xc8); //set SHL COM1 to COM64 start page setup

wcom(0x2c); //power control(VB,VR,VF=1,1,1)

wcom(0x2e); //power control(VB,VR,VF=1,1,1)

wcom(0x2f); //power control(VB,VR,VF=1,1,1)

wcom(0x25); //

wcom(0x81); //set reference voltage mode

wcom(0x20); //set reference voltage

wcom(0x40); //Initial Display Line was first line

wcom(0xa6); //set nomal display

wcom(0xa4); //set nomal display

wcom(0xaf); //display on}

void clear(void)

{ unsigned char page;

unsigned char seg;

for(page=0xb0;page<0xb9;page++) //写页地址共页

0xb0----0xb8

{ wcom(page);

wcom(0x10);

wcom(0x00);

相关文档
最新文档