找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2052|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

求大咖們賜教,單片機(jī)1秒內(nèi)連續(xù)兩次高電平觸發(fā)程序?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51321 發(fā)表于 2022-10-19 20:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
小弟剛接觸單片機(jī)不久,求大咖們賜教,單片機(jī)某一個IO口1秒內(nèi)連續(xù)兩次高電平觸發(fā),則執(zhí)行啟動繼電器,該怎么寫?謝謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:51321 發(fā)表于 2022-10-19 21:00 | 只看該作者
程序在每1000ms內(nèi)捕獲到p3.0 有2次高電平狀態(tài),則啟動繼電器
回復(fù)

使用道具 舉報(bào)

板凳
ID:593706 發(fā)表于 2022-10-19 21:45 | 只看該作者
監(jiān)測單片機(jī)的IO腳,如果出現(xiàn)高電平就計(jì)數(shù)一次,當(dāng)一秒鐘內(nèi)的計(jì)數(shù)超過二次,就將IO口的電平變換去驅(qū)動繼電器動作(單片機(jī)不能直接驅(qū)動繼電器,必須外置驅(qū)動放大電路)
回復(fù)

使用道具 舉報(bào)

地板
ID:51321 發(fā)表于 2022-10-19 22:17 | 只看該作者
lsgzq 發(fā)表于 2022-10-19 21:45
監(jiān)測單片機(jī)的IO腳,如果出現(xiàn)高電平就計(jì)數(shù)一次,當(dāng)一秒鐘內(nèi)的計(jì)數(shù)超過二次,就將IO口的電平變換去驅(qū)動繼電器 ...

原理是這樣的   大佬 能賜一段代碼不
回復(fù)

使用道具 舉報(bào)

5#
ID:198189 發(fā)表于 2022-10-20 10:38 | 只看該作者
給你參考一下。
//STC8G系列
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
unsigned char a=0,k=0;       
sbit k1=P3^3;//接繼電器觸發(fā)口
sbit int0=P3^2; //INT0 低電平中斷口
sfr     T2L         =   0xd7;
sfr     T2H         =   0xd6;
sfr     T3L         =   0xd5;
sfr     T3H         =   0xd4;
sfr     T4L         =   0xd3;
sfr     T4H         =   0xd2;
sfr     T4T3M       =   0xd1;
sfr     AUXR        =   0x8e;
sfr     IE2         =   0xaf;
#define ET2             0x04
#define ET3             0x20
#define ET4             0x40
sfr     AUXINTIF    =   0xef;
#define T2IF            0x01
#define T3IF            0x02
#define T4IF            0x04

sbit    P10         =   P1^0;
sbit    P11         =   P1^1;

sfr     P0M1        =   0x93;
sfr     P0M0        =   0x94;
sfr     P1M1        =   0x91;
sfr     P1M0        =   0x92;
sfr     P2M1        =   0x95;
sfr     P2M0        =   0x96;
sfr     P3M1        =   0xb1;
sfr     P3M0        =   0xb2;
sfr     P4M1        =   0xb3;
sfr     P4M0        =   0xb4;
sfr     P5M1        =   0xc9;
sfr     P5M0        =   0xca;

void TM0_Isr() interrupt 1
{
  TL0 = 0xCD;                //設(shè)置定時(shí)初始值
        TH0 = 0xD4;                //設(shè)置定時(shí)初始值  
        a++;
        if(a>=2000&&k>=2)
        {
                k1=1;//放入你想做的事情
                a=0;
                k=0;
        }
                           
}
void INT0_Isr() interrupt 0 //
{
k++;
}
void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0xCD;                //設(shè)置定時(shí)初始值
        TH0 = 0xD4;                //設(shè)置定時(shí)初始值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
}


void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
          Timer0Init();
    IT0 = 1;                                    //使能INT0下降沿中斷 自己想辦法讓你的檢測端口高電平換成低電平
    EX0 = 1;                                    //使能INT0中斷
    EA = 1;
    k1=0;
    int0=1;

    while (1)
    {
        //沒有自己的想法
    }
}

回復(fù)

使用道具 舉報(bào)

6#
ID:8222 發(fā)表于 2022-10-20 11:08 | 只看該作者
設(shè)一變量,初始值為0,然后檢測按鍵動作,變量加1,在1秒內(nèi)檢測到兩次按鍵動作,執(zhí)行繼電器動作,然后對變量清0。
回復(fù)

使用道具 舉報(bào)

7#
ID:688692 發(fā)表于 2022-10-20 11:31 | 只看該作者
思路:在基準(zhǔn)的中斷中,對一個變量定時(shí)+1.
每次檢測到上升沿,(這一次是1,上一次是0)先判斷這個變量累計(jì)的數(shù)是否小于1秒,如果是,執(zhí)行動作。
然后把這個變量清0
回復(fù)

使用道具 舉報(bào)

8#
ID:688692 發(fā)表于 2022-10-20 12:44 | 只看該作者
  1. #include <reg52.h>

  2. sbit Button=P2^0;
  3. sbit LED=P1^1;

  4. unsigned char Time_Count;

  5. void Timer0Init(void)                //50毫秒@12.000MHz
  6. {
  7.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  8.         TMOD |= 0x01;                //設(shè)置定時(shí)器模式
  9.         TL0 = 0xB0;                //設(shè)置定時(shí)初始值
  10.         TH0 = 0x3C;                //設(shè)置定時(shí)初始值
  11.         TF0 = 0;                //清除TF0標(biāo)志
  12.         TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
  13.         EA=1;
  14.         ET0=1;
  15. }

  16. void main()
  17. {
  18.         bit ButtonPrevVal,ButtonNowVal;
  19.         Timer0Init();
  20.         while(1)
  21.         {
  22.                 ButtonNowVal=Button;
  23.                 if(!ButtonPrevVal && ButtonNowVal)
  24.       {
  25.                           if(Time_Count<20){LED=!LED;}
  26.                                 Time_Count=0;
  27.                         }
  28.                 ButtonPrevVal=ButtonNowVal;
  29.         }
  30. }

  31. void timer0() interrupt 1
  32. {
  33.         TL0 = 0xB0;                //設(shè)置定時(shí)初始值
  34.         TH0 = 0x3C;                //設(shè)置定時(shí)初始值
  35.   Time_Count++;
  36. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

9#
ID:51321 發(fā)表于 2022-10-20 13:48 | 只看該作者
#include<reg51.h>
unsigned char flag,num,keyn;
sbit KEY=P1^0;
sbit LED=P1^1;
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<125;j++);
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>20)
{
num=0;
flag=0xff;
}
}
void keyscan()
{
if(P1.0==0)
{
delay(10);
TR0=1; //有效按鍵啟動定時(shí)器
if(P1.0==0)keyn++;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
num=0;
keyn=0;
while(1)
{
flag=0x00;
while(flag==0x00)//等待1秒定時(shí)結(jié)束
{
keyscan();
}
if(keyn>=2)
{
LED=0; //1秒內(nèi)按兩次鍵,燈亮
keyn=0;
TR0=0;
}
}
}


大神們  幫忙看看  
回復(fù)

使用道具 舉報(bào)

10#
ID:51321 發(fā)表于 2022-10-20 13:50 | 只看該作者
溫xyz 發(fā)表于 2022-10-20 11:08
設(shè)一變量,初始值為0,然后檢測按鍵動作,變量加1,在1秒內(nèi)檢測到兩次按鍵動作,執(zhí)行繼電器動作,然后對變 ...

難者不會 會者不難  ,感謝大神賜教
回復(fù)

使用道具 舉報(bào)

11#
ID:123289 發(fā)表于 2022-10-21 09:03 | 只看該作者
原始:高電平次數(shù)統(tǒng)計(jì)N=0,1S的計(jì)時(shí)器JS=0。
1、當(dāng)收到一個高電平后,起動一個1S的計(jì)時(shí)器!緢(zhí)行:N=1,JS=1000ms】
2、如果1S的計(jì)時(shí)器計(jì)時(shí)未完時(shí),又收到一個高電平,就啟動繼電器!緢(zhí)行:N=2,JS<>0】
3、如果1S的計(jì)時(shí)器計(jì)時(shí)計(jì)完了,再未測到高電平,就當(dāng)是放屁了。歸于原始狀態(tài)!綨=0,JS=0】
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表