P0tablege送个位段选数据dula0P00xffwela1P00xfdwela0delayms5voiddelaymsui
txms
20201127
f
ui
tij
forixmsi0i
ixms即延时约xms毫秒
forj110j0j
voidi
it初始化函数
TMOD0x01设置定时器0为工作方式100000001
TH06553645872256装初值50ms一次中断
TL06553645872256
EA1开总中断
ET01开定时器0中断
voidkeysca
ifkey10
delayms10
ifkey10
um
if
um60当到60时重新归0
um0
whilekey1等待按键释放
ifkey20
delayms10
ifkey20
if
um0当到0时重新归60
um60
um
whilekey2
ifkey30
delayms10
ifkey30
um0清0
whilekey3
20201127
f
ifkey40
delayms10
ifkey40
whilekey4TR0TR0启动或停止定时器0
voidmai
i
it初始化函数
while1
keysca
display
um
voidT0_timei
terrupt1
TH06553645872256重装初值
TL06553645872256
umt0if
umt020
如果到了20次,说明1秒时间到
umt00
然后把
um清0重新再计20次
um
if
um60
um0
例421实验班上电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示0F,六
个数码管同时静态显示即可。(part22_2cP87)
i
cludereg52h
52系列单片机头文件
defi
eucharu
sig
edchar
defi
eui
tu
sig
edi
t
sbitdulaP26sbitwelaP27
申明U1锁存器的锁存端申明U2锁存器的锁存端
ucharcodetable
0x3f0x060x5b0x4f
20201127
f0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71
voiddelaymsui
txms
ui
tij
forixmsi0i
ixms即延时约xms毫秒
forj110j0j
voiddisplayuchar
um
P0table
um显示函数只送段选数据
dula1
dula0
voidmatrixkeysca
uchartempkey
P30xfe
tempP3
temptemp0xf0
iftemp0xf0
delayms10
tempP3
temptemp0xf0
iftemp0xf0
tempP3
switchtemp
case0xee
key0
break
case0xde
key1
break
case0xbe
key2
break
case0x7e
key3
break
20201127
fwhiletemp0xf0
tempP3temptemp0xf0displaykeyP30xfdtempP3temptemp0xf0iftemp0xf0delayms10tempP3temptemp0xf0iftemp0xf0tempP3switchtempcase0xed
key4breakcase0xddkey5breakcase0xbdkey6breakcase0x7dkey7breakwhiletemp0xf0tempP3temptemp0xf0displaykeyP30xfbtempP3
20201127
ftemptemp0xf0iftemp0xf0
delayms10tempP3temptemp0xf0iftemp0xf0
tempP3switchtemp
case0xebkey8break
case0xdbkey9break
case0xbbkey10break
case0x7bkey11break
whiletemp0xf0
tempP3temptemp0xf0displaykeyP30xf7r