实验报告书6
- 格式:docx
- 大小:26.75 KB
- 文档页数:8
电子信息学院
实验报告书
课程名: 《嵌入式系统与应用 》
题 目: 5×4键盘控制实验
班 级:
学 号:
姓 名:
实验时间
评语:
学习态度:【很好】 【一般】 【较差】
程序编写:【完整】 【部分完整】 【不完整】
得出结论:【正确】 【部分正确】 【不正确】
报告书写:【规范】 【一般】 【不规范】
成绩: 指导教师: 李健
批阅时间: 年 月 日 《 嵌入式系统与应用 》实验报告 - 1 -
1、实验内容
使用实验板上5x4 用户键盘,编写程序接收键盘中断。
通过IIC 总线读入键值,并将读到的键值发送到串口。
2、实验目的与要求
通过实验掌握键盘控制与设计方法。
熟练编写ARM 核处理器S3C44B0X 中断处理程序
3、实验步骤与源程序
⑴ 实验步骤
⑵ 源代码
/*********************************************************************************************
* File: 8led.c
* Author: embest
* Desc: 8-segment digit LED control functions
* History:
*********************************************************************************************/
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "iic.h"
/*------------------------------------------------------------------------------------------*/
/* global variables
*/
/*------------------------------------------------------------------------------------------*/
int f_nKeyPress;
《 嵌入式系统与应用 》实验报告 - 2 -
/*------------------------------------------------------------------------------------------*/
/* function declare
*/
/*------------------------------------------------------------------------------------------*/
void keyboard_test(void);
void keyboard_int(void);
UINT8T key_set(UINT8T ucChar);
/*********************************************************************************************
* name: keyboard_test
* func: test 8led
* para: none
* ret: none
* modify:
* comment:
********************************************************************************************/
void keyboard_test(void)
{
int i, j, k;
UINT8T ucChar, t;
iic_init();
// set EINT2 interrupt handler
pISR_EINT2 = (int)keyboard_int;
for(;;)
{
f_nKeyPress = 0;
rINTMSK = rINTMSK & (~(BIT_GLOBAL|BIT_EINT2)); // enable EINT2 int
while(f_nKeyPress == 0);
iic_read(0x70, 0x1, &ucChar);
if(ucChar !=0)
{ 《 嵌入式系统与应用 》实验报告 - 3 -
ucChar = key_set(ucChar);
if(ucChar==0)
led1_on();
if(ucChar==1)
led2_on();
if(ucChar==2)
led3_on();
if(ucChar==3)
led4_on();
if(ucChar < 10) ucChar += 0x30;
else if(ucChar < 16) ucChar += 0x37;
if(ucChar < 255)
uart_printf("press key %c\n", ucChar);
if(ucChar == 0xFF)
{
uart_printf(" press key FUN (exit now)\n\r");
return;
}
}
}
while(1);
}
/*********************************************************************************************
* name: keyboard_int
* func: keyboard interrupt handler
* para: none
* ret: none
* modify:
* comment:
********************************************************************************************/
void keyboard_int(void)
{ 《 嵌入式系统与应用 》实验报告 - 4 -
UINT8T ucChar;
delay(1000);
rINTMSK = rINTMSK | BIT_EINT2; // disable EINT2 int
rI_ISPC = BIT_EINT2;
f_nKeyPress = 1;
}
/*********************************************************************************************
* name: key_set
* func: keyboard setting
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
UINT8T key_set(UINT8T ucChar)
{
switch(ucChar)
{
case 1:
case 2:
case 3:
case 4:
case 5:
ucChar-=1; break;
case 9:
case 10:
case 11:
case 12:
case 13:
ucChar-=4; break;
case 17:
case 18:
case 19:
case 20:
case 21: 《 嵌入式系统与应用 》实验报告 - 5 -
ucChar-=7; break;
case 25: ucChar = 0xF; break;
case 26: ucChar = '+'; break;
case 27: ucChar = '-'; break;
case 28: ucChar = '*'; break;
case 29: ucChar = 0xFF; break;
default: ucChar = 0xFE;
}
return ucChar;
}
/*********************************************************************************************
* File: main.c
* Author: embest
* Desc: c main entry
* History:
*********************************************************************************************/
#include "44blib.h"
#include "44b.h"
/*------------------------------------------------------------------------------------------*/
/* extern function
*/
/*------------------------------------------------------------------------------------------*/
extern void keyboard_test();