|
楼主 |
发表于 2010-3-12 10:12:10
|
显示全部楼层
既然没人用过我就把我用试过的代码贴上,只是选择信号源和声音为什么这样子我自已也不是很清楚,但它是可以用的,希望那位知道的告诉一声音,这样就非常感谢。
//#include <16F628A.h>
#include <16F690.h>
//#FUSES NOWDT, INTRC_IO, PUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD, RESERVED
#FUSES NOWDT, INTRC_IO, NOPROTECT, NOBROWNOUT, NOMCLR, NOCPD, PUT, NOIESO, NOFCMEN, RESERVED
#use delay(clock=4000000)
#use i2c(Master,slow,sda=PIN_B4,scl=PIN_B6) //slow
#byte OPTION_REG=0x81
#bit pull_EN=OPTION_REG.8
#define Chip_address 0x88
#define Testing_Mode 0x80
#define Auto_Zero_Remain 0x40
#define Auto_Increment_Mode 0x20
#define reset_chip 0xfe
#define Source_Selector 0 //ÉùÒôÔ´Ñ¡Ôñ
#define Loudness 1 //¸ßÒô
#define Volume 2 //ÒôÁ¿
#define Treble 3 //ÖØÒô
#define Middle 5 //ÖÐÒô
#define Bass 4 //µÍÒô
#define Speaker_Attenuator_Left_Front 0x07
#define Speaker_Attenuator_Right_Front 0x0a
#define Speaker_Attenuator_Left_Rear 0x08
#define Speaker_Attenuator_Right_Rear 0x09
#define Source1 1
#define Source2 2
#define Source3 3
#define Source_Mute 4
#define max_db 14
void Data_send(char Commd,char Data)
{
i2c_start();
i2c_write(Chip_address);
i2c_write(Commd);
i2c_write(Data);
i2c_stop();
delay_ms(5);
}
void Led1_flash(void)
{
output_high(pin_a5);
delay_ms(1000);
output_low(pin_a5);
delay_ms(1000);
}
void Led2_flash(void)
{
output_high(pin_a4);
delay_ms(1000);
output_low(pin_a4);
delay_ms(1000);
}
void Initializtion_Speaker_Attenuator(void)
{
Data_send(Speaker_Attenuator_Right_Front,max_db);
Data_send(Speaker_Attenuator_Left_Front,max_db);
Data_send(Speaker_Attenuator_Left_Rear,max_db);
Data_send(Speaker_Attenuator_Right_Rear,max_db);
}
void main()
{
char i,x;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
delay_ms(3000);
while(1)
{
/*
//*******ͨµÀ1************************
i2c_start();
i2c_write(Chip_address);
i2c_write(Auto_Increment_Mode + Source_Selector);
i2c_write(0x78+Source1); //15db,ͨµÀ1
i2c_write(Volume); //ÒôÁ¿;
for(i=17;i>6;i--) //Ôö¼ÓÒôÁ¿
{
i2c_write(i);
}
output_high(pin_a4);
i2c_stop();
*/
//*******ͨµÀ2************************
/*
delay_ms(4000);
i2c_start();
i2c_write(Chip_address);
i2c_write(Auto_Increment_Mode + Source_Selector);
i2c_write(0x78+Source2); //15db,ͨµÀ2
i2c_write(Volume); //ÒôÁ¿;
for(i=17;i>6;i--) //Ôö¼ÓÒôÁ¿
i2c_write(i);
i2c_stop();
*/
/* //*******ͨµÀ3************************
delay_ms(2000);
i2c_start();
i2c_write(Chip_address);
i2c_write(Auto_Increment_Mode + Source_Selector);
i2c_write(0x78+Source3); //15db,ͨµÀ3
i2c_write(Volume); //ÒôÁ¿;
for(i=17;i>6;i--) //Ôö¼ÓÒôÁ¿5f
{
i2c_write(i); //15db
Led2_flash();
}
i2c_stop();
//****½áÊøͨµÀÑ¡Ôñ***************
*/
//*************ͨµÀ1*********************************************
delay_ms(4000);
i2c_start();
i2c_write(Chip_address);
i2c_write(Auto_Increment_Mode + Source_Selector);
i2c_write(0x78+Source2); //15db,Ñ¡Ôñµ½Í¨µÀ2
i2c_write(Volume); //ÒôÁ¿;
for(i=17;i>6;i--) //Ôö¼ÓÒôÁ¿
{
i2c_write(i);
}
i2c_stop();
//**********************Left_Front************************************
delay_ms(5);
Initializtion_Speaker_Attenuator(); //Êä³öË¥¼õÆ÷ÉèΪһÑù´ó
delay_ms(3000);
i2c_start();
i2c_write(Chip_address);
i2c_write(Speaker_Attenuator_Left_Front);
for(i=0x0e;i>0;i--) //¼õÉÙÒôÁ¿
{
i2c_write(i);
delay_ms(400);
}
for(i=0x11;i<0x20;i++) //¼õÉÙÒôÁ¿5f
{
i2c_write(i);
delay_ms(400);
}
for(i=0x20;i>0x10;i--) //Ôö¼ÓÒôÁ¿5f
{
i2c_write(i);
delay_ms(400);
}
for(i=0x0;i<0x0f;i++) //Ôö¼ÓÒôÁ¿5f
{
i2c_write(i);
delay_ms(400);
}
i2c_stop();
//********************Right**********************************
delay_ms(1000);
i2c_start();
i2c_write(Chip_address);
i2c_write(Speaker_Attenuator_Right_Front);
for(i=0x0e;i>0;i--) //¼õÉÙÒôÁ¿
{
i2c_write(i);
delay_ms(400);
}
for(i=0x11;i<0x20;i++) //¼õÉÙÒôÁ¿
{
i2c_write(i);
delay_ms(400);
}
for(i=0x20;i>0x10;i--) //Ôö¼ÓÒôÁ¿
{
i2c_write(i);
delay_ms(400);
}
for(i=0x0;i<0x0f;i++) //Ôö¼ÓÒôÁ¿
{
i2c_write(i);
delay_ms(400);
}
i2c_stop();
//*********************************************************
while(1);
}
} |
|