📄 4x4矩阵键盘和数码管显示实验.c
字号:
/***************************************************************
* 程序名称:利用4*4矩阵键盘使数码管显示相应的数
*
* 硬件说明:MCU采用AT89S51/52,74HC573组合对数码管的控制
*
****************************************************************/
#include <reg52.h>
sbit dula=P3^3;//段码选通位-控制74HC573
sbit wela=P3^4;//位码选通位-控制74HC573
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0x88,/*A*/
0x83,/*b*/
0xC6,/*C*/
0xA1,/*d*/
0x86,/*E*/
0x8E,/*F*/};//共阳数码管代码
uchar num,temp;
void delay(uchar z)
{
uint x,y; //局部变量,只在当前函数有效
for(x=200;x>0;x--)
{
for(y=z;y>0;y--);
}
}
void main()
{
dula=1;
P0=0xff;
dula=0; //开始什么都不显示
wela=1;
P0=0xff; //打开所有数码管位
wela=0;
while(1)
{
P1=0xf7; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0)//若不等于0xf0,即为有按键按下,执行while语句
{
delay(5); //防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{
temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0xe7:num=0;//若0xee与temp相等,
//执行num=1,否则向下
break;
case 0xd7:num=4;//4,
break;
case 0xb7:num=8;//8,
break;
case 0x77:num=12;//C,
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
dula=1;
P0=table[num];
dula=0;
}
}
P1=0xfb; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0) //若不等于0xf0,即为有按键按下,执行while语句
{
delay(5); //防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{
temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0xeb:num=1;//若0xee与temp相等,
//执行num=1,否则向下
break;
case 0xdb:num=5;//5,
break;
case 0xbb:num=9;//9,
break;
case 0x7b:num=13;//d,
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
dula=1;
P0=table[num];
dula=0;
}
}
P1=0xfd; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0) //若不等于0xf0,即为有按键按下,执行while语句
{
delay(5);//防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{
temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0xed:num=2;//若0xee与temp相等,
//执行num=1,否则向下
break;
case 0xdd:num=6;//6,
break;
case 0xbd:num=10;//a,
break;
case 0x7d:num=14;//e,
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
dula=1;
P0=table[num];
dula=0;
}
}
P1=0xfe; //按键P3赋初值(11111110)
temp=P1; //送入temp,检测按键
temp=temp&0xf0; //temp与oxf0(即11110000)
while(temp!=0xf0) //若不等于0xf0,即为有按键按下,执行while语句
{
delay(5); //防抖
temp=P1;
temp=temp&0xf0; //再次判断
while(temp!=0xf0)//确实不等于0xf0
{
temp=P1; //P3的值赋给temp (此语句很重要!)
switch(temp)
{
case 0xee:num=3;//若0xee与temp相等,
//执行num=1,否则向下
break;
case 0xde:num=7;//7,
break;
case 0xbe:num=11;//b,
break;
case 0x7e:num=15;//F,
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
dula=1;
P0=table[num];
dula=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -