资源描述
《嵌入式系统》课程实验报告 2015年春季
《嵌入式系统》课程实验报告
所在班级:
指导教师:
记分及评价:
项目满分
5分
得 分
一、 实验名称
键盘模块控制实验
二、 实验目的
通过实验掌握键盘控制与设计方法;熟练编写IIC通信处理程序。
三、 实验内容
实验实验板上5*3用户键盘,编写程序读取键盘控制芯片寄存器值;通过IIC总线读入键值,并将读到的键值发达到串口。
四、 实验原理
(1)5*3键盘连接电路
(2)键盘控制电路
(3)工作过程:键盘动作由芯片ZLG7290检测,当键盘按下时,ZLG7290系统寄存器的最低位keyAvi置1,CPU通过IIC总线读取芯片ZLG7290键值寄存器(01)中的键值。
五、 实验结果
按下按键时,超级终端上显示以下信息:
六、 练习题
编写程序实现密码锁功能。
#include "2410lib.h"
void keyboard_test(void);
void __irq keyboard_int(void);
UINT8T key_set(UINT8T ucChar);
extern void iic_write_keybd(UINT32T unSlaveAddr, UINT32T unAddr, UINT8T ucData);
extern void iic_read_keybd(UINT32T unSlaveAddr, UINT32T unAddr, UINT8T *pData);
extern void iic_init_keybd(void);
UINT32T g_nKeyPress;
void keyboard_init(void)
{
iic_init_keybd();
}
void keyboard_test(void)
{
UINT8T ucChar,i;
char cInput[256],key[5],flag=0;
UINT8T ucInNo=0;
UINT32T g_nKeyPress;
char c;
uart_printf(" 设置初始密码:\n");
g_nKeyPress = 1;
while(g_nKeyPress==1) // only for board test to exit
{
c=uart_getch();
uart_printf("%c",c);
if(c!='\r')
cInput[ucInNo++]=c;
else
{
cInput[ucInNo]='\0';
break;
}
}
uart_printf("\n Keyboard Test Example\n");
keyboard_init();
while(1)
{
for(i=0;i<6;i++) // Wait until one key was pressed
{
while(1)
{
iic_read_keybd(0x70, 0x00, &ucChar);
if(ucChar & 0x01)
break;
}
iic_read_keybd(0x70, 0x1, &ucChar); // Get data from Key(register of ZLG7290)
if(ucChar != 0)
{
ucChar = key_set(ucChar); // Key map for EduKitIV
if(ucChar < 10) ucChar += 0x30;
else if(ucChar < 15) ucChar += 0x37;
uart_printf("You have pressed key %c\n ", ucChar);
}
key[i]=ucChar;
}
for(i=0;i<6;i++)
{if(cInput[i]==key[i])
flag++;
}
if(flag==6)
uart_printf("输入正确 ");
else
uart_printf("输入错误:");
flag=0;
}
}
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:
ucChar-=7; break;
default: ucChar = 0;
}
return ucChar;
}
展开阅读全文