找回密码
 注册
搜索
查看: 1183|回复: 0

[讨论] PT2257电子音量求助

[复制链接]
发表于 2006-3-25 08:29:00 | 显示全部楼层 |阅读模式
我采用普诚PT2257电子音量芯片,89S51单片机,用两个按键控制音量加和减。但我写的程序在音量加减是会跳跃,还会有杂音。程序如下,请那位熟悉的朋友告知原因,谢谢!
我得email:youliang.chen@163.com

SCL BIT P1.0
SDA BIT P1.1
DB1  EQU R1
DB10 EQU R2
ORG 0000H
MOV DB1, 00H
MOV DB10,00H
LJMP MAIN
MAIN:
     LJMP VOLINC
VOLINC:
     JB P3.0,VOLDEC; (判断音量+是否按下)
     ACALL VOL_DELAY20MS
     JB P3.0,VOLDEC
     MOV A,DB1;(将音量个位数放入寄存器A中)
     CJNE A,#0D,VOLINC1;(判断音量个位是否最大)
     MOV A,DB10;(将音量十位放入寄存器A中)
     CJNE A,#0D,VOLINC2;(判断音量十位是否最大)
     LJMP MAIN;(是最大就返回)
VOLINC1:
     DEC A;(音量个位减1)
     MOV DB1,A;(放入DB1中保存)
     ACALL VOL;(调用音量处理子程序)
     LJMP MAIN
VOLINC2:
      DEC A;(音量十位减1)
      MOV DB10,A;(放入DB10中保存)
      ACALL VOL;(调用音量处理程序)
      MOV DB1,#10D
      LJMP MAIN;(返回)
      RET

VOLDEC:
      JB P3.1,MAIN;(判断音量-是否按下)
      ACALL VOL_DELAY20MS
      JB P3.1,MAIN
      MOV A,DB1;(将音量个位数放入寄存器A中)
      CJNE A,#10D,VOLDEC1;(判断音量个位是否最小)
      MOV A,DB10;(将音量十位放入寄存器A中)
      CJNE A,#8D,VOLDEC2;(判断音量十位是否最小)
      LJMP MAIN
VOLDEC1:
      INC A;(音量个位加1)
      MOV DB1,A;(放入DB1中保存)
      ACALL VOL;(调用音量处理子程序)
      LJMP MAIN
VOLDEC2:
      INC A;(音量十位加1)
      MOV DB10,A;(放入DB10中保存)
      MOV DB1,#0D
      ACALL VOL;(调用音量处理程序)
      LJMP MAIN
      RET;(返回)
VOL:
     
      MOV R6,#88H;(将PT2257地址码放入R6中)
      NOP
      CLR SDA
      ACALL VOL_DELAY
      CLR SCL
      ACALL VOL_DELAY
      ACALL VOL_DATA
      MOV DPTR,#TAB1
      MOV A,DB10
      MOVC A,@A+DPTR
      MOV R6,A
      ACALL VOL_DATA
      MOV DPTR,#TAB2
      MOV A,DB1
      MOVC A,@A+DPTR
      MOV R6,A
      ACALL VOL_DATA
      SETB SCL
      ACALL VOL_DELAY
      ACALL VOL_DELAY20MS
      RET
VOL_DATA:
      MOV A,R6
      MOV R5,#8
VOL_DATA1:
      RLC A
      MOV SDA,C
      ACALL VOL_DELAY
      SETB SCL
      ACALL VOL_DELAY
      CLR SCL
      ACALL VOL_DELAY
      DJNZ R5,VOL_DATA1
      SETB SCL
      ACALL VOL_DELAY
      CLR SCL
      RET
VOL_DELAY:
      MOV R7,#4
      DJNZ R7,$
      RET
VOL_DELAY20MS:
      MOV R1,#40
VOL_DELAY20MS1:
      MOV R2,#250
      DJNZ R2,$
      DJNZ R1,VOL_DELAY20MS1
      RET
TAB1:
      DB 11100000B,11100001B,11100010B,11100011B,11100100B
      DB 11100101B,11100110B,11100111B
TAB2:
      DB 11010000B,11010001B,11010010B,11010011B,11010100B
      DB 11010101B,11010110B,11010111B,11011000B,11011001B
      END
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 06:24 , Processed in 0.065425 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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