📄 card.cpp
字号:
}
break;
/////////
case KEY_IPOD_BACK:
if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
{
while(IpodLongKey)
{
TurnOnLed(MS_30000);
wStatusDelay=0;
SendContextButtonStatus(PREVIOUS_TRACK);
while(wStatusDelay < MS_50);
}
}
break;
///////
case KEY_IPOD_UP:
if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
{
while(IpodLongKey)
{
TurnOnLed(MS_30000);
wStatusDelay=0;
SendContextButtonStatus(UP_ARROW);
while(wStatusDelay < MS_50);
}
}
break;
/////
case KEY_IPOD_DOWNP:
if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
{
while(IpodLongKey)
{
TurnOnLed(MS_30000);
wStatusDelay=0;
SendContextButtonStatus(DOWN_ARROW);
while(wStatusDelay < MS_50);
}
}
break;
///////////////////////////
case KEY_IPOD_STAUS:
if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
{TurnOnLed(MS_30000);
get_ipod_play_staus();
UartReceive = UART_RECEIVE;
}
break;
case KEY_IPOD_MENU:
if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
{
TurnOnLed(MS_30000);
SendContextButtonStatus(MENU);
}
break;
////////////////////BLUETOOTH附加功能
case KEY_HAND_UP:
if(FlagBuff&BT_AUDIO_ON)
send_bt_command((prog_uchar *)McuAnswerReq);
break;
case KEY_HAND_DOWN:
if(FlagBuff&BT_AUDIO_ON)
send_bt_command((prog_uchar *)McuHangUpReq);
break;
///////////////////////////////////////////////////
case KEY_PRIVACY:
if(FlagBuff & BT_AUDIO_ON)
{
BTTxBuff[2] = 0x01;
if(FlagBuff & FM_MUTE_ON)
{
//PORTB &= ~FM_MUTE; //Turn on FM
I2cWriteByteData(0x02,(~ENABLE_MUTE&PILOT_PRE_EMPH_AMPL));
FlagBuff &= ~FM_MUTE_ON;
BTTxBuff[3] = 0x00;//0x03;//0x02; //No privacy
BTTxBuff[4] = 0x01;//0x03;//0x02;
}
else
{
//PORTB |= FM_MUTE; //Turn off FM
I2cWriteByteData(0x02,(ENABLE_MUTE|PILOT_PRE_EMPH_AMPL));
FlagBuff |= FM_MUTE_ON;
BTTxBuff[3] = 0x01;//0x03;//0x01; //Privacy
BTTxBuff[4] = 0x02;//0x03;//0x01;
}
BTTxConfig();
TurnOnLed(MS_30000);
}
break;
/////////
case KEY_OFF_BLUETOOTH: //关闭蓝牙
send_bt_command((prog_uchar *)McuHfPownOnOffReq);
break;
//////////
default:
break;
}
}
}
//////////////////////////////////写EEROM数据
void write_data_to_eeprom(unsigned int addr,unsigned int data)
{
/*
unsigned char addrbuff;
addrbuff=addr;
while (!eeprom_is_ready())
{
asm("wdr");
}
eeprom_write_byte((uint8_t *) &addrbuff,*(uint8_t *)&data+1);
while (!eeprom_is_ready())
{
asm("wdr");
}
addrbuff++;
eeprom_write_byte((uint8_t *)&addrbuff,*(uint8_t *)&data);
while (!eeprom_is_ready())
{
asm("wdr");
}
*/ //low byte
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address and data registers */
EEAR = addr;
EEDR = *(unsigned char *)&data;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
while(EECR & (1<<EEWE));
//high byte
EEAR=addr+1;
EEDR=*((unsigned char *)&data+1);
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
// while(EECR & (1<<EEWE));
}
///////////////////////////////
void write_fm_data_to_eeprom(unsigned int addr,unsigned int data)
{
if(bReleaseKey == TRUE)
{
if(bFMFrequenceChange == TRUE)
{
bFMFrequenceChange = FALSE;
write_data_to_eeprom(addr,data);
}
}
}
///////////////////////////////////////////读EEROM数据
unsigned int read_data_from_eeprom(unsigned int addr)
{
unsigned int databuff;
/*
while (!eeprom_is_ready())
{
asm("wdr");
}
databuff=eeprom_read_word((uint16_t *)&addr);
return databuff;
*/
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address register */
EEAR = addr+1;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
databuff=EEDR;
databuff<<=8;
while(EECR & (1<<EEWE));
EEAR = addr;
EECR |= (1<<EERE);
databuff+=EEDR;
return databuff;
}
////////////////////////////////////////
void retry_cp_rest(void)
{
if(FMTxStatus == CP_RESET_DELAY_STATUS)
{
if(wStatusDelay > MS_5000)
{
if(TxRetryCounts1> 0)
{
TxRetryCounts1--;
FMTxStatus = TX_SYN_CODE_STATUS;
//bTxCommand = TRUE;
//wStatusDelay = 0;
}
else
{
bTxBuffLock = FALSE;
UartReceive = UART_RECEIVE;
SendIdentify();
//bTxCommand = FALSE;
FMTxStatus = IDENTIFY_STATUS;
//bTxCommand = TRUE;
//wStatusDelay = 0;
}
bTxCommand = TRUE;
wStatusDelay = 0;
}
}
}
//////////////////
void bluetooth_lcd_display(void) //电话号码LCD显示
{
unsigned char i,data_long,j;
unsigned char DisplayDigital[BtRxData[2]-2];
if(BtRxDataPackOver)
{
if(BtRxData[2]==HF_MCU_CALLER_ID_IND)
{
if((BtRxData[2]-2)>LCD_DIPLAY_LENG)
data_long=LCD_DIPLAY_LENG;
else
data_long=BtRxData[2]-2;
for(i=0;i<5;i++)
DisplayDigital[9-i]=BtRxData[3+i]; //LCD前五位显示
for(j=0;i<data_long;i++,j++)
DisplayDigital[j]=BtRxData[i]; //LCD后五位显示
if(data_long<LCD_DIPLAY_LENG) //如果显示位数小于LCD字段长度
for(i=0;i<(LCD_DIPLAY_LENG-data_long);i++)
DisplayDigital[4-i]=10; //后面字段不显示
for(i=0;i<data_long;i++)
DisplayBuff[i]=LCDDigitalToSegment[DisplayDigital[i]];
DisplayFrequence();
}
}
BtRxDataPackOver=0;
}
/////////////bluetooth transmiting staus
void FM_bluetooth_transmit_display(void) //来电时状态检测与转换转换
{
//#if defined(FM_CUP_BLUETOOTH) || defined(FM_CUP_RECORD_BLUETOOTH)
if(FlagBuff & BT_AUDIO_ON) //是否有电话进来 蓝牙状态
{
if(!(FlagBuff & BT_AUDIO_ON_HOLD))
{
bluetooth_lcd_display();
PORTB &= ~BT_MUTE;
FlagBuff |= BT_AUDIO_ON_HOLD;
FlagBuff1 &= MICROPHONE_MUTE_ON;
if(!(FlagBuff & AUDIO_TRANSMIT)) //是否用FM传输音频
{
PORTC |= KT0801_RESET;
KT0801Configuration(FmFrequenceData);
FlagBuff |= (AUDIO_TRANSMIT | AUDIO_ON);
FlagBuff &= ~FM_MUTE_ON; //开启FM音频发送,关闭私人模式
WriteCommand(LCD_ON);
FlagBuff1 |= LCD_LIGHT_KEEP;
}
if(FMTxStatus == AUTHENTICATION_FINISH_STATUS)
{
ReadFlash(TxBuff,(prog_uchar *)GetPlayStatus,GET_PLAY_STATUS_LEN);
WriteUart(GET_PLAY_STATUS_LEN,WAIT_TX);
// FlagBuff1 &= ~GET_IPOD_PLAY_STATUS;
}
}
}
else //IPOD 播放状态
{
if(FlagBuff & BT_AUDIO_ON_HOLD)
{
FmFrequenceToLcdDiplaySub(FmFrequenceData);
FlagBuff &= ~BT_AUDIO_ON_HOLD;
PORTB |= BT_MUTE; //如果挂机则关闭蓝牙音频
// if(FlagBuff & FM_MUTE_ON) //是否用耳机,关闭FM
// {
// I2cWriteByteData(0x02,(~ENABLE_MUTE&PILOT_PRE_EMPH_AMPL));
// FlagBuff &= ~FM_MUTE_ON;
// }
// if(FlagBuff1 & GET_IPOD_PLAY_STATUS)
{
// FlagBuff1 &= ~GET_IPOD_PLAY_STATUS;
if(FlagBuff1 & IPOD_PLAY)
{
SendContextButtonStatus(PLAY);//PRESS_PAUSE_KEY); //如果处于播放状态,挂机后则继续播放
FMTxStatus1 = CONTEX_BOTTON_PRESS_STATUS;
bTxCommand1 = TRUE;
wStatusDelay1 = 0;
}
}
}
}
}
/////////////FM_audio on or off
void FM_audio_test(void)
{
if(!(FlagBuff & BT_AUDIO_ON))
{
if(FlagBuff & AUDIO_TRANSMIT)
{
if(!(FlagBuff & AUDIO_ON))
{
if(wAudioDetectDelay > MS_55000)
{
FlagBuff &= ~AUDIO_TRANSMIT; //IPOD无音频输入时时关闭FM
PORTC &= ~KT0801_RESET;
LCDFlashTime = 0;
}
}
}
else
{
if(FlagBuff & AUDIO_ON)
{
PORTC |= KT0801_RESET;
KT0801Configuration(FmFrequenceData);
FlagBuff |= AUDIO_TRANSMIT; //IPOD有音频输入,且设置FM输出时,打开FM发送
FlagBuff &= ~FM_MUTE_ON;
WriteCommand(LCD_ON);
FlagBuff1 |= LCD_LIGHT_KEEP;
}
}
}
else
{
cli();
wAudioDetectDelay = 0;
sei();
}
}
///////////////
void led_work_delay(void)
{
if(B_10ms)
{
B_10ms=0;
if(LedWorkMode == LED_ON_DELAY)
{
if(wLedOffDelay > wLedTurnOnTime)
{
PORTC |= LED;
LedWorkMode = LED_OFF;
}
}
}
}
/////////////////////////////////////////////////////////////主控程序
int main(void)
{
io_init();
timers_init();
InitWdt();
WriteCommand(SYS_DIS);
adc_init();
spi_init();
uart_init();
extint_init();
sei();
TurnOnLed(MS_30000);
lcd_init();
////////////
while(1)
{
asm("wdr");
PORTC=0x0ff;
wStatusDelay = 0;
while(wStatusDelay < MS_60)
{
asm("wdr");
}
PORTC=0;
wStatusDelay = 0;
while(wStatusDelay < MS_60)
{
asm("wdr");
}
}
///////
PORTD |= (BT_POWER_ON | KT0801_POWER_ON);
PORTC &= ~KT0801_RESET;
wStatusDelay = 0;
while(wStatusDelay < MS_30)
{
asm("wdr");
}
PORTC |= KT0801_RESET;
/////////EEPROMM 读写操作
if(read_data_from_eeprom(INIT_EEPROM_ADDR)==TEST_DATA)
FmFrequenceData=read_data_from_eeprom(EEPROM_FM_DATA_ADDR);
else
{ write_data_to_eeprom(INIT_EEPROM_ADDR,TEST_DATA);
FmFrequenceData=FIRST_INIT_DATA;
}
////////////////////
KT0801Configuration(FmFrequenceData);
FlagBuff |= (AUDIO_TRANSMIT | AUDIO_ON); //Turn off mute because FlagBuff is inialized as 0
wStatusDelay = 0;
while(wStatusDelay < MS_100)
{
asm("wdr");
}
////////lcd display
FmFrequenceToLcdDiplaySub(FmFrequenceData);
while(1)
{
asm("wdr");
// TODO: Add your code here
//ad_key_scan();
led_work_delay();
ipod_power_test(); //IPOD上电检测
ipod_receiving_pack(); //数据包接收
ipod_key_dothing();
asm("wdr");
write_fm_data_to_eeprom(EEPROM_FM_DATA_ADDR,FmFrequenceData);
retry_cp_rest(); //重复CP初始化,发送ID认证
FM_bluetooth_transmit_display(); //蓝牙打开时状态与显示
FM_audio_test(); //FM音频检测
}
}
/*
if(!(FlagBuff & AUDIO_TRANSMIT))
{
LCDFlash();
}
*/
/*
if(FlagBuff1 & LCD_LIGHT)
{
if(!(FlagBuff1 & LCD_LIGHT_KEEP))
{
FlagBuff1 |= LCD_LIGHT_KEEP;
WriteCommand(LCD_OFF);
}
}
else
{
if(FlagBuff1 & LCD_LIGHT_KEEP)
{
FlagBuff1 &= ~LCD_LIGHT_KEEP;
WriteCommand(LCD_ON);
}
}
}*/
//#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -