请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3125|回复: 8

为啥用独立按键k1控制蜂鸣器不行呀,是程序有问题吗,求大神帮忙

[复制链接]

5

主题

10

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2021-1-22 11:19:28 | 显示全部楼层 |阅读模式
        #include "reg52.h"

        typedef unsigned char u8;
        typedef unsigned int u16;

           sbit beep=P1^5;
           sbit k1=P3^1;


        void delay(u16 i)
        {
         while(i--);
         }
         
         void keypros()
         {
          if(k1==0)
          {
           delay(1000);
           if(k1==0)
           {
            beep=~beep;
                delay(5000);
                }
                while(!k1);
                }
                }

       
                 
          void main()
          {
          
           while (1)
           {
                 keypros();
                }
        }
回复

使用道具 举报

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2021-1-22 11:40:46 | 显示全部楼层
蜂鸣器想要实现发声需要有一个高低电平循环转换过程,也就是beep=~beep需要循环几次,循环次数取决于你想要的发声时长。
回复 支持 反对

使用道具 举报

5

主题

10

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2021-1-22 11:53:57 | 显示全部楼层
折袖 发表于 2021-1-22 11:40
蜂鸣器想要实现发声需要有一个高低电平循环转换过程,也就是beep=~beep需要循环几次,循环次数取决于你想要 ...

我知道怎样发声,但是用独立按键控制实现不了
回复 支持 反对

使用道具 举报

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
发表于 2021-1-22 22:01:54 | 显示全部楼层
威威 发表于 2021-1-22 11:53
我知道怎样发声,但是用独立按键控制实现不了

beep=~beep;
delay(5000);
这个延时函数5000如果晶振12KHZ 大约延时5MS  蜂鸣器 频率大约1.5-2.5KHZ 就是差不多0.66MS -0.4MS 有点超出范围了
试试降低延时时间,
还有就是你写的是按键按下 才触发蜂鸣器  试试长按不松手
回复 支持 反对

使用道具 举报

2

主题

9

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2021-1-23 16:03:54 | 显示全部楼层
本帖最后由 ots 于 2021-1-23 16:05 编辑

void keypros()          {           if(k1==0)   
        {            delay(1000);  

   if(k1==0)     
       {while(1)     //加个while   

          {beep=~beep;   

        delay(1102);}  //延时尽量小一点,5000也行声不香                 }   

           while(!k1);                 }                 }
回复 支持 反对

使用道具 举报

5

主题

10

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2021-1-23 21:44:36 | 显示全部楼层
liang123 发表于 2021-1-22 22:01
beep=~beep;
delay(5000);
这个延时函数5000如果晶振12KHZ 大约延时5MS  蜂鸣器 频率大约1.5-2.5KHZ 就 ...

好的
回复 支持 反对

使用道具 举报

5

主题

10

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2021-1-23 21:45:06 | 显示全部楼层
ots 发表于 2021-1-23 16:03
void keypros()          {           if(k1==0)   
        {            delay(1000);  

谢谢
回复 支持 反对

使用道具 举报

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
发表于 2021-1-24 22:02:46 | 显示全部楼层

这个延时函数5000如果晶振12KHZ 大约延时5MS
我这个计算的延时时间方式是错误的 请楼主不要参考 5000 延时不是5MS   
楼主不要参考
回复 支持 反对

使用道具 举报

1

主题

7

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2021-1-25 09:56:15 | 显示全部楼层
首先,你的蜂鸣器确定是有源的还是无源的,有源的蜂鸣器,因为里面已经有内部振荡电路了,你直接给高电平信号就行,如果是无源的,你就要给一定周期的高低电平振荡信号,最好不止一个周期,不然很容易不叫
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 03:55 , Processed in 0.085524 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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