微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有难题、大哥来帮忙!怎么样设计单片机3秒之内无论按几...

有难题、大哥来帮忙!怎么样设计单片机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++;
}

啊哦,也不会,帮小编顶顶。

在中断里面设置一个时间调控

关键是我不会啊,找好心人帮我弄一下呢

KeyScan();
程序呢

我在韩国,现在没空

小编辛苦了,谢谢。

设置个变量用作开机计时器,一开机先初始化成0,等时间到3秒之后就行了。这个变量在定时中断中做自加操作。只要超过设定的3秒,就可以了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top