有难题、大哥来帮忙!怎么样设计单片机3秒之内无论按几...
时间:10-02
整理:3721RD
点击:
有难题、大哥来帮忙!怎么样设计单片机3秒之内无论按几次键,数显都显示不变,3秒后按键了再变!
看下面程序,想在里面增加一个功能,
当数显0与1之间时,也就是没按键时,3秒钟之内无论按几次键(≥1)数显只显示1,
当数显1与2之间时,也就是没按键时,3秒钟之内无论按几次键(≥1)数显只显示2,
当数显2与3之间时,也就是没按键时,3秒钟之内无论按几次键(≥1)数显只显示3
#include "main.h"
#include "keyscan.h"
uint8 code table[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7d, 0x07, 0x7F, 0x6f}; //数码管显示0,1,2,3...9
uint8 flag1 = 1, flag2 = 1, flag3 = 1;
uint8 cunt = 0, cunt_K2 = 0;
int main(void)
{
Init_Timer0();
LED(0); P2 = table[cunt_K2]; //数码管显示0
while(1)
{
KeyScan();
if ((0 == cunt_K2) && (cunt > 200))
{
cunt = 0;
LED(1);
P2 = table[cunt_K2];
}
else if ((1 == cunt_K2) && (cunt <= 200) && flag1)
{
cunt = 0;
LED(0);
P2 = table[cunt_K2];
flag1 = 0;
}
else if ((1 == cunt_K2) && (cunt > 200))
{
cunt = 0;
LED(1);
P2 = table[cunt_K2];
}
else if ((2 == cunt_K2) && (cunt <= 200) && flag2)
{
cunt = 0;
LED(0);
P2 = table[cunt_K2];
flag2 = 0;
}
else if ((2 == cunt_K2) && (cunt > 200))
{
cunt = 0;
LED(1);
P2 = table[cunt_K2];
}
else if ((3 == cunt_K2) && (cunt <= 200) && flag3)
{
cunt = 0;
LED(2);
P2 = table[cunt_K2];
flag3 = 0;
}
else if (cunt_K2 > 3)
{
TR0 = 0;
LED(2);
P2 = table[cunt_K2];
if (cunt_K2 >= 10)
{
cunt_K2 = 0;
LED(0);
P2 = table[cunt_K2];
flag1 = 1;
flag2 = 1;
flag3 = 1;
TR0 = 1;
}
}
}
return 0;}
/*
* 定时器0 初始化函数
*/
void Init_Timer0(void)
{
TMOD = 0x01; //定时器0 工作模式1
TH0 = 0x4B; //定时50ms
TL0 = 0xFF;
ET0 = 1; EA = 1;
TR0 = 1;}
/*
* 定时器0 中断服务子程序
*/
void Timer0(void) interrupt 1
{
TH0 = 0x4B;
TL0 = 0xFF;
cunt++;
}
看下面程序,想在里面增加一个功能,
当数显0与1之间时,也就是没按键时,3秒钟之内无论按几次键(≥1)数显只显示1,
当数显1与2之间时,也就是没按键时,3秒钟之内无论按几次键(≥1)数显只显示2,
当数显2与3之间时,也就是没按键时,3秒钟之内无论按几次键(≥1)数显只显示3
#include "main.h"
#include "keyscan.h"
uint8 code table[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7d, 0x07, 0x7F, 0x6f}; //数码管显示0,1,2,3...9
uint8 flag1 = 1, flag2 = 1, flag3 = 1;
uint8 cunt = 0, cunt_K2 = 0;
int main(void)
{
Init_Timer0();
LED(0); P2 = table[cunt_K2]; //数码管显示0
while(1)
{
KeyScan();
if ((0 == cunt_K2) && (cunt > 200))
{
cunt = 0;
LED(1);
P2 = table[cunt_K2];
}
else if ((1 == cunt_K2) && (cunt <= 200) && flag1)
{
cunt = 0;
LED(0);
P2 = table[cunt_K2];
flag1 = 0;
}
else if ((1 == cunt_K2) && (cunt > 200))
{
cunt = 0;
LED(1);
P2 = table[cunt_K2];
}
else if ((2 == cunt_K2) && (cunt <= 200) && flag2)
{
cunt = 0;
LED(0);
P2 = table[cunt_K2];
flag2 = 0;
}
else if ((2 == cunt_K2) && (cunt > 200))
{
cunt = 0;
LED(1);
P2 = table[cunt_K2];
}
else if ((3 == cunt_K2) && (cunt <= 200) && flag3)
{
cunt = 0;
LED(2);
P2 = table[cunt_K2];
flag3 = 0;
}
else if (cunt_K2 > 3)
{
TR0 = 0;
LED(2);
P2 = table[cunt_K2];
if (cunt_K2 >= 10)
{
cunt_K2 = 0;
LED(0);
P2 = table[cunt_K2];
flag1 = 1;
flag2 = 1;
flag3 = 1;
TR0 = 1;
}
}
}
return 0;}
/*
* 定时器0 初始化函数
*/
void Init_Timer0(void)
{
TMOD = 0x01; //定时器0 工作模式1
TH0 = 0x4B; //定时50ms
TL0 = 0xFF;
ET0 = 1; EA = 1;
TR0 = 1;}
/*
* 定时器0 中断服务子程序
*/
void Timer0(void) interrupt 1
{
TH0 = 0x4B;
TL0 = 0xFF;
cunt++;
}
啊哦,也不会,帮小编顶顶。
在中断里面设置一个时间调控
关键是我不会啊,找好心人帮我弄一下呢
KeyScan();
程序呢
我在韩国,现在没空
小编辛苦了,谢谢。
设置个变量用作开机计时器,一开机先初始化成0,等时间到3秒之后就行了。这个变量在定时中断中做自加操作。只要超过设定的3秒,就可以了。
