- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实 验 报 告
课程名称 嵌入式系统 实验名称 4x4键盘控制实验
姓 名 王闯 学 号 200907040318 专业班级 软件0903
实验日期 年 月 日 成绩 指导教师 王彩玲
一、实验目的
1 、通过实验掌握中断式键盘控制与设计方法;
2 、掌握中断式键盘检测程序的设计思路;
3 、熟练编写 ARM 核处理器 S3C44B0X 中断程序;
二、实验设备
1 、硬件: EMBEST S3CEV40 实验平台, Embest ARM 标准 / 增强型仿真器套件, PC 机;
2 、软件: Embest IDE 2003 集成开发环境, Windows 98/2000/NT/XP 操作系统。
三、实验内容
使用实验板上 4 × 4 用户键盘,编写程序通过中断的方式读入键值,并在实验板的 LE D
数码管上显示读到的键值。
四、实验原理
键盘接口电路如图所示,板上扩展了一个4×4行列式矩阵键盘接口。该键盘是采用中断扫描的方式进行工作,行线选用了4个数据线,列线选用了4个地址线。行线接上拉电阻保持高电平,并通过与门74HC08将输出信号与MCU的中断EXINT1连接;列线接下拉电阻保持低电平。当有键盘按下时,该行线被拉为低电平,使得EXINT1输入也为低电平,MCU产生中断。中断产生后通过对键盘的行和列进行扫描的方法可以计算出是哪个键按下,并跳到相应的键盘处理程序中去。芯片74HC541是通过片选信号nGCS3来选通的,这样可以保证在键盘不使用的情况下MCU读不到行线的输入信息。
五、实验操作步骤
( 1 )准备实验环境。使用 Embest 仿真器连接目标办,使用 Embest S3CEV40 实验板 附
带的串口线连接实验板上的 UART0 和 PC 机串口。
( 2 )在 PC 机上运行 Windows 自带的超级终端串口通信程序(设置波特率为 115220b/ s,1
各停止位,无校验位,无硬件流控位);或者使用其他的串口通信程序。
( 3 )使用 Embest IDE 并通过 Embest 仿真器连接实验板,打开实验例程目录下
Keyboard_test 子目录中的 Keyboard_Test.ews 例程。编译、连接通过后,连接目标板 ,
下载并运行它。
( 4 )在 PC 上观察超级终端程序主窗口,可以看到如下显示:
Embest 44B0X Evalution Board(S3CEV40)
Keyboard Test Example
Please press one key on keyboard and look at LED...
(5) 用户可以按下实验系统中的 4 × 4 键盘,在 8 段数码管上观察显示结果。
六、实验源程序
1 、变量初始化
硬件使用外部中断 1 ,程序设计可以先进行初始化,例如变量及相关中断控制寄存器 等。
volatile UCHAR *keyboard_base=(UCHAR *)0 // 键盘访问硬件基地址
#define KEY_VALUE_MASK 0x0F? // 初始数据状态
2 、键盘控制初始化
* 函数名称: init_keyboard
* 函数功能: 键盘控制初始化部分
* 参数: 无
* 返回: 无
void init_keyboard()
{
rINTMOD=0x0? //IRQ 模式
rINTCON=0x1? // 允许 IRQ 中断
rINTMSK=~(BIT_GOBAL|BIT_EINT1)? // 开外部中断 EINT1
pISR_EINT=(int)KeyboardInt? // 键盘中断入口函数
/*PORT G/
rPCONG=0xffff? //PG 口配置为 EINT7 ~ 0
rPUPG=0x0? // 上拉使能
rEXTINT=rEXTINT|0x20?//EINT1 // 下降沿有效
rI_ISPC=BIT_EINT1? // 中断清除
rEXTINTPND=0xf? // 清寄存器 EXTINTPND
3 、中断服务程序
/******************************************************************************
* 函数名称: KeyboardInt
* 函数功能: 键盘中断服务程序
* 参数: 无
* 返回: 无
*******************************************************************************
void KeyboardInt(void)
{
int value?
rI_ISPC=BIT_EINT1? // 中断
文档评论(0)