标题:
单片机如何实现两个按键同时按下,两个灯同时点亮?如何修改这个程序?
[打印本页]
作者:
zhinanzhen
时间:
2020-1-8 10:27
标题:
单片机如何实现两个按键同时按下,两个灯同时点亮?如何修改这个程序?
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^0; //定义P31口是k1
sbit k2=P3^1;
//sbit k3=P3^2;
sbit led1=P2^0; //定义P20口是led
sbit led2=P2^1;
//sbit led3=P2^2;
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
if(k1==0) //检测按键K1是否按下
delay(10000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
led1=0;
delay(900000);
delay(900000);
led1=1;
}
// while(!k1); //检测按键是否松开
if(k2==0)
delay(10000);
if(k2==0)
{
led2=0;
delay(900000);
delay(900000);
led2=1;
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
keypros(); //按键处理函数
}
}
求助各位师傅:我想实现两个按键同时按下,两个灯同时点亮。
作者:
QTW
时间:
2020-1-8 15:40
C语言有一种逻辑运算符,叫做与(“&&”)
作者:
忧郁的废物
时间:
2020-1-8 16:17
判断语句里面添加就行,两个键同时按下执行
作者:
要创新
时间:
2020-1-8 16:47
两个灯就不用消抖了
作者:
要创新
时间:
2020-1-8 16:50
两个灯就不用消抖了
if(k1==1&&k2==1)
{
led1=1;
led2=1;
}
作者:
wulin
时间:
2020-1-8 22:21
改为两个按键可同时操作也可分别操作,互不影响,定时器精准延时,延时期间封锁按键。
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^0; //定义P31口是k1
sbit k2=P3^1;
//sbit k3=P3^2;
sbit led1=P2^0; //定义P20口是led
sbit led2=P2^1;
//sbit led3=P2^2;
bit flag1=0,flag2=0;
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
/*
void delay(u16 i)
{
while(i--);
}*/
void Timer0Init()//1毫秒@12.000MHz
{
TMOD= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
EA = 1;
ET0 = 1;
TR0 = 1;
}
/*******************************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
static bit sign1=0,sign2=0; //按键自锁标志
static u8 count1=0,count2=0; //计数消抖变量
if(!k1) //检测按键K1是否按下
{
if(++count1>=100 && sign1==0 && flag1==0)
{
sign1=1;
flag1=1;
led1=0;
}
}
else //松手
{
count1=0;
sign1=0;
}
if(!k2) //检测按键K2是否按下
{
if(++count2>=100 && sign2==0 && flag2==0)
{
sign2=1;
flag2=1;
led2=0;
}
}
else //松手
{
count2=0;
sign2=0;
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
Timer0Init();
while(1)
{
keypros(); //按键处理函数
}
}
void Timer0Interrupt(void) interrupt 1
{
static u16 num1=0,num2=0;
TL0 = 0x18;
TH0 = 0xFC;
if(flag1==1)
{
num1++;
if(num1>=2000)
{
num1=0;
flag1=0;
led1=1;
}
}
if(flag2==1)
{
num2++;
if(num2>=2000)
{
num2=0;
flag2=0;
led2=1;
}
}
}
复制代码
作者:
linda5150
时间:
2020-1-9 18:00
if((k1==0)&&(k2==0))
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1