📄 radio.c
字号:
/*-TAB=2-------------------------------------------------------------------*/
/**------------------------------------------------------------------------*
* *
* NAME:radio.C *
* *
* *
* UPDATE: 2002/8/15 YCD *
* *
* *
* *
*-------------------------------------------------------------------------*/
#include "..\SRC\ZM.H"
#include "..\SRC\radio.h"
#include "..\SRC\KEY.h"
#include "..\SRC\display.h"
void DelayMs(BYTE aCount);
void HideIcon(BYTE aIcon);
void ShowIcon(BYTE aIcon);
void WriteRadio(void);
void RadioMonoProc(void);
void PopFmFrequency(void);
void PopAmFrequency(void);
void ClrRadioCLK(void);
BYTE gRadioBuf[4]; /*24 23...1 0 HIGH-->LOW */
bit gboolOnlyMono;
extern BYTE Vw_FMBuf[3];
extern BYTE Vw_AMBuf[3];
bit gboolFmEnter;
bit gboolAmEnter;
BYTE gAsmToCRtnValue;
bit gboolSt;
bit gRadioStMo=P1.3;
bit gRadioCLK=P1.2;
/**
*@void InitRadio(void)
*@update 2002/8/23
*/
void InitRadio(void)
{
gboolFmEnter=0;
gboolAmEnter=0;
Lsb_InitRadio();
}
/**
*@void RadioUpSearch(BYTE aBand)
*@update 2002/8/23
*/
void RadioSearch(BYTE aBand,BYTE aUpOrDow)
{
unionByteToWord Frq;
WORD Begin,End,Level;
aBand&=0x18;
if(aBand==BAND_FM){
Begin=FM_BEGIN_FREQUENCY;
End=FM_END_FREQUENCY;
Level=FM_LEVEL;
}
else{
Begin=AM_BEGIN_FREQUENCY;
End=AM_END_FREQUENCY;
Level=AM_LEVEL;
}
gRadioBuf[0]=PRESET_MODE|aBand|PORT_0|SEARCH_LEVEL_0;
Frq.mByte.mHi=gRadioBuf[1]&0X7f;
Frq.mByte.mLow=gRadioBuf[2];
if(aUpOrDow) Frq.mInt+=Level;
else Frq.mInt-=Level;
if(Frq.mInt>End) Frq.mInt=Begin;
else if(Frq.mInt<Begin) Frq.mInt=End;
gRadioBuf[1]=Frq.mByte.mHi;
gRadioBuf[2]=Frq.mByte.mLow;
WriteRadio();
}
/**
*@void RadioUpSearch(BYTE aBand)
*@update 2002/8/23
*/
void RadioUpSearch(BYTE aBand)
{
RadioSearch(aBand,1);
}
/**
*@void RadioDownSearch(BYTE aBand)
*@update 2002/8/23
*/
void RadioDownSearch(BYTE aBand)
{
RadioSearch(aBand,0);
}
/**
*@void SaveDataFromAt24c(BYTE aAt24cAddr,BYTE aLen)
*@default Buf: gRadioBuf
*@update 2002/8/23
*/
void Lsb_WriteAt24c(WORD anAddrLen);
void SaveDataToAt24c(BYTE aAt24cAddr,BYTE aLen)
{
WORD Addr_Len;
if(aLen<5 && aLen>0){
Addr_Len=aAt24cAddr;
Addr_Len<<=8;
Addr_Len|=aLen;
Lsb_WriteAt24c(Addr_Len);
}
}
/**
*@void SaveDataFromAt24c(BYTE aAt24cAddr,BYTE aLen)
*@default Buf: gRadioBuf
*@update 2002/8/23
*/
void Lsb_ReadAt24c(WORD anAddrLen);
void LoadDataFromAt24c(BYTE aAt24cAddr,BYTE aLen)
{
WORD Addr_Len;
if(aLen<5 && aLen>0){
Addr_Len=aAt24cAddr;
Addr_Len<<=8;
Addr_Len|=aLen;
RadioMonoProc();
Lsb_ReadAt24c(Addr_Len);
}
}
/**
*@void SaveRadioToFlash(BYTE aNumber)
*@update 2002/8/23
*/
void SaveRadioToFlash(BYTE aNumber)
{
aNumber<<=2;
if(aNumber<FLASH_LEN){
Lsb_ReadRadio();
gRadioBuf[3]=0x55;
SaveDataToAt24c(aNumber,4);
}
}
/**
*@void LoadRadioFromFlash(BYTE aNumber)
*@update 2002/8/23
*/
void LoadRadioFromFlash(BYTE aNumber)
{
aNumber<<=2;
if(aNumber<FLASH_LEN){
LoadDataFromAt24c(aNumber,4);
if(gRadioBuf[3]==0x55){
gRadioBuf[0]&=0x2f;
WriteRadio();
}
}
}
/**
*@void RadioFm(void)
*@update 2002/9/8
*/
void LocalRadioFm(void)
{
BYTE Addr=BAND_FM_BEGIN_ADDR*4;
if(gboolFmEnter==1) PopFmFrequency();
else {
LoadDataFromAt24c(Addr,4);
if(gRadioBuf[3]!=0x55){
gRadioBuf[0]=0X00;
gRadioBuf[1]=0X1e;
gRadioBuf[2]=0Xc6;
}
}
gRadioBuf[0]&=0x2f;
gboolOnlyMono=0;
WriteRadio();
ClrRadioCLK();
}
/**
*@void RadioFm(void)
*@update 2002/9/8
*/
void LocalRadioAm(void)
{
BYTE Addr=BAND_AM_BEGIN_ADDR*4;
if(gboolAmEnter) PopAmFrequency();
else{
LoadDataFromAt24c(Addr,4);
if(gRadioBuf[3]!=0x55){
gRadioBuf[0]=PRESET_MODE|BAND_AM|PORT_0|SEARCH_LEVEL_0;
gRadioBuf[1]=0x02;
gRadioBuf[2]=0x12;
}
}
gRadioBuf[0]&=0x2f;
gboolOnlyMono=0;
WriteRadio();
ClrRadioCLK();
}
/**
*@WORD GetRadioFrequency(void)
*@update 2002/8/23
*/
WORD GetRadioFrequency(void)
{
unionByteToWord Data;
Data.mByte.mHi=gRadioBuf[1]&0x7f;
Data.mByte.mLow=gRadioBuf[2];
return(Data.mInt);
}
/**
*@WORD GetRadioFrequency(void)
*@update 2002/8/23
*/
WORD GetRadioCurValue(void)
{
unionByteToWord Data;
Data.mByte.mHi=gRadioBuf[1]&0x7f;
Data.mByte.mLow=gRadioBuf[2];
return(Data.mInt);
}
/**
*@updte 2002/9/18
*@void WriteRadio(void)
*/
void WriteRadio(void)
{
RadioMonoProc();
Lsb_WriteRadio();
}
/**
*@void InitRadio(void)
*@update 2002/8/23
*/
void RadioMonoProc(void)
{
if(gboolOnlyMono) gRadioBuf[0]|=0x20;
else gRadioBuf[0]&=0xdf;
}
/**
*@void PushFmFrequency(void)
*@update 2002/8/23
*/
void PushFmFrequency(void)
{
gboolFmEnter=1;
Vw_FMBuf[0]=gRadioBuf[0];
Vw_FMBuf[1]=gRadioBuf[1];
Vw_FMBuf[2]=gRadioBuf[2];
}
/**
*@void PopFmFrequency(void)
*@update 2002/8/23
*/
void PopFmFrequency(void)
{
gRadioBuf[0]=Vw_FMBuf[0];
gRadioBuf[1]=Vw_FMBuf[1];
gRadioBuf[2]=Vw_FMBuf[2];
}
/**
*@void PushAmFrequency(void)
*@update 2002/8/23
*/
void PushAmFrequency(void)
{
gboolAmEnter=1;
Vw_AMBuf[0]=gRadioBuf[0];
Vw_AMBuf[1]=gRadioBuf[1];
Vw_AMBuf[2]=gRadioBuf[2];
}
/**
*@void PopAmFrequency(void)
*@update 2002/8/23
*/
void PopAmFrequency(void)
{
gRadioBuf[0]=Vw_AMBuf[0];
gRadioBuf[1]=Vw_AMBuf[1];
gRadioBuf[2]=Vw_AMBuf[2];
}
/**
*@BYTE HaveBoundFrequency(void)
*@update 2002/8/23
*/
BYTE HaveBoundFrequency(void)
{
BYTE Result;
Result=(gRadioBuf[3]==0x55)?1:0;
return(Result);
}
void RadioMonoStereoShow(void)
{
if( gRadioCLK==0 && gboolSt!=gRadioStMo ){
if(gRadioStMo) HideIcon(ICON_ST);
else ShowIcon(ICON_ST);
gboolSt=gRadioStMo;
}
}
/**
*@void ClrRadioCLK(void)
*@update 2002/9/8
*/
void ClrRadioCLK(void)
{
gRadioCLK=0;
}
/**
*@void RadioFm(void)
*@update 2002/9/8
*/
void RadioMonoStereo(void)
{
gboolOnlyMono=~gboolOnlyMono;
if(gboolOnlyMono) HideIcon(ICON_ST);
WriteRadio();
ClrRadioCLK();
DelayMs(250);
}
/**
*@BYTE IsSaveFrequency(BYTE aBand)
*@return 0xff:no other:have
*@update 2002/11/5
*/
BYTE IsSaveFrequency(BYTE aBand)
{
BYTE Buf[4];
BYTE BeginAddr;
BYTE n;
BYTE i;
BYTE Result=0xff;
if(aBand==BAND_FM){
n=BAND_FM_TOTAL;
BeginAddr=BAND_FM_BEGIN_ADDR;
}
else {
n=BAND_AM_TOTAL;
BeginAddr=(BAND_AM_BEGIN_ADDR)<<2;
}
for(i=0;i<4;i++){
Buf[i]=gRadioBuf[i];
}
for(i=0;i<n;i++){
LoadDataFromAt24c(BeginAddr,4);
if( (Buf[2]==gRadioBuf[2])&&( (Buf[1]&0x7f)==(gRadioBuf[1]&0x7f) ) ){
Result=i;
break;
}
BeginAddr+=4;
}
for(i=0;i<4;i++){
gRadioBuf[i]=Buf[i];
}
return(Result);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -