找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 3560|回复: 10
收起左侧

蜂鸣器不响,是单片机程序的问题还是接错了?

[复制链接]
ID:932011 发表于 2021-6-10 19:38 | 显示全部楼层 |阅读模式
现在程序在仿真上可以正常运行,但是加上蜂鸣器之后并不响,请问是哪的原因?确实不知道该怎么修改了。。。
整图.jpg
程序如下
  1. LED_0    EQU    30H
  2. LED_1    EQU    31H
  3. LED_2    EQU    32H
  4. LED_3    EQU    33H
  5. BUFFER  EQU    34H           ;显示缓存
  6. ADC      EQU    35H
  7. TCNTA    EQU    36H
  8. TCNTB    EQU    37H
  9. H_TEMP   EQU    38H          ;液位上限
  10. L_TEMP   EQU    39H          ;液位下限
  11. FLAG     BIT    00H
  12. H_ALM    BIT    P3.0
  13. L_ALM    BIT    P3.1
  14. SOUND    BIT    P3.7
  15. CLOCK    BIT    P2.4
  16. ST        BIT    P2.5
  17. EOC      BIT    P2.6
  18. OE       BIT    P2.7
  19.           ORG    00H
  20.           SJMP   START
  21.           ORG    0BH
  22.           LJMP   INT_T0
  23.           ORG    1BH
  24.           LJMP   INT_T1
  25. START:   MOV    LED_0,#00H
  26.           MOV    LED_1,#00H
  27.           MOV    LED_2,#00H
  28.           MOV    DPTR,#TABLE     ;送段码表首地址
  29.           MOV    H_TEMP,#153     ;204/255=0.8  高于80%报警
  30.          MOV    L_TEMP,#77       ;77/255=0.3   低于30%报警
  31.          MOV    TMOD,#12H        ;开中断
  32.          MOV    TH0,#245            
  33.          MOV    TL0,#0
  34.          MOV    IE,#8AH              
  35.          CLR    C
  36.          SETB   TR0        ;为ADC0808提供时钟
  37. WAIT:   SETB   H_ALM
  38.          SETB   L_ALM
  39.          CLR    ST
  40.          SETB   ST
  41.          CLR    ST          ;启动转换
  42.          JNB    EOC,[        DISCUZ_CODE_1        ]nbsp;      ;等待输出结果
  43.          SETB   OE         ;允许输出
  44.          MOV    ADC,P1     ;读取A/D转换结果
  45.          CLR    OE         ;关闭输出
  46.          MOV    A,ADC       ;将A/D转换结果转换成BCD码
  47.          SUBB   A,L_TEMP       ;判断是否低于下限
  48.          JC     LALM
  49.          MOV    A,H_TEMP
  50.          MOV    R0,ADC
  51.          SUBB   A,R0           ;判断是否高于上限
  52.          JC     HALM
  53.          CLR    TR1
  54.          LJMP   PROC
  55. LALM:   CLR    L_ALM          ;低位报警
  56.          SETB   TR1
  57.          CLR    FLAG
  58.          LJMP   PROC
  59. HALM:   CLR    H_ALM          ;高位报警
  60.          SETB   TR1
  61.          SETB   FLAG
  62.          LJMP   PROC
  63. PROC:   MOV    A,ADC         ;数值转换
  64.          MOV    B,#51
  65.          DIV    AB
  66.          MOV    LED_2,A
  67.          MOV    A,B
  68.          MOV    B,#10
  69.          DIV    AB
  70.          MOV    LED_1,A
  71.          MOV    LED_0,B
  72.          LCALL  DISP            ;显示A/D转换结果
  73.          SJMP   WAIT
  74. INT_T0:  CPL    CLOCK          ;提供ADC0808时钟
  75.          RETI
  76. INT_T1:  CPL    SOUND
  77.          INC    TCNTA
  78.          MOV    A,TCNTA
  79.          JB     FLAG,I1         ;判断是低位报警还是高位报警
  80.          CJNE   A,#30,RETUNE     ;低位报警声
  81.          SJMP   I2
  82.       I1: CJNE   A,#20,RETUNE       ;高位报警声
  83.       I2: MOV    TCNTA,#0
  84.          INC    TCNTB
  85.          MOV    A,TCNTB
  86.          CJNE   A,#25,RETUNE
  87.          MOV    TCNTA,#0
  88.          MOV    TCNTB,#0
  89.          LCALL  DELAY2
  90. RETUNE:  RETI
  91. DISP:    MOV    A,LED_0         ;数码管显示子程序
  92.          MOVC   A,@A+DPTR       ;将字段码转换显示码
  93.          CLR    P2.3
  94.          MOV    P0,A
  95.          LCALL  DELAY
  96.          SETB   P2.3
  97.          MOV    A,LED_1
  98.          MOVC   A,@A+DPTR
  99.          CLR    P2.2
  100.          MOV    P0,A
  101.          LCALL  DELAY
  102.          SETB   P2.2
  103.          MOV    A,LED_2
  104.          MOVC   A,@A+DPTR
  105. ORL    A,#80H                            ;显示小数点
  106.               MOV    BUFFER+2,A       ;送显示缓存
  107.          CLR    P2.1
  108.          MOV    P0,A
  109.          LCALL  DELAY
  110.          SETB   P2.1
  111.          RET
  112. DELAY:  MOV    R6,#10          ;延时5ms
  113. D1:      MOV    R7,#250
  114.          DJNZ   R7,$
  115.          DJNZ   R6,D1
  116.          RET
  117. DELAY2: MOV    R5,#20
  118. D2:      MOV    R6,#20
  119. D3:      MOV    R7,#250
  120.          DJNZ   R7,$
  121.          DJNZ   R6,D3
  122.          DJNZ   R5,D2
  123.          RET
  124. TABLE:  DB     3FH,06H,5BH,4FH,66H    ;0,1,2,3,4 共阴极接法
  125.          DB     6DH,7DH,07H,7FH,6FH     ;5,6,7,8,9,
  126.          END
复制代码


回复

举报

ID:936299 发表于 2021-6-10 21:58 | 显示全部楼层
三极管有NPN和PNP之分,用错了就不响
回复

举报

ID:844772 发表于 2021-6-10 22:45 | 显示全部楼层
我觉得不仅不会响,也不会显示才对啊?1.数码管你说是共阴的,但三极管选错了,反正是模拟不如不要三极管算了;2.你程序按3.7接嗡鸣器的,且是有源才行;3.就是程序问题太多,主要是没按手册读adc8080,不知道模拟能行不,反正实际是不行的。
回复

举报

ID:927901 发表于 2021-6-10 23:09 | 显示全部楼层
按照你的电路,你的三极管应该用NPN型三极管,接法不变(B接I/O口,E接地,C接数码管)
回复

举报

ID:936321 发表于 2021-6-10 23:21 | 显示全部楼层
三极管有NPN和PNP之分的。三极管应该用NPN。改一下就行
回复

举报

ID:932011 发表于 2021-6-11 08:50 | 显示全部楼层
glinfei 发表于 2021-6-10 22:45
我觉得不仅不会响,也不会显示才对啊?1.数码管你说是共阴的,但三极管选错了,反正是模拟不如不要三极管算 ...

感谢回复!在仿真上程序可以运行的,蜂鸣器不响,按大家的建议改过来了,但是最后是改了蜂鸣器的参数试验成功的
回复

举报

ID:420836 发表于 2021-6-11 09:51 | 显示全部楼层
蜂鸣器不响,可能是接线不良、蜂鸣器不良或程序错误。
回复

举报

ID:123289 发表于 2021-6-11 10:54 | 显示全部楼层
程序太长,两条指令即可验证:
SETB   P3.1
……
CLR     P3.1
改改的R9的阻值试试(0.56K)。
回复

举报

ID:517951 发表于 2021-6-12 16:55 | 显示全部楼层
蜂鸣器想不想,要看蜂鸣器的类型,两种:
一种是内部有振荡电路的,通电就会发声。只需要控制PNP或者PNP的三极管一直导通就发出响声了。这种只能发出固定频率的声音,要播放歌曲,就勉为其难了。

一种是内部没有振荡电路,需要给PWM,或者如1khz的脉冲电流。  只控制PNP或者PNP的三极管一直导通就不发出响声了,优点是可以播放歌曲,缺点是驱动起来稍微复杂一点。
回复

举报

ID:637144 发表于 2021-6-14 22:42 | 显示全部楼层
可以用8550三极管
回复

举报

ID:937681 发表于 2021-6-15 08:28 来自触屏版 | 显示全部楼层
当小灯灭的时候是不是回响?如果是的话就是接线有问题,可以在R19左边加个非门,当小灯亮单片机11引脚是低电平而为了让三极管导通需要接高电平。
回复

举报

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

本版积分规则

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

Powered by 单片机教程网

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