数码管显示矩阵键盘扫描程序r
r
矩阵键盘扫描出键值,在数码管上显示出来r
P0口接数码管的段选码,P2口通过反相器接数r
管的位选码r
r
i
cludereg52h所用的器件是AT89S52r
defi
eucharu
sig
edcharr
r
voiddelaymsucharj声明延时函数r
uchargetkeyvoid声明扫描函数r
voidkeydispuchark声明显示函数r
voiddispucharl声明显示子程序r
r
ucharcodetable0xc00xf90xa40xb00x990x920x82r
0xf80x800x900x880x830xc60xa1r
0x860x8er
共阳数码管0F显示代码r
r
voidmai
void主程序r
r
ucharkeyr
while1r
r
keygetkeyr
delayms20r
keydispkeyr
r
r
r
voiddelaymsucharj延时子程序r
r
uchar
mr
for
0
j
r
r
form0m120m延时时间为1msr
r
r
r
r
uchargetkeyvoid扫描取键值程序r
r
ucharrcodeccoder
P10xf0r
ifP10xf00xf0r
r
delayms20为消除抖动,延时20msr
ifP10xf00xf0r
r
rcode0xfe开始发行扫描信号r
whilercode0x100r
r
P1rcoder
ifP10xf00xf0r
r
ccodeP10xf00x0fr
dowhileP10xf00xf0当松键后显示r
retur
rcodeccode返回扫描代码r
r
elsercodercode10x01此行无键按下,变化行扫描信号r
r
r
r
retur
0无键按下,返回0r
r
r
voidkeydispuchark显示程序r
r
switchkr
r
case0x11disp0breakr
case0x21disp1breakr
case0x41disp2breakr
case0x81disp3breakr
case0x12disp4breakr
case0x22disp5breakr
case0x42disp6breakr
case0x82disp7breakr
case0x14disp8breakr
case0x24disp9breakr
case0x44disp10breakr
case0x84disp11breakr
case0x18disp12breakr
case0x28disp13breakr
case0x48disp14breakr
case0x88disp15breakr
defaultbreakr
r
r
r
voiddispucharl显示子程序r
r
P0tablelr
delayms20r
P20x7f共阳极数码管的位选码r
r
r
r