欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機按鍵控制無源蜂鳴器,求老師指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:379175 發表于 2018-8-14 05:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這編程只是控制按鍵,按下蜂鳴器發聲,松開停止發聲。怎么能實現按一下發聲,再按一下停止。

#include "reg52.h"               
typedef unsigned int u16;         
typedef unsigned char u8;
sbit SPK=P1^5;
sbit k4=P3^3;
void delay(u16 i)
{
        while(i--);        
}
void anjian()
{
if(k4==0)
  {
   delay(100);
   SPK=0;
   delay(100);
   SPK=1;
  }        
else
    {
     SPK=1;
    }
}
void main()
{
while(1)
{
anjian();
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:386027 發表于 2018-8-14 09:18 | 只看該作者
#include "reg52.h"               
typedef unsigned int u16;         
typedef unsigned char u8;
sbit SPK=P1^5;
sbit k4=P3^3;
u16 a;
void delay(u16 i)
{
        while(i--);        
}
void anjian()
{
if(k4==0||a==0)
{
   delay(100);
   SPK=0;
   a=1;
  }         
if(key4==0||a==1)
{
   delay(100);
   SPK=1;
   a=0;
}
void main()
{
while(1)
{
anjian();
}
}
回復

使用道具 舉報

板凳
ID:84765 發表于 2018-8-14 09:36 | 只看該作者
這編程只是控制按鍵,按下蜂鳴器發聲,松開停止發聲。怎么能實現按一下發聲,再按一下停止。
#include "reg52.h"               
typedef unsigned int u16;         
typedef unsigned char u8;
u16 a=0;//計數
sbit SPK=P1^5;
sbit k4=P3^3;
void delay(u16 i)
{
         while(i--);        
}
void anjian()
{
if(k4==0)
   {
   while(!k4);
   a++;
   delay(50);
   }   
    if(a==0)//計數a=0時蜂鳴器不響
     {
       SPK=1;
     }

    if(a==1)//計數a=1時蜂鳴器響
     {
    delay(100);
    SPK=0;
    delay(100);
    SPK=1;
     }

    if(a==2)//計數a=2 a賦值0 蜂鳴器不響
     {
      SPK=1;
      a=0;
     }   
}
void main()
{
while(1)
{
anjian();
}
}
回復

使用道具 舉報

地板
ID:295874 發表于 2018-8-14 10:01 | 只看該作者
增加關于按鍵次數的計數器,計數器為1,蜂鳴器發聲音,計數器為2,停止發聲。
回復

使用道具 舉報

5#
ID:382454 發表于 2018-8-14 11:32 | 只看該作者
用定時器做成方波發生器,之后編寫一個按鍵控制TR0=~TR0取反即可。
也就是按一下鍵,取反一下定時器的開啟或關閉。這不就是按一下,停止,再按一下工作么。
回復

使用道具 舉報

6#
ID:221865 發表于 2018-8-14 20:02 | 只看該作者
用一個標志位就可以了,當按鍵按下的時候,標志位取反,需考慮按鍵抖動。
回復

使用道具 舉報

7#
ID:386397 發表于 2018-8-15 09:16 | 只看該作者
在關閉蜂鳴器后,對按鍵進行復位操作,關閉按鍵影響就可以了
回復

使用道具 舉報

8#
ID:379175 發表于 2018-8-16 12:25 | 只看該作者
zq25315513966 發表于 2018-8-14 09:18
#include "reg52.h"               
typedef unsigned int u16;         
typedef unsigned char u8;

你這是不是控制有源蜂鳴器的啊?
回復

使用道具 舉報

9#
ID:274129 發表于 2018-8-16 17:26 | 只看該作者
無源蜂鳴器加一個脈沖就可以了
回復

使用道具 舉報

10#
ID:213173 發表于 2018-8-16 21:02 | 只看該作者
給你一個按鍵控制無源蜂鳴器驅動程序參考
#include "reg52.h"               
typedef unsigned int u16;         
typedef unsigned char u8;
sbit Buzzer=P1^5;
sbit key=P3^3;
bit sign=0;
/*
void delay(u16 i)
{
        while(i--);        
}*/
void Timer0Init()        //250微秒@12.000MHz
{
        TMOD= 0x02;                //設置定時器模式
        TL0 = 0x06;                //設置定時初值
        TH0 = 0x06;                //設置定時重載值
        TR0 = 1;                        //定時器0開始計時
        EA=1;                                //開總中斷
        ET0=1;                        //開定時器0中斷
}

void anjian()
{
        static bit key_lock=0;//按鍵自鎖標志
        static u8 count=0;//消抖計數變量               
        if(!key)
        {
                if((count++>=100)&&(key_lock==0))
                {
                        key_lock=1;                        //按鍵自鎖標志置1
                        sign=~sign;                        //蜂鳴器使能標志取反
                }
        }        
        else
        {
                key_lock=0;                                //按鍵自鎖標志清0
                count=0;                                        //消抖計數清0
        }
}
void main()
{
        Timer0Init();
        while(1)
        {
                anjian();
        }
}
void timer0() interrupt 1
{
        if(sign==1)                //蜂鳴器使能
                Buzzer=~Buzzer;//2KHz方波
        else Buzzer=1;//蜂鳴器復位
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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