基于51单片机的数码管显示按键次数增减
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**********************************************
实验名:数码管显示按键次数值增减
实验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--);
}