将矩阵式键盘行扫描法程序中求取键值部分内容写成函数形式,在主程序中进行调用得到键值?

将矩阵式键盘行扫描法程序中求取键值部分内容写成函数形式,在主程序中进行调用得到键值?,第1张

/*按键扫描函数*/

void keyScan(void)

{

//P3=0x00

col1=0col2=1col3=1col4=1

temp=P2&0x3f

if(col1==0) //假设第一列有按键

{

if(temp!=0x3f) //没有按键退出这次对第一列键盘扫描

{

temp=P2&0x3C // 3CH=00111100,目的是先把P2.2、P2.3、P2.4、P2.5 这中间四位先置1,即预读先置1,做好输入的准备

switch(temp)

{

case 0x38: key=12 break

// 38H=00111000,只看中间四位,其中只有P2.2=0,代表第4行第1列为低电平,所在键值恰好是12(即C)

case 0x34:key=8break

// 34H=00110100,只看中间四位,其中只有P2.3=0,代表第3行第1列为低电平,所在键值恰好是8

case 0x2C:key=4break

// 2CH=00101100,只看中间四位,其中只有P2.4=0,代表第2行第1列为低电平明迹,所在笑判键值恰好是4

case 0x1C:key=0break

//碰槐改 1CH=00011100,只看中间四位,其中只有P2.5=0,代表第0行第1列为低电平,所在键值恰好是0

}

}

}

col1=1col2=0col3=1col4=1

temp=P2

temp=temp&0x3f

if(col2==0)

{

if(temp!=0x3f)

{

temp=P2&0x3C

switch(temp)

{

case 0x38: key=13break//’0’键被按下时导通,则对应端口变为低电平

case 0x34:key=9break

case 0x2C:key=5break

case 0x1C:key=1break

}

}

}

col1=1col2=1col3=0col4=1

temp=P2

temp=temp&0x3f

if(temp!=0x3f)

{

temp=P2&0x3C

switch(temp)

{

case 0x38: key=14break//’0’键被按下时导通,则对应端口变为低电平

case 0x34:key=10break

case 0x2C:key=6break

case 0x1C:key=2break

}

}

col1=1col2=1col3=1col4=0

temp=P2

temp=temp&0x3f

if(temp!=0x3f)

{

temp=P2&0x3C

switch(temp)

{

case 0x38: key=15break//’0’键被按下时导通,则对应端口变为低电平

case 0x34:key=11break

case 0x2C:key=7break

case 0x1C:key=3break

}

}

}

while(1) 里面,你不拆耐按的时候n一直等于0xff,如果你的数码管是共阴的,那瞎御数肯定一直亮的磨首,default:return 0xffbreak 改成 default:return 0break就可以


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8216267.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存