* 晶振:8M */ #include #include #define ChannelCount 50 //最多支持多少个台,因为常驻内存,多了RAM 放不下 #define uchar unsigned char #define uint unsigned int typedef struct { uchar Freq; uchar Rssi; }ChannelInfo; sbit SDA = P2^0; sbit SCL = P2^1; sbit key1 = P3^4; sbit key2 = P2^7; sbit key3 = P2^6; sbit key4 = P2^5; // P3^7; sbit LcdEn = P3^4; sbit LcdRs = P3^5; uchar Channel = 0; uchar FreqTune = 0; const uint MinFreq = 870; //起始频率 * 100KHz const uint MaxFreq = 1080; //最高频率 * 100KHz const uchar FmAddr = 0×22; //FM 模块 IIC 地址 const uchar EpAddr = 0xA0; //24C02 EPPRom 的地址 uchar RSSI = 0; //信号强度 uchar ChannelTune[ChannelCount]; uchar code LevlChar[5][8] = {{0x1F,0×11,0x0A,0×04,0×04,0×04,0×04,0×04}, {0×00,0×00,0×00,0×00,0×00,0×00,0×06,0x1E}, {0×00,0×00,0×00,0×00,0×06,0x1E,0x1E,0x1E}, //显示型号强度的自定义字符 {0×00,0×00,0×06,0x1E,0x1E,0x1E,0x1E,0x1E}, {0×06,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E}}; uchar vol = 0×8; //音量 0~0xF uchar Func = 0×0; //当前功能号 bit AutoScan = 0; //标记当前是不是在自动搜台 bit Mute = 0; //标记是否被静音 uchar KeyNumber = 0; void OpenIIC(); void CloseIIC(); void IICWrite(uchar uaddr, uchar romaddr, uint rdata,bit _i6b); void IICWriteByte( uchar byte ); uint IICRead(uchar uaddr, uchar romaddr,bit _i6b); uchar IICReadByte(bit next); void FM_SetFreq(); void FM_SetVolume(); uint FM_ReadReg(uchar regAddr); //读取FM 模块的寄存器 void FM_WriteReg(uchar regAddr,uint dat); //写FM 模块的寄存器 uchar FM_GetRSSI(); //获取当前的信号强大 void Delay(uint c); bit KeyScan(); void BeginScan(); void Lcd_DispNumber(uint number); void Lcd_Init(); void Lcd_Comm(uchar cmd); void Lcd_Data(uchar dat); void Lcd_String(char* dat); void Lcd_DispRssi(); void Lcd_DispFreq(); void Lcd_Refresh();...