Volume_Handle.H這頭文件請到 http://www.zg4o1577.cn/bbs/dpj-19294-1.html 下載,下面的代碼是從一個收音機程序里面截取出來的.
/*-----------PT2257調音IC控制-----------*/
/*------ 外部晶振為 12MHz-------*/
#include "STC12C5620AD.H"
#include "Volume_Handle.H"
#include "delay.h"
/********************** 聲明外部變量**************************/
/********************** 定義變量**************************/
uchar Volume=20; //音量增益參數
/************ IIC2 開始*****************/
void IIC2_Start(void)
{
IIC2_SDA=1;
Delay_us(5);
IIC2_SCL=1;
Delay_us(5);
IIC2_SDA=0;
Delay_us(5);
IIC2_SCL=0;
Delay_us(5);
}
/************ IIC2 停止*****************/
void IIC2_Stop(void)
{
IIC2_SCL=0;
Delay_us(5);
IIC2_SDA=0;
Delay_us(5);
IIC2_SCL=1;
Delay_us(5);
IIC2_SDA=1;
Delay_us(5);
}
/************ IIC2 ACK 回應*****************/
void IIC2_ACK(void)
{
IIC2_SDA=0;
Delay_us(5);
IIC2_SCL=1;
Delay_us(5);
IIC2_SCL=0;
Delay_us(5);
IIC2_SDA=1;
Delay_us(5);
}
/************ IIC2 檢測 ACK 回應*****************/
bit IIC2_Test_ACK(void)
{
bit ErrorBit;
IIC2_SDA=1;
Delay_us(5);
IIC2_SCL=1;
Delay_us(5);
ErrorBit=IIC2_SDA;
Delay_us(5);
IIC2_SCL=0;
return ErrorBit;
}
/************ IIC2 寫入一字節*****************/
void IIC2_Write_Byte(unsigned char Input)
{
unsigned char Temp;
for(Temp=8;Temp>0;Temp--)
{
IIC2_SDA=(bit)(Input&0x80);
Delay_us(5);
IIC2_SCL=1;
Delay_us(5);
IIC2_SCL=0;
Delay_us(5);
Input=Input<<1;
}
}
/**********************改變音量參數**************************/
void Volume_Write(uchar Vol)
{
uchar Temp_H,Temp_L;
Temp_H=(Vol/10)|0xe0;
Temp_L=(Vol%10)|0xd0;
IIC2_Start(); //雙聲道同時改變,-10dB/Step
IIC2_Write_Byte(0x88); //寫PT2257地址
if(!IIC2_Test_ACK())
{
IIC2_Write_Byte(Temp_H);
IIC2_ACK();
IIC2_Write_Byte(Temp_L);
IIC2_ACK();
}
IIC2_Stop();
}
/**********************初始化音量參數**************************/
void Volume_Init()
{
//Volume_Write(0x78); //MUTE=OFF
Volume_Write(20); //-20dB
}