基于51单片机的数码管显示按键次数增减

/**********************************************
实验名:数码管显示按键次数值增减
实验I/O:见程序
注 意:数码管动态扫描时间间隔与显示稳定性问题
***********************************************/
#include //包含特殊功能寄存器定义的头文件

#define DIG P0 //定义数码管显示接口为P0口

sbit K1=P3^2; //定义按键接口
sbit K2=P3^3;

sbit LSA=P2^2; //定义数码管位选译码口
sbit LSB=P2^3;
sbit LSC=P2^4;

unsigned int i=0; //按键变量值为i,初始值为0
unsigned char ge,shi,bai; //定义个位,十位,百位的变量

void Delay(unsigned char t); //延时函数声明
void Display(); //数码管显示函数声明

unsigned code DIG_CODE[10]=
{
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f
}; //数码管显示0~9的字形码

/*******************************************************
主函数,包含按键K1,K2的检测,各位变量的计算,最后显示。
********************************************************/
void main()
{
while(1)
{
if(K1==0)
{
Delay(50);
if(K1==0)
i++;
if(i>999) //判定i的值,大于999均显示为999
i=999;
while(K1==0);
}
if(K2==0)
{
Delay(50);
if(K2==0)
i--;
if(i<0) //判定i的值,小于0均显示为0
i=0;
while(K2==0);
}

ge=i%10; //各位变量的计算赋值
shi=(i%100)/10;
bai=i/100;

Display(); //数码管显示函数
}
}

/*******************************************************
显示函数,选择数码管显示相应位的数组元素
********************************************************/
void Display()
{
LSA=0;LSB=0;LSC=0;DIG=DIG_CODE[ge];
Delay(5);
LSA=1;LSB=0;LSC=0;DIG=DIG_CODE[shi];
Delay(5);
LSA=0;LSB=1;LSC=0;DIG=DIG_CODE[bai];
Delay(5);
}

void Delay(unsigned char t) //延时函数,双重for循环,定时更准确
{
unsigned int a;
for(;t>0;t--)
for(a=110;a>0;a--);
}

相关文档
最新文档