各位读者好,本文主要介绍在C52单片机上如何设计矩阵键盘并与数码管联动。
在你拥有以下条件时,学习效果最佳:
1、开发环境中安装了keil(单片机程序开发工具)、proteus(仿真软件)
2、有一定c语言使用基础、有一定单片机电路基础
一、电路图设计
1、电路图展示
二、控制程序设计
#include<reg52.h>
sbit p0_0 = P0^0;
sbit p0_1 = P0^1;
char code display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //数码管段选值
char display1 = 0xff; //数码管位选1
char display2 = 0xff; //数码管位选2
void delayms(int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<120; j++);
}
//当与P2口第四位相连的4与门器输出低电平时,触发中断
void led() interrupt 0
{
//这里利用电平触发的延时效果,我们将P2引脚的高4位的电平顺序置低,引起被按下按键的行列电平产生电压差,产生电流,从而让P2引脚第四位中对应引脚的电平降低,以达到检测的目的。
P2=0xef;
if (P2==0xee) display1=display[1],display2=display[10];
if (P2==0xed) display1=display[5],display2=display[10];
if (P2==0xeb) display1=display[9],display2=display[10];
if (P2==0xe7) display1=display[3],display2=display[1];
P2=0xdf;
if (P2==0xde) display1=display[2],display2=display[10];
if (P2==0xdd) display1=display[6],display2=display[10];
if (P2==0xdb) display1=display[0],display2=display[1];
if (P2==0xd7) display1=display[4],display2=display[1];
P2=0xbf;
if (P2==0xbe) display1=display[3],display2=display[10];
if (P2==0xbd) display1=display[7],display2=display[10];
if (P2==0xbb) display1=display[1],display2=display[1];
if (P2==0xb7) display1=display[5],display2=display[1];
P2=0x7f;
if (P2==0x7e) display1=display[4],display2=display[10];
if (P2==0x7d) display1=display[8],display2=display[10];
if (P2==0x7b) display1=display[2],display2=display[1];
if (P2==0x77) display1=display[6],display2=display[1];
P2=0x0f;
}
void main()
{
P2=0x0f;
//中断初始化
EA = 1;
EX0 = 1;
IT0 = 0;
while(1)
{
//循环对数码管赋值并且动态显示
P1 = display1;
p0_0 = 0;
delayms(55);
p0_0 = 1;
P1 = display2;
p0_1 = 0;
delayms(55);
p0_1 = 1;
}
}