找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2959|回復: 8
打印 上一主題 下一主題
收起左側

幫幫忙謝謝了30秒內按鈕按5次以上綠燈亮如果在30秒不到5次就紅燈亮,我怎么寫都寫不好

[復制鏈接]
跳轉到指定樓層
樓主
ID:65605 發(fā)表于 2014-10-26 18:13 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
幫我寫一個30秒內按鈕按5次以上綠燈亮如果在30秒不到5次就紅燈亮,我怎么寫都寫不好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:44262 發(fā)表于 2014-10-26 20:01 來自手機 | 只看該作者
程序帖上來看看
回復

使用道具 舉報

板凳
ID:65605 發(fā)表于 2014-10-26 20:34 來自手機 | 只看該作者
#include<reg52.h> #define uint unsigned int unsigned long temp,temp1,temp2; sbit k1=P1^0; sbit LED=P0^0;          //LED1燈 void delay(uint z)    {       uint x,y;       for(x=z;x>0;x--)       for(y=110;y>0;y--);    } void main() {      k1=0;          LED=0;          temp=0;          temp1=0;          temp2=0;   while(1)    {       if(temp2==1)       temp++;       if(temp==1000)//達到時間從新開始         {           temp=0;   //時間清零           temp2=0;           temp1=0;         }         if((k1==0)&&(temp1==0)) //第一次按下判斷            {               temp1=1;            }            else if((k1==1)&&(temp1==1))//第一次放開判斷                {                    temp1=0;                     temp2=1;//置起標志                  }                    if((k1==0)&&(temp2==1))//第二次按下判斷                       {                          LED=1;                          temp2=0;                          temp=0;                       }    }  }
回復

使用道具 舉報

地板
ID:65400 發(fā)表于 2014-10-26 21:56 來自手機 | 只看該作者
建議你建多個變量a程=,按一下a加1,30
回復

使用道具 舉報

5#
ID:65400 發(fā)表于 2014-10-26 22:01 來自手機 | 只看該作者
建議你建多個變量a=0,按一下a加1,30秒到判斷a大于5就綠燈亮,a=0.否則則紅燈亮,a=0
回復

使用道具 舉報

6#
ID:65400 發(fā)表于 2014-10-26 22:04 來自手機 | 只看該作者
還要最好加個按鍵消抖
回復

使用道具 舉報

7#
ID:66840 發(fā)表于 2014-10-26 22:41 | 只看該作者
#include<reg52.h>

unsigned int temp,temp1;
sbit k1=P1^0;
sbit LED=P0^0;//lLED1
sbit LED1=P0^1;//lLED2


void delay(unsigned char xms)
{
        unsigned char i,j;
        for(i=xms; i>0; i--)
        {
                for(j=110; j>0; j--);
        }
}

void main()
{
        temp = 0;
        temp1 = 0;
        while(1)
        {
                while(k1==0)// 判斷K1是否按下
                {
                        temp++;
                        delay(1);
                        temp1++;
                        if(temp1<30000)//判斷是否在30毫秒內
                          {
                                          if(temp >= 5) //判斷次數是否5次以上
                                        {
                                                LED =0;
                                                LED1 = 1;
                                                temp1 = 0;
                                                temp = 0;                                       
                                        }
                                        else
                                        {
                                                LED =1;
                                                LED1 = 0;                                                       
                                        }
                          }                       
                }
        }
}
回復

使用道具 舉報

8#
ID:66840 發(fā)表于 2014-10-26 22:42 | 只看該作者
希望能夠幫到你
回復

使用道具 舉報

9#
ID:66032 發(fā)表于 2014-10-28 11:06 | 只看該作者
上午剛寫了一個, 運行還不錯
//用一個外部中斷做按5次的鍵,一個定時器來判斷30秒溢出, 如果定時器在30秒內按了5次, 外部中斷重新賦初值,這樣防止定時器在30秒溢出,綠燈亮。反之,定時器溢出將使得紅燈亮, 用12M crystal 和數碼管+38譯碼器

#include <reg52.h>
#define   uchar unsigned char
#define   uint unsigned int

code uchar number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar a[6];

sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit Green_LED =P2^0;
sbit Red_LED   =P2^1;

void timer1_init()
{
    TMOD |= 0x10;
    TMOD &= 0xdf;  
    TH1   = 0x3C;
    TL1   = 0xB0;
    TR1   = 1;
}
void interrupter_init()
{
   ET1 = 1;
   EA=1;          //諾ÖÖD¶Ï¿a
   EX0=1;         //ía2¿ÖD¶Ï0¿a
   IT0=1;         //±ßÑØ′¥·¢
}
void Scanning_Numerical_LED(void)
{
      static uchar j = 0;
        switch(j)
       {
        case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[0]];break;
        case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[1]];break;
        case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[2]];break;
        case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[3]];break;
        case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 = number[a[4]];break;
        case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[a[5]];break;
        default: break;
            }
   
}

main()
{
    ENLED = 0; ADDR3 = 1;
    timer1_init();
    interrupter_init();
    while(1)
    {
       Scanning_Numerical_LED();
    }
   
}

void ISR_Key(void) interrupt 0 using 1

{
  uchar counter1;
  counter1++;
  if (counter1==5)
    {
      counter1=0;
      TH1 = 0x3C;  //50 ms setting;
      TL1 = 0xB0;
    }

}

void interrupt_timer1() interrupt 3
{
      uint sec;
      uchar counter;
      TH1 = 0x3C;  //50 ms setting;
      TL1 = 0xB0;
      counter++;
      if(counter ==20)
      {
        counter = 0;
        sec++;
        if (sec>=30)
           Red_LED=1;
        else Green_LED=1;
        if (sec==1000)
            sec=0;

        a[0] = sec%10;
        a[1] = sec/10%10;
        a[2] = sec/100%10;
        a[3] = sec/1000%10;
        a[4] = sec/10000%10;
        a[5] = sec/100000%10;
      }
                                         
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表