标题:
需要通过按键K2、K3分别实现长按连续加、连续减的功能,短按已实现,如何修改单片机程序
[打印本页]
作者:
lty514203
时间:
2022-12-19 15:13
标题:
需要通过按键K2、K3分别实现长按连续加、连续减的功能,短按已实现,如何修改单片机程序
谢谢大家,单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit buz=P3^0;
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar count,shi,ge,dcount,dicount;
unsigned int n = 0;
void delay(int ms)
{
uchar i,j;
for(i=ms;i>0;i--)
for(j=200;j>0;j--);
}
void init()
{
P0=0x6f;
P2=0x6f;
P1=0xff;
buz=0;
TMOD=0x01;
IE=0x82;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
dcount=99;
}
void keyscan()
{
if(k1==0)
{ delay(5);
if(k1==0)
{
TR0=0;
}
}
if(TR0==0)
{
if(k2==0)
{ delay(5);
if(k2==0)
{
dcount++;
if(dcount==100)
dcount=0;
while(!k2)
{
shi=dcount/10;
ge=dcount%10;
P0=duan[shi];
P2=duan[ge];
}
}
}
if(k3==0)
{ delay(5);
if(k3==0)
{
dcount--;
if(dcount==-1)
dcount=99;
while(!k3)
{
shi=dcount/10;
ge=dcount%10;
P0=duan[shi];
P2=duan[ge];
}
}
}
}
if(k4==0)
{ delay(5);
if(k4==0)
{
TR0=1;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++count==20)
{
count=0;
dcount--;
if(dcount==-1)
{
TR0=0;
while(k1!=0)
{
P0=0x00;
P2=0x00;
buz=1;
delay(1000);
P0=0x3f;
P2=0x3f;
buz=0;
delay(1000);
}
dcount=99;
}
shi=dcount/10;
ge=dcount%10;
P0=duan[shi];
P2=duan[ge];
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
屏幕截图 2022-12-19 150929.jpg
(174.19 KB, 下载次数: 62)
下载附件
2022-12-19 15:11 上传
作者:
yueguang3048
时间:
2022-12-19 17:57
在松开按键里面做文章 while(!k2) while(!k3)
作者:
ytchfp163
时间:
2022-12-20 02:10
设置个flag标志,增加void keyDown()和void keyUP():按下键flag=1,松开按键flag=0。在void keyscan()里加while(flag)函数,若果flag==1就循环连续加或减,若flag==0就退出循环。
作者:
ytchfp163
时间:
2022-12-20 03:47
加void Keyup()和void KeyDown(),设置个flag标志按键按下和松开。
作者:
lkc8210
时间:
2022-12-20 09:55
while(!k2)
{
shi=dcount/10;
ge=dcount%10;
P0=duan[shi];
P2=duan[ge];
delay1ms();
if(DelayCnt++>=500)
{
DelayCnt=0;
dcount++;
}
}
复制代码
作者:
xunzhaod
时间:
2022-12-20 11:19
不要在定时器中断做这么多操作,只做计数即可。长按其实很简单
void scan()
{
static uin32t_t cnt;
if(k2== 0) //按键按下
{
cnt++;
if(cnt >=100000)//数据越大,时间越长
{
cnt = 0;
//长按功能
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1