i
cludereg51h
defi
eucharu
sig
edchar
defi
eui
tu
sig
edi
t
ucharcode_hcode_l
定义行扫描码,列检测数据
uchartmpkeyvalue
定义接收键值
函数说明
voiddelayvoid
ucharkeysca
主函数
voidmai
键值处理
while1
tmpkeysca
调用键盘扫描程序
switchtmp
case0x11P00x3fbreak
0
case0x12P00x06break
1
case0x14P00x5bbreak
2
case0x18P00x4fbreak
3
case0x21P00x66break
4
case0x22P00x6dbreak
5
case0x24P00x7dbreak
6
case0x28P00x07break
7
case0x41P00x7fbreak
8
case0x42P00x67break
9
case0x44P00x77break
a
case0x48P00x7cbreak
b
case0x81P00x39break
c
case0x82P00x5cbreak
d
case0x84P00x79break
e
case0x88P00x71break
f
case0x00break
defaultP00x00
delay
延时函数
voiddelayvoid
uchari
fori0i200i
键盘扫描函数
ucharkeysca
void
fucharcode_hucharcode_lP10XF0ifP10XF00XF0下delayifP10XF00XF0按下code_h0XFEwhilecode_h0X100XF0P1code_hifP10XF00XF0按下code_lP10XF00X0F为列值
keyvaluecode_hcode_lretur
keyvaluewhileP10XF00XF0elsecode_hcode_h10X01retur
0x00
行扫描列扫描
P10P13置0,准备读列状态如果P14P17不全为1,可能有键按
延时消抖动重读高4位,若还是不全为1,定有键
P10置为0,开始行扫描判断是否为最后一行,否则继续扫描P1口输出行扫描值如果P14P17不全为1,该行有按键
保留P1口高4位,低4位变为1,作
键编码行扫描值列扫描值,返回主程序
等待按键释放
该行没按键按下,左移,扫描下一行
无按键按下,返回0
fr