/*******************************************************************************************************/
/** 头文件 **/
/*******************************************************************************************************/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*******************************************************************************************************/
/** 宏定义 **/
/*******************************************************************************************************/
#define uchar unsigned char
/*******************************************************************************************************/
/** 共阳极数码表 **/
/*******************************************************************************************************/
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x90,0xff};
/*******************************************************************************************************/
/** 接线定义 **/
/*******************************************************************************************************/
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
/*******************************************************************************************************/
/** 变量定义 **/
/*******************************************************************************************************/
uchar i=100;
uchar j,k,temp,key=0;
uchar a0,b0,c0,d0,e0,f0;
/*******************************************************************************************************/
/** 延时函数 **/
/*******************************************************************************************************/
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/*******************************************************************************************************/
/** 数码管显示函数 **/
/*******************************************************************************************************/
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
dula=0;
P0=table[a];
dula=1;
dula=0;
wela=0;
P0=0x01;
wela=1;
wela=0;
delay(5);
P0=table[b];
dula=1;
dula=0;
P0=0x02;
wela=1;
wela=0;
delay(5);
P0=table[c];
dula=1;
dula=0;
P0=0x04;
wela=1;
wela=0;
delay(5);
P0=table[d];
dula=1;
dula=0;
P0=0x08;
wela=1;
wela=0;
delay(5);
P0=table[e];
dula=1;
dula=0;
P0=0x10;
wela=1;
wela=0;
delay(5);
P0=table[f];
dula=1;
dula=0;
P0=0x20;
wela=1;
wela=0;
delay(5);
}
/*******************************************************************************************************/
/** 按键扫描 **/
/*******************************************************************************************************/
void keyscan()
{
P3=0xfe; //第1行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //说明有按键按下
{
delay(10); //去抖动
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=1;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0xde:
key=2;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0xbe:
key=3;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0x7e:
key=4;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=5;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0xdd:
key=6;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0xbd:
key=7;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0x7d:
key=8;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=9;
a0=5;b0=key;c0=10;d0=10;e0=10;f0=10;
break;
case 0xdb:
key=10;
a0=5;b0=1;c0=0;d0=10;e0=10;f0=10;
break;
case 0xbb:
key=11;
a0=5;b0=1;c0=1;d0=10;e0=10;f0=10;
break;
case 0x7b:
key=12;
a0=5;b0=1;c0=2;d0=10;e0=10;f0=10;
break;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=13;
a0=5;b0=1;c0=3;d0=10;e0=10;f0=10;
break;
case 0xd7:
key=14;
a0=5;b0=1;c0=4;d0=10;e0=10;f0=10;
break;
case 0xb7:
key=15;
a0=5;b0=1;c0=5;d0=10;e0=10;f0=10;
break;
case 0x77:
key=16;
a0=5;b0=1;c0=6;d0=10;e0=10;f0=10;
break;
}
}
}
}
/*******************************************************************************************************/
/** 主函数 **/
/*******************************************************************************************************/
void main()
{
key=0;
dula=0;
P0=0xFF;
wela=1;
wela=0;
while(1)
{
keyscan();
if(key != 0)
{
display(a0,b0,c0,d0,e0,f0);
}
}
}
/*******************************************************************************************************/
/** End File **/
/*******************************************************************************************************/