找回密码
 注册会员
搜索附件  
MCU资讯论坛 附件中心 单片机论坛 51单片机论坛 用延时做按键长按检测 数码管的记数.rar

用延时做按键长按检测 数码管的记数.rar

 

用延时做按键长按检测+数码管的记数:
这是我学习中写的一个程序,希望大家看看,还有什么不足的地方可以改进!下面是程序!





#include<reg52.h>
unsigned char smduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //p0口为段选
unsigned char smwei[4]={0xf7,0xFb,0xfd,0xfe};//p2为位选
sbit k4=P3^5; //按键
unsigned char i;
unsigned char ge;
unsigned char bai;
unsigned char shi;
unsigned char jishu;

void delay_ms(unsigned int ms) //延时
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}

void xianshi() //数码管 显示
{
bai=i/100;
shi=i%100/10;
ge=i%10;
P2=smwei[2];
P0=smduan[bai];
delay_ms(3);
P2=smwei[1];
P0=smduan[shi];
delay_ms(3);
P2=smwei[0];
P0=smduan[ge];
delay_ms(3);
}

void main ()
{
k4=1; //按键至1
i=0; //初始

while(1) //大循环
{
if(k4==0) //判断按键是否按下
{
delay_ms(4) ; //去抖
if(k4==0) //再判断按键是否还是按下
i++; //按键是按下,记数+1
}
while(!k4) //等待按键释放
{
xianshi() ; //显示
delay_ms(1);
jishu++; //按键按下时间
delay_ms(1);
if(jishu>254) //判断按键是否按下时间超过半秒
{

i++; //实现快速+1
delay_ms(4);
jishu=250;
}
}
if(k4==1)
delay_ms(5);
if(k4==1);
xianshi();
jishu=0; //按键按下时间清0
}
}


QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-26 23:54 , Processed in 0.042396 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部