单片机I⼀O口高四位和低四位的问题(不知如何表达。。)

2025-03-20 03:02:01
推荐回答(1个)
回答1:

//键盘求值程序

uncharscankey(void)

{

unchartemp,c,d;

P2=0x0f;

temp=P2;

temp=temp&0x0f;//屏蔽高四位,取列值

temp=~(temp|0xf0);//将temp中的内容与0xf0进行相加,最后求反可得到是那列按下

if(temp==1)

c=0;//P2.0位低电平

elseif(temp==2)

c=1;//P2.1位低电平

elseif(temp==4)

c=2;//P2.2位低电平

elseif(temp==8)

c=3;//P2.3位低电平

else

c=0;//否则给返回值C=0

P2=0xf0;//给P2的行为高电平,以来判断是高四为的那位为低电平

delay(1);

temp=P2;

temp=temp&0xf0;//屏蔽低四位

temp=~((temp>>4)|0xf0);//将temp中的高四位向右移动4位,与0xf0相加,最后求反可以得到是那行按下

if(temp==1)

c=c+0;//将行P2.4的值加上列的值

elseif(temp==2)

c=c+4;//将行P2.5的值加上列的值

elseif(temp==4)

c=c+8;//将行P2.6的值加上列的值

elseif(temp==8)

c=c+12;//将行P2.7的值加上列的值

else

c=0;

d=tab2[c];

return(d);//最后返回行加列的值

}

你把这个程序看懂了。估计你的问题也就解决了。希望对你有所帮助哦!!



记得采纳啊