找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2261|回复: 10
收起左侧

想请教各位单片机程序,当p1.0处开关闭合,只点击p2.0,让扬声器不响

[复制链接]
ID:784270 发表于 2020-6-20 17:11 | 显示全部楼层 |阅读模式
想请教各位,本人想做一个霍尔传感报警器,P1.0处开关模拟霍尔元件,当开关闭合霍尔元件触发,扬声器报警,此时按下p2.0处开关,报警消失。但我遇到问题是如果p1.0处开关没有打开,只点击p2.0扬声器还会继续报警。还想请各位帮我看一下。

模拟电路图

模拟电路图

单片机源程序如下:

  1. #include<reg51.h>
  2. sbit sound=P1^7;
  3. sbit button=P1^0;
  4. sbit k1=P2^0;
  5. void delay(int i)
  6. {while(i--);}

  7. void main()
  8. {        while(1)
  9.         {        if(button==0)
  10.                 {        while(1)
  11.                         {
  12.                         sound=~sound;
  13.                          delay(10);

  14.                         if(!k1)
  15.                         {delay(100);
  16.                         if(!k1)
  17.                         break;
  18.                          }
  19.                         }
  20.                 }
  21.          }
  22. }
复制代码

回复

使用道具 举报

ID:332444 发表于 2020-6-20 17:58 | 显示全部楼层
显然还是继续报警,没错,都用触点按键就不会出现没打开的开关。
回复

使用道具 举报

ID:94031 发表于 2020-6-20 20:50 | 显示全部楼层
你应该设置一个报警保持灯,当报警来时(P10低电平),P17发警报音,此时按P20报警保持灯亮,报警音停,直到报警消除(P10高电平),报警保持灯灭。
回复

使用道具 举报

ID:277948 发表于 2020-6-20 20:53 | 显示全部楼层
我手头没有keil4软件 goto语句帮我验证一下,这里我写了两个程序
#include<reg51.h>
sbit sound=P1^7;
sbit button=P1^0;
sbit k1=P2^0;
void delay(int i)
{while(i--);}
loop:
void main()
{   
        while(1)
        {   
                if(button==0)
                {     
                        delay(100);
                        sound=1;
                        if(k1==0)
                        {
                                delay(100);
                                if(k1==0)
                                sound=0;
                        }
                        while(!k1);
                        goto loop;
                }
         }
}


#include<reg51.h>
sbit sound=P1^7;
sbit button=P1^0;
sbit k1=P2^0;
void delay(int i)
{while(i--);}
void main()
{  
        sound=0;  
        while(1)
        {   
                        if(button==0)
                        {     
                               
                                sound=~sound;
//                                sound=0;
                                while(!k1)   //或者将下一条语句改为设立一个标志为例如flag=0;if(flag==0)sound=~sound;
                                        while(1)
                                        sound=~sound;       
                                        delay(100);
//                                        sound=1;
                        }
                        goto loop;
                }
         }
}

回复

使用道具 举报

ID:94031 发表于 2020-6-20 21:19 | 显示全部楼层
#include<reg51.h>
sbit sound=P1^7;//报警
sbit button=P1^0;//传感器
sbit k1=P2^0;//消铃
void delay(int i)
{while(i--);}

void main()
{
        while(1)
        {   
    if(button==0 && k1!=0)//
                {   
                  sound=~sound;
                        delay(10);
                }
         }
}
回复

使用道具 举报

ID:190832 发表于 2020-6-20 21:48 | 显示全部楼层
这个还需要用单片机,传感器、蜂鸣器
回复

使用道具 举报

ID:190832 发表于 2020-6-20 21:50 | 显示全部楼层
这还需要单片机吗???传感器、蜂鸣器、开关三个器件串起来不就行啦???
回复

使用道具 举报

ID:213173 发表于 2020-6-20 22:07 | 显示全部楼层
设置2个标志位记录霍尔和按键的状态。
  1. #include<reg51.h>

  2. sbit k1=P2^0;
  3. sbit button=P1^0;
  4. sbit sound=P1^7;

  5. bit flag1,flag2;

  6. void delay(int i)
  7. {
  8.         while(i--);
  9. }

  10. void main()
  11. {
  12.         while(1)
  13.         {
  14.                 if(button==0)
  15.                 {
  16.                         flag1=1;
  17.                 }       
  18.                 else
  19.                 {
  20.                         flag1=0;
  21.                         flag2=0;
  22.                 }

  23.                 if(!k1)
  24.                 {
  25.                         delay(20);//消抖
  26.                         if(!k1)
  27.                         {
  28.                                 flag2=1;
  29.                         }
  30.                 }       

  31.                 if(flag1==1&&flag2==0)
  32.                 {
  33.                         sound=~sound;//2.5KHz
  34.                         delay(20);
  35.                 }
  36.                 else sound=1;
  37.         }
  38. }
复制代码
回复

使用道具 举报

ID:784270 发表于 2020-6-21 07:51 | 显示全部楼层
hange_v 发表于 2020-6-20 21:50
这还需要单片机吗???传感器、蜂鸣器、开关三个器件串起来不就行啦???

老师,要求用单片机来实现
回复

使用道具 举报

ID:784270 发表于 2020-6-21 09:40 | 显示全部楼层
xuyaqi 发表于 2020-6-20 21:19
#include
sbit sound=P1^7;//报警
sbit button=P1^0;//传感器

谢谢你给的思路
回复

使用道具 举报

ID:784270 发表于 2020-6-21 12:02 | 显示全部楼层
我是华夏学院学生,如果是本校学生,请勿抄我的作业
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表