在代码开始之前,首先搞清楚矩阵每个led
uchar code TAB[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//段码码值
uchar code Seg[]={0x00,0x04,0x08,0x0c, 0x10,0x14,0x18,0x1c};//位码码值
对应的代码段和位置
然后就是延时函数
/*********************延时函数*************************/
void Delay(uint ctn)
{
uint i;
for(i=0;i<ctn;i++);
}
在按键控制过程中,我们会用到一个很重要的方法
/*********************线反转法*************************/
uchar Keyscan(void)
{
uchar cord_h,cord_l;
P1=0x0f;
cord_h=P1&0x0f;
if(cord_h!=0x0f) //判断有无按键按下
{
Delay(100); //短暂的延时去抖
if(cord_h!=0x0f) //再次确定有无按键按下,作用是继续去抖
{
cord_h=P1&0x0f;//读回行线键值
P1=0x0f; //线反转
cord_l=P1&0x0f;//读回列线键值
return(cord_h+cord_l);
}
}return(0xff);
}
接下来就是主函数
下面是整个函数
include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code TAB[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//段码码值
uchar code Seg[]={0x00,0x04,0x08,0x0c, 0x10,0x14,0x18,0x1c};//位码码值
uchar Key;//键值变量
uint Temp;
/*********************延时函数*************************/
void Delay(uint ctn)
{
uint i;
for(i=0;i<ctn;i++);
}
/*********************线反转法*************************/
uchar Keyscan(void)
{
uchar cord_h,cord_l;
P1=0x0f;
cord_h=P1&0x0f;
if(cord_h!=0x0f) //判断有无按键按下
{
Delay(100); //短暂的延时去抖
if(cord_h!=0x0f) //再次确定有无按键按下,作用是继续去抖
{
cord_h=P1&0x0f;//读回行线键值
P1=0x0f; //线反转
cord_l=P1&0x0f;//读回列线键值
return(cord_h+cord_l);
}
}return(0xff);
}
/********************键值转换成段值*********************/
void Key_Duan()
{
Key=Keyscan();
switch(key)
{
case 0x77:Temp=TAB[0];break;//0
case 0x7b:Temp=TAB[1];break;//1
case 0x7d:Temp=TAB[2];break;//2
case 0x7e:Temp=TAB[3];break;//3
case 0xb7:Temp=TAB[4];break;//4
case 0xbb:Temp=TAB[5];break;//5
case 0xbd:Temp=TAB[6];break;//6
case 0xbe:Temp=TAB[7];break;//7
case 0xd7:Temp=TAB[8];break;//8
case 0xdb:Temp=TAB[9];break;//9
case 0xdd:Temp=TAB[10];break;//a
case 0xde:Temp=TAB[11];break;//b
case 0xe7:Temp=TAB[12];break;//c
case 0xeb:Temp=TAB[13];break;//d
case 0xed:Temp=TAB[14];break;//e
case 0xee:Temp=TAB[15];break;//f
}
}
/**********************显示函数******************/
void Dispaly()
{
P2=Seg[0];
P0=Temp;
}
/**********************主函数********************/
void main()
{
while(1)
{
Key_Duan();
Display;
}
}