}
结果:
在每个数码管上递增显示0-9。
五、实验分析及总结
本实验中,数码管采用共阳极类型,所以是给0亮,操作时,先给地址0x20007000的某位给0,让指定的某位亮,然后给地址0x20006000送入编码好的数据,即seg7table,以此来实现让数码管显示指定的数。
实验二键盘输入实验
一、实验目的
1、学习键盘驱动原理;
2、掌握通过CPU的I/O扩展键盘的方法。
二、实验仪器
JXARM9-2440教学实验箱、ADT1000仿真器和ADTIDE集成开发环境、PC机、串口连接线。
三、实验原理
1.键盘实现方案
1)采用专门的芯片实现键盘扫描
2)采用软件实现键盘扫描
2.软键盘实现方案
当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低到逻辑0。
3.按键抖动
开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。
尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。
当触点闭合时,其弹起就像一个球。
弹起效果将产生如下图所示的好几个脉冲。
弹起的持续时间通常将维持在5ms~30ms之间。
4.矩阵键盘电路
1)一个瞬时接触开关(按钮)放置在每一行与每一列的交叉点。
每一行由一个输出端口的一位驱动,每一列由一个电阻器上拉且供给输入端口一位。
2)键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。
3)一旦处理器判定有一个键按下,键盘扫描软件将过滤掉抖动并且判定哪个键被按下。
4)每个键被分配一个称为扫描码的唯一标识符。
应用程序利用该扫描码,根据按下的键来判定应该采取什么行动,换句话说,扫描码将告诉应用程序按下哪个键。
5.键盘扫描算法
1)初始化:
所有的行(输出端口)被强行设置为低电平。
2)在没有任何键按下时,所有的列(输入端口)将读到高电平。
3)任何键的闭合将造成其中的一列变为低电平。
4)一旦检测到有键被按下,就需要找出是哪一个键。
过程很简单,微处理器只需在其中一行上输出一个低电平。
如果它在输入端口上发现一个0值,微处理器就知道在所选择行上产生了键的闭合。
6.一旦检测到有键被按下,就需要找出是哪一个键。
过程很简单,微处理器只需在其中一行上输出一个低电平。
如果它在输入端口上发现一个0值,微处理器就知道在所选择行上产生了键的闭合
JXARM9-2440具有4×4的软键盘。
原理图如下:
四、实验内容、步骤、程序、结果
1.获取按键值,在串口显示。
1)参照模板工程key(modules\key\key.apj),新建一个工程key,添加相应的文件,并修改key的工程设置;
2)创建main.c并加入到工程key中;
3)按照实验内容编写相应程序;
4)编译key;
5)下载程序并运行,按键看串口是否有显示;看数码管是否输出相应键值。
程序如下:
/*包含文件*/
#include"def.h"
#include"2410lib.h"
#include"option.h"
#include"2410addr.h"
#include"interrupt.h"
/********************************************************************
//Functionname:
Main
//Description:
JXARM9-2410键盘实验主程序
//实现功能:
//Returntype:
void
//Argument:
void
*********************************************************************/
voidMain(void)
{
/*配置系统时钟*/
ChangeClockDivider(2,1);
U32mpll_val=0;
mpll_val=(92<<12)|(1<<4)|
(1);
ChangeMPllValue((mpll_val>>12)&0xff,(mpll_val>>4)&0x3f,mpll_val&3);
/*初始化端口*/
Port_Init();
/*初始化串口*/
Uart_Init(0,115200);
Uart_Select(0);
/*打印提示信息*/
PRINTF("\n---键盘测试程序---\n");
PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200,8,N,1)\n");
/*开始回环测试*/
while
(1)
{
unsignedcharch;
ch=Key_GetKeyPoll();//TODO
//获取键值
if(ch!
=0)
{
PRINTF("\r'%c'键按下",ch);
}
}
}
结果:
在串口显示键盘输入的对应值
2.使按键按照如下表的顺序显示出来。
步骤同上。
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
修改的程序如下(此处仅需修改keyboard.c中的部分地方):
charkey_get_char(introw,intcol)
{
charkey=0;
switch(row)
{
case0:
if((col&0x01)==0)key='9';
elseif((col&0x02)==0)key='5';
elseif((col&0x04)==0)key='1';
elseif((col&0x08)==0)key='D';
break;
case1:
if((col&0x01)==0)key='8';
elseif((col&0x02)==0)key='4';
elseif((col&0x04)==0)key='0';
elseif((col&0x08)==0)key='C';
break;
case2:
if((col&0x01)==0)key='7';
elseif((col&0x02)==0)key='3';
elseif((col&0x04)==0)key='F';
elseif((col&0x08)==0)key='B';
break;
case3:
if((col&0x01)==0)key='6';
elseif((col&0x02)==0)key='2';
elseif((col&0x04)==0)key='E';
elseif((col&0x08)==0)key='A';
break;
default:
break;
}
returnkey;
}
结果:
按键按照表中的顺序显示出来。
3.将键盘按键值在数码管上显示。
步骤如上。
程序如下:
/*包含文件*/
#include"def.h"
#include"2410lib.h"
#include"option.h"
#include"2410addr.h"
#include"interrupt.h"
#defineU8unsignedchar
unsignedcharseg6table[16]={
/*01234567*/
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
/*89ABCDEF*/
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
};
/********************************************************************
//Functionname:
Main
//Description:
JXARM9-2410键盘实验主程序
//实现功能:
//Returntype:
void
//Argument:
void
*********************************************************************/
voidMain(void)
{
/*配置系统时钟*/
ChangeClockDivider(2,1);
U32mpll_val=0;
mpll_val=(92<<12)|(1<<4)|
(1);
ChangeMPllValue((mpll_val>>12)&0xff,(mpll_val>>4)&0x3f,mpll_val&3);
/*初始化端口*/
Port_Init();
/*初始化串口*/
Uart_Init(0,115200);
Uart_Select(0);
/*打印提示信息*/
PRINTF("\n---键盘测试程序---\n");
PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200,8,N,1)\n");
/*开始回环测试*/
while
(1)
{
unsignedcharch;
ch=Key_GetKeyPoll();//TODO
//获取键值
if(ch!
=0)
{
PRINTF("\r'%c'键按下",ch);
//数码管显示
*((U8*)0x20007000)=0x3e;
if(ch>='0'&&ch<='9')
{
ch=ch-48;
*((U8*)0x20006000)=seg6table[ch];
}
if(ch>='A'&&ch<='F')
{
ch=ch-55;
*((U8*)0x20006000)=seg6table[ch];
}
}
}
}
结果:
数码管上显示出对应的按键值。
五、实验分析及总结
按键的程序可以根据自己的需求修改,也可改变行列,让输入值不同。
本实验中按键的读取是通过Key_GetKeyPoll()来实现的。
实验三中断实验
一、实验目的
1、了解中断的作用;
2、掌握嵌入式系统中断的处理流程;
3、掌握ARM中断编程。
二、实验仪器
JXARM9-2440教学实验箱、