全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

音量控制M62446的驱动C程序

[复制链接]
1263 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
音量控制M62446的驱动C程序
  音量控制M62446 m62446 pdf
  //-------------------------------------------------------------------------
  // M62446 drving routines, VER 1.0
  //
  // COPYRIGHT (C) 2000, Enbia Technology Inc.
  // Target: 8031
  // AUTHOR: STEVEN LUO
  //
  // Revision History:
  // 2001/1/5 - Original Version
  //
  //-------------------------------------------------------------------------
  #include &;reg51.h>
  #include <types.h>
  #include <intrins.h>
  #include <bin.h>
  extern BOOL PIN_M62446_LATCH;
  extern BOOL PIN_M62446_DATA;
  extern BOOL PIN_M62446_CLK;
  static idata WORD shadow_word00=0;
  static idata WORD shadow_word01=0;
  static idata WORD shadow_word10=0;
  static idata WORD shadow_word11=0; // for storing the control word status //
  static BOOL bM62446Muted; // Set when 62446 is muted
  static void Write_M62446_Word(WORD myword);
  //-------------------------------------------------------------------------
  // Name: Volume_Validate
  // Description:
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  static BYTE Volume_Validate(char vol)?
  if(vol<0)vol=0; // negative, should be 0
  else if(vol >80) vol=80; // >80, set to 80
  return 80 - vol; // Down to Up
  ?
  //-------------------------------------------------------------------------
  // Name: Mute_M62446
  // Description:
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Mute_M62446(void)?
  Write_M62446_Word(0xa141); // B1010000 1010000 01, B10100001_01000001
  Write_M62446_Word(0xa142);
  Write_M62446_Word(0xa143);
  bM62446Muted = 1;
  }
  //-------------------------------------------------------------------------
  // Name: UnMute_M62446
  // Description:
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void UnMute_M62446(void){
  shadow_word01&=0xfffc; shadow_word01|=0x01; Write_M62446_Word(shadow_word01);
  shadow_word10&=0xfffc; shadow_word10|=0x02; Write_M62446_Word(shadow_word10);
  shadow_word11&=0xfffc; shadow_word11|=0x03; Write_M62446_Word(shadow_word11);
  bM62446Muted = 0;
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Left
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Left(char vol){
  WORD temp;
  temp=Volume_Validate(vol);
  temp<<=9;
  shadow_word01&=0x01ff;
  shadow_word01|=temp;
  // DE=0;DF=1;
  shadow_word01&=0xfffc; shadow_word01|=0x01;
  if (bM62446Muted) return;
  Write_M62446_Word(shadow_word01);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Right
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Right(char vol){
  WORD temp;
  temp=Volume_Validate(vol);
  temp<<=2;
  shadow_word01&=0xfe03;
  shadow_word01|=temp;
  // DE=0;DF=1;
  shadow_word01&=0xfffc; shadow_word01|=0x01;
  if (bM62446Muted) return;
  Write_M62446_Word(shadow_word01);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Center
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Center(char vol){
  WORD temp;
  temp=Volume_Validate(vol);
  temp<<=9;
  shadow_word10&=0x01ff;
  shadow_word10|=temp;
  // DE=1;DF=0;
  shadow_word10&=0xfffc; shadow_word10|=0x02;
  if (bM62446Muted) return;
  Write_M62446_Word(shadow_word10);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_SubWoofer
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_SubWoofer(char vol){
  WORD temp;
  temp=Volume_Validate(vol);
  temp<<=2;
  shadow_word10&=0xfe03;
  shadow_word10|=temp;
  // DE=1;DF=0;
  shadow_word10&=0xfffc; shadow_word10|=0x02;
  if (bM62446Muted) return;
  Write_M62446_Word(shadow_word10);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_SurLeft
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_SurLeft(char vol){
  WORD temp;
  temp=Volume_Validate(vol);
  temp<<=9;
  shadow_word11&=0x01ff;
  shadow_word11|=temp;
  // DE=1;DF=1;
  shadow_word11&=0xfffc; shadow_word11|=0x03;
  if (bM62446Muted) return;
  Write_M62446_Word(shadow_word11);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_SurRight
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_SurRight(char vol){
  WORD temp;
  temp=Volume_Validate(vol);
  temp<<=2;
  shadow_word11&=0xfe03;
  shadow_word11|=temp;
  // DE=1;DF=1;
  shadow_word11&=0xfffc; shadow_word11|=0x03;
  if (bM62446Muted) return;
  Write_M62446_Word(shadow_word11);
  }
  static BYTE code Treble_Bass_TAB[11]={
  0x0e, // 0, -10db
  0x0c, // 1, -8db
  0x0b, // 2, -6db
  0x0a, // 3, -4db
  0x09, // 4, -2db
  0x00, // 5, 0db
  0x01, // 6, +2db
  0x02, // 7, +4db
  0x03, // 8, +6db
  0x04, // 9, +8db
  0x06 // 10, +10db
  };
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Treble
  // Description: This function Write 2 bytes to M62446
  // Arguments: 0-20,
  // 0: -10db
  // 10: 0db
  // 20 +10db
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Treble(BYTE Treble){
  WORD temp;
  Treble=Treble_Bass_TAB[Treble];
  temp=Treble;
  temp<<=12;
  shadow_word00&=0x0fff;
  shadow_word00|=temp;
  // DE=0;DF=0;
  shadow_word00&=0xfffc;
  Write_M62446_Word(shadow_word00);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Bass
  // Description: This function Write 2 bytes to M62446
  // Arguments: 0-20,
  // 0: -10db
  // 10: 0db
  // 20 +10db
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Bass(BYTE Bass){
  WORD temp;
  Bass=Treble_Bass_TAB[Bass];
  temp=Bass;
  temp<<=4;
  shadow_word00&=0xff0f;
  shadow_word00|=temp;
  // DE=0;DF=0;
  shadow_word00&=0xfffc;
  Write_M62446_Word(shadow_word00);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Bypass
  // Description: This function Write 2 bytes to M62446
  // Arguments: 1, bypass on, 0: off
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Bypass(BOOL bOnOff){
  if (bOnOff) shadow_word00 |= 0x0004; // On
  else shadow_word00 &= 0xfffb; // off
  // DE=0;DF=0;
  shadow_word00 &= 0xfffc;
  Write_M62446_Word(shadow_word00);
  }
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Output
  // Description: This function Write 2 bytes to M62446
  // Arguments: port=1-4, BYTE=1 or 0
  // Return value: none
  //-------------------------------------------------------------------------
  void Write_M62446_Output(BYTE port, BOOL bOnoff){
  WORD temp, mask=1;
  temp=bOnoff;
  temp <<= (12-port);
  mask <<= (12-port);
  shadow_word00&=~mask;
  shadow_word00|=temp;
  // DE=0;DF=0;
  shadow_word00&=0xfffc;
  Write_M62446_Word(shadow_word00);
  }
  #define DELAY() {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();
  _nop_(); _nop_();}
  //-------------------------------------------------------------------------
  // Name: Write_M62446_Word
  // Description: This function Write 2 bytes to M62446
  // Arguments:
  // Return value: none
  //-------------------------------------------------------------------------
  static void Write_M62446_Word(WORD myword){
  register BYTE i;
  PIN_M62446_LATCH=0;
  for (i=;i>0;--i){
  if(myword & 0x8000) PIN_M62446_DATA=http:///article/88/131/app/2008/1; // MSB first
  else PIN_M62446_DATA=http:///article/88/131/app/2008/0;
  myword<<=1; // Rotate Right
  DELAY();
  PIN_M62446_CLK=1;
  DELAY();
  PIN_M62446_CLK=0;
  }
  DELAY();
  PIN_M62446_LATCH=1;
  }

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表