嵌入式实验报告
键盘实验报告
指导教师:高金山
实验者:13410801 房皓13410802 张耀荣
一、实验目的:
1.了解直接输入键盘与矩阵键盘的原理
2.了解键盘寄存器的功能
3.掌握键盘输入的编程方法
二、实验要求:
1.对所有16个按键进行编码,当按键后,在七段数码管上显示对应的键盘编码。
(可
以使用一个或两个七段数码管)
2.对所有16个按键进行编码,当按键后,在八个LED上显示对应的键盘编码。
三、实验内容:
1.在键盘寄存器KPC中,使能矩阵键盘,
2.必须在使用前添加下面语句:
#define KAPS_VALUE (*((volatile unsigned char *)(0x41500020)))
3.接下来在button_statusFetch函数中定义变量,其中j用来获取矩阵键盘的键值,
具体如下:
char j = 0;
j = KAPS_VALUE ;
4.最后,在直入键盘的分支语句后添加矩阵键盘的分支代码段,即switch(j){}代码
段:
switch (j)
{
case 0x00: //key-press 5
kbd_buff=0x8F12;
LED_CS2 = kbd_buff;
Delay(400);
break;
……
四、程序编辑:
;post_initGpio.s
EXPORT post_initGpio
AREA post_initGpio ,CODE ,READONLY
ldr r1,=0x40e00000
;GPSR0
MOV R0,#0x3000 ;GPIO<13:12>
STR R0,[R1,#0x18]
;GPCR0
MOV R0,#0x800 ;GPIO<11>
STR R0,[R1,#0x24]
;GAFR0_L////////////////////////////////////////////////// MOV R0,#0x80000000 ;GPIO<15>:F2:nCS1 STR R0,[R1,#0x54]
;GAFR0_U
ldr R0,=0x10 ;0xa5000010
STR R0,[R1,#0x58]
;GPDR0///////////////////////////////////////////////// ldr R0,=0xc1a08000 ;GPIO<15>:nCS1
STR R0,[R1,#0xc]
;GPSR1
MOV R0,#0
STR R0,[R1,#0x1c]
;GPCR1
MOV R0,#0
STR R0,[R1,#0x28]
;GAFR1_L
LDR R0,=0xc9c ;0xa9558
STR R0,[R1,#0x5c]
;GAFR1_U
LDR R0,=0xca0 ;0xaaa590aa
STR R0,[R1,#0x60]
;GPDR1
LDR R0,=0xca4 ;0xfccf0382
STR R0,[R1,#0x10]
;GPSR2
MOV R0,#0x10000
STR R0,[R1,#0x20]
;GPCR2
MOV R0,#0
STR R0,[R1,#0x2c]
;GAFR2_L////////////////////////////////////
ldr R0,=0xa0000000 ;0xaaaaaaaa ;GPIO<79:78>:nCS<3:2> STR R0,[R1,#0x64]
;GAFR2_U/////////////////////////////////////////
ldr R0,=0x50000400
;0x50090402 ;GPIO<95:94,80>:KP_DKIN<1>,KP_DKIN<2>,nCS4 STR R0,[R1,#0x68]
;GPDR2///////////////////////////////////////////
ldr R0,=0x0221ffff ;GPIO<80:78>:nCS<4:2>
STR R0,[R1,#0x14]
; LDR R0,=0xca8
; STR R0,[R1,#0x68]
;GPSR3
MOV R0,#0x20000
STR R0,[R1,#0x118]
;GPCR3
MOV R0,#0
STR R0,[R1,#0x124]
;GAFR3_L////////////////////////////////////////////// ldr R0,=0x020a95c3 ;GPIO<108,105:98>
STR R0,[R1,#0x6c]
;GAFR3_U
ldr R0,=0x1408
STR R0,[R1,#0x70]
;GPDR3////////////////////////////////////////////////// ldr R0,=0x21381;GPIO<108,105:103>
STR R0,[R1,#0x10c]
;config twice:
;GAFR0_U
ldr R0,=0xa5000010 ;0x0x10
STR R0,[R1,#0x58]
;GAFR1_L
LDR R0,=0xa9558 ;0xc9c
STR R0,[R1,#0x5c]
;GAFR1_U
LDR R0,=0xaaa590aa ;0xca0
STR R0,[R1,#0x60]
;GPDR1
LDR R0,=0xfccf0382 ;0xca4
STR R0,[R1,#0x10]
;GAFR2_L///////////////////////////////////////////////////
ldr R0,=0xa0000000 ;GPIO<79:78>:nCS<3:2>
STR R0,[R1,#0x64]
;GAFR2_U/////////////////////////////////////////////////////////////// ////////
ldr R0,=0x50090402
;GPIO<95:94,80>:KP_DKIN<1>,KP_DKIN<2>,nCS4
STR R0,[R1,#0x68]
mov pc,r14
END
;post_initKey.s
EXPORT post_initKey
AREA post_initKey, CODE, READONLY
nop
nop
ldr r1,=0x41500000
;KPC
ldr r0,=0x3FAFF1C2 ; (0x2FAFF9C3:interrupt)
str r0,[r1,#0x0]
;KPDK
; ldr r0,=0x1
; str r0,[r1,#0x8]
; ;KPREC
; ldr r0,=0x1
; str r0,[r1,#0x10]
;KPMK
; ldr r0,=0x1
; str r0,[r1,#0x18]
;KPAS
; ldr r0,=0x1
; str r0,[r1,#0x20]
; ldr r0,=0x1
; str r0,[r1,#0x0]
;KPKDI
ldr r0,=0x707
str r0,[r1,#0x48]
mov pc,r14
END
五、实验结果:
当按下键盘上的按键时,七段数码管可以显示出对应的编码
六、实验总结:
通过本次实验,我锻炼了自己的动手操作能力,加强了对理论知识的了解,并对ARM实验箱的使用有了初步的了解。
对ARM实验箱的键盘的工作方式有了初步的认识。