编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

C51 单片机 14 矩阵按键

wxchong 2025-08-02 22:22:44 开源技术 4 ℃ 0 评论


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

p1.0 为1时,第一竖行0 ,4,8,c就都通电了,当按下0键时p1.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,当按下哪个按键,数码管就显示哪个字符。


这个程序我写错了,马上补一个 单片机 14-没错误的。



#include<reg52.h>

sbit P0^0 = kongzhi0;

unsigned char code shuzi[]={0xC0,0xF9, 0xA4,0xb0,

0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x03,

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

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()

{

P2=0xFF;

P1=0x0f; // 竖坐标初始化为0,选择一个为1,横坐标置1才能读取按键的状态,

while(1)

{

shu0=1;

if(heng0==0)

{ yanshi();

if(heng0==0)

{P2=shuzi[0];}

}

if(heng1==0)

{ yanshi();

if(heng1==0)

{P2=shuzi[4];}

}

if(heng2==0)

{ yanshi();

if(heng2==0)

{P2=shuzi[8];}

}

if(heng3==0)

{ yanshi();

if(heng3==0)

{P2=shuzi[12];}

}


shu0=0;

shu1=1;

if(heng0==0)

{ yanshi();

if(heng0==0)

{P2=shuzi[1];}

}

if(heng1==0)

{ yanshi();

if(heng1==0)

{P2=shuzi[5];}

}

if(heng2==0)

{ yanshi();

if(heng2==0)

{P2=shuzi[9];}

}

if(heng3==0)

{ yanshi();

if(heng3==0)

{P2=shuzi[13];}

}

shu1=0;

}

}

void yanshi()

{unsigned int i=1000;

while(i--);}

这里我只写了竖着的前两行,只要再复制粘贴一下就可以完成所有的按键功能,这样写的好处是容易理解。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表