(1)按键原理:按键正常状态为默认高电平,当按键按下之后就变成低电平。利用这个特性,我们可以检测出按键是否按下。
(2)数码管原理:想实现数码管的点亮,首先要有位选,即点亮哪一个数码管;其次要有段选,即具体的数码管显示哪一段(一个数码管由8段构成,包括一个小数点)
(3)按键原理图:
(4)74HC138原理图:(5)数码管原理图:
(6)源代码:
#include<reg51.h>
sbit K4=P3^3;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80/*显示小数点*/};
void delay(u16 i)//延时函数
{
while(i--);
}
void keypros()
{
u8 i;
if(K4==0)
delay(1000); //按键消抖
if(K4==0)
{
for(i=0;i<8;i++) //for循环实现数码管0~7的循环显示
{
switch(i)
{
case 0: LSA=0;LSB=0;LSC=0;break;
case 1: LSA=1;LSB=0;LSC=0;break;
case 2: LSA=0;LSB=1;LSC=0;break;
case 3: LSA=1;LSB=1;LSC=0;break;
case 4: LSA=0;LSB=0;LSC=1;break;
case 5: LSA=1;LSB=0;LSC=1;break;
case 6: LSA=0;LSB=1;LSC=1;break;
case 7: LSA=1;LSB=1;LSC=1;break;
}
P0=smgduan[i]; //数码管显示具体数字
delay(50000);
}
}
if(K4!=0)//按键正常状态,不按下
{
LSA=1;
LSB=1;
LSC=1;
P0=smgduan[0];
}
}
void main()
{
while(1)
{
keypros(); //调用按键处理函数
}
}