51单片机矩阵键盘代码汇编语言,51单片机4×4矩阵键盘程序流程图两种设计方法?

矩阵按键的做法和点阵是一样的都是采用横纵坐标来确定哪个按键按下。上边那行是竖着的坐标,右面竖着的坐标是矩阵的横向坐标。

p1.0 为1时,第一竖行0 ,4,8,c就都通电了,当按下0键时p1.4就是低电平

1单片机矩阵键盘代码汇编语言,51单片机4×4矩阵键盘程序流程图两种设计方法?"

当我们按下 5 键时p1.1是高电平,p1.5是低电平。

这次我们用p0.0口当数码管的控制极,p2口输出让数码管显示0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,当按下哪个按键,数码管就显示哪个字符。

当P1.0——P.1——P1.2——P1.3为1时, 让P1.4为0,则0,1,2,3这4个按键等待响应。

当P1.0——P.1——P1.2——P1.3为1时, 让P1.5为0,则4,5,6,7这4个按键等待响应。

当P1.0——P.1——P1.2——P1.3为1时, 让P1.6为0,则8,9,A,B这4个按键等待响应。

当P1.0——P.1——P1.2——P1.3为1时, 让P1.7为0,则C,D,E,F这4个按键等待响应。

咱们就按照这个模式写一下。

#include<reg52.h>

sbit kongzhi0 =P0^0; // 用来控制哪个数码管可以用

unsigned char code shuzi[]={

0xC0,0xF9, 0xA4,0xb0, / / 0,1,2,3

0x99,0x92,0x82,0xF8, //4,5,6,7

0x80,0x90,0x88,0x03, // 89AB

0xC6,0xA1,0x86,0x8E }; //CDEF

sbit shu0=P1^0;

sbit shu1=P1^1;

sbit shu2=P1^2;

sbit shu3=P1^3;

sbit heng0=P1^4;

sbit heng1=P1^5;

sbit heng2=P1^6;

sbit heng3=P1^7;

void main()

{

kongzhi0=0; //给数码管送电

P2=0xFF; // 开机先不送数据,数码管不亮

P1=0x00; // 坐标初始化为0,

while(1)

{

P1=0xEF;//P1.0——P1.7数据分别时1111 0111颠倒一下位置就是1110 1111转16 进制,就是0xEF。

if(shu0==0)

{ yanshi();

if(shu0==0)

{P2=shuzi[0];}

}

if(shu1==0)

{ yanshi();

if(shu1==0)

{P2=shuzi[1];}

}

if(shu2==0)

{ yanshi();

if(shu2==0)

{P2=shuzi[2];}

}

if(shu3==0)

{ yanshi();

if(shu3==0)

{P2=shuzi[3];}

}

P1=0xDF;

if(shu0==0)

{ yanshi();

if(shu0==0)

{P2=shuzi[4];}

}

if(shu1==0)

{ yanshi();

if(shu1==0)

{P2=shuzi[5];}

}

if(shu2==0)

{ yanshi();

if(shu2==0)

{P2=shuzi[6];}

}

if(shu3==0)

{ yanshi();

if(shu3==0)

{P2=shuzi[7];}

}

P1=0x9F;

if(shu0==0)

{ yanshi();

if(shu0==0)

{P2=shuzi[8];}

}

if(shu1==0)

{ yanshi();

if(shu1==0)

{P2=shuzi[9];}

}

if(shu2==0)

{ yanshi();

if(shu2==0)

{P2=shuzi[10];}

}

if(shu3==0)

{ yanshi();

if(shu3==0)

{P2=shuzi11];}

}

P1=0x7F;

if(shu0==0)

{ yanshi();

if(shu0==0)

{P2=shuzi[12];}

}

if(shu1==0)

{ yanshi();

if(shu1==0)

{P2=shuzi[13];}

}

if(shu2==0)

{ yanshi();

if(shu2==0)

{P2=shuzi[14];}

}

if(shu3==0)

{ yanshi();

if(shu3==0)

{P2=shuzi[15];}

}

}

}

void yanshi()

{unsigned int i=1000;

while(i–);}

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.gooyie.com/43924.html