
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就可以欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)