




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
* 晶振:8M*/#include #include #define ChannelCount 50 /最多支持多少个台,因为常驻内存,多了RAM放不下#define uchar unsigned char#define uint unsigned inttypedef structuchar Freq;uchar Rssi;ChannelInfo;sbit SDA = P20;sbit SCL = P21;sbit key1 = P34;sbit key2 = P27;sbit key3 = P26;sbit key4 = P25; / P37;sbit LcdEn = P34;sbit LcdRs = P35;uchar Channel = 0;uchar FreqTune = 0;const uint MinFreq = 870; /起始频率 * 100KHzconst uint MaxFreq = 1080; /最高频率 * 100KHzconst uchar FmAddr = 022; /FM模块IIC 地址const uchar EpAddr = 0xA0; /24C02 EPPRom 的地址uchar RSSI = 0; /信号强度uchar ChannelTuneChannelCount;uchar code LevlChar58 =0x1F,011,0x0A,004,004,004,004,004,000,000,000,000,000,000,006,0x1E,000,000,000,000,006,0x1E,0x1E,0x1E, /显示型号强度的自定义字符000,000,006,0x1E,0x1E,0x1E,0x1E,0x1E,006,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E;uchar vol = 08; /音量00xFuchar Func = 00; /当前功能号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();void Lcd_DispDiscript();void Eprom_LoadInitData();uint Eprom_Read(uchar addr,bit _16bit);void Eprom_Write(uchar addr,uint dat,bit _16bit);void main() P3 = 0xff;P2 = 0xff;Delay(10000); /延时,等待外部FM模块的启动Eprom_LoadInitData(); /从EppRom 加载频道音量等信息FM_WriteReg(2,0xd281); /启动FM模块FM_SetVolume(); /设置启动音量FM_SetFreq(); /设置默认频道的频率Lcd_Init();Lcd_Refresh();while(1)if( KeyScan()Lcd_Refresh();void Eprom_LoadInitData()uint result = 0;int i=0;result =Eprom_Read(0,0);if(result0) vol = (uchar)result 1;result =Eprom_Read(1,0);Channel = (uchar)result;for(i=0;iChannelCount;i+)result =Eprom_Read(i * 2 + 2,1);ChannelTunei = result;FreqTune = ChannelTuneChannel;void Eprom_Write(uchar addr,uint dat,bit _16bit)IICWrite(EpAddr,addr,dat,_16bit);uint Eprom_Read(uchar addr,bit _16bit)return IICRead(EpAddr,addr,_16bit);uint FM_ReadReg(uchar regAddr)return IICRead(FmAddr,regAddr,1);void FM_WriteReg(uchar regAddr,uint dat)IICWrite(FmAddr,regAddr,dat,1);void FM_SetFreq()FM_WriteReg(3,(FreqTune0)if(Mute)reg2H = FM_ReadReg(2);reg2H |= 04000;FM_WriteReg(2,reg2H);Mute = 0;FM_WriteReg(5,vol);elseMute = 1;reg2H = FM_ReadReg(2);reg2H &= 0xBFFF;FM_WriteReg(2,reg2H);Eprom_Write(0,vol+1,0);void Lcd_Init()uchar CGRamAddr = 040;int i,j;LcdEn = 0;Lcd_Comm(038);Lcd_Comm(0x0c);Lcd_Comm(006);Lcd_Comm(001); for(j=0;j5;j+)Lcd_Comm(CGRamAddr + 8 * j); /建立自定义字符 (显示信号强度的) for(i=0;i8;i+)Lcd_Data(LevlCharji);Delay(510);void Lcd_Comm(uchar cmd)LcdRs =0;P0 = cmd;Delay(50);LcdEn = 1;Delay(50);LcdEn = 0;void Lcd_Data(uchar dat)LcdRs = 1;P0 = dat;Delay(50);LcdEn = 1;Delay(50);LcdEn = 0;void Lcd_String(char* dat)char *p;int j, i=strlen(dat);for(j=0;ji;j+)p=dat + j;Lcd_Data(*p);void Lcd_DispRssi()int i;Lcd_Comm(080);for(i=0;i=1) Lcd_Data(001);if(RSSI=2) Lcd_Data(002);if(RSSI=3) Lcd_Data(003);if(RSSI=4) Lcd_Data(004);void Lcd_DispFreq()uint curFreq = MinFreq + FreqTune;int i;Lcd_Comm(085);for(i=5;i=1000)Lcd_Data(48 +curFreq /1000 % 10);Lcd_Data(48 +curFreq /100 % 10);Lcd_Data(48 +curFreq /10 % 10);Lcd_Data(.);Lcd_Data(48 + curFreq % 10);Lcd_Data(M);Lcd_Data(H);Lcd_Data(Z);void Lcd_DispDiscript()int i;Lcd_Comm(080+040);for(i=0;i15;i+)Lcd_Data( ); Lcd_Comm(080+040); switch(Func) case 0:Lcd_String(“Channel:”);Lcd_DispNumber(Channel+1);break;case 1:Lcd_String(“Volume:”);Lcd_DispNumber(vol);break;case 2:Lcd_String(“Tune”);break;case 3:Lcd_String(“Auto Scan”); void Lcd_Refresh()Lcd_DispRssi();Lcd_DispFreq();Lcd_DispDiscript();void Lcd_DispNumber(uint number)int i=0,len;char str6=0,0,0,0,0,0;char temp;dostri+ = 0 + (number % 10);number /= 10;while(number) ;len = strlen(str);for(i=0;i3)Func = 0;break;case 3:value = -1;break;case 4:value = 1;break; if(KeyNumber2) if(Func=0)if(value 0 & ChannelChannelCount) | (value 0)Channel+=value;FreqTune= ChannelTuneChannel;FM_SetFreq();Eprom_Write(1,Channel, 0);else if(Func=1)if(value 0 & vol0xF) | (value 0)vol+=value;FM_SetVolume();else if(Func=2)if(value 0 & FreqTune0xd2) | (value 0)FreqTune+=value;ChannelTuneChannel = FreqTune;FM_SetFreq();Eprom_Write(Channel * 2 + 2 ,FreqTune,1);else if(Func=3) /开始自动扫描AutoScan = 1;BeginScan();AutoScan = 0;Channel = 0;FreqTune = ChannelTune0;Func = 0;FM_SetFreq();/覆盖EppRom中的所有的频道for(i=0;iChannelCount;i+)temp = ChannelTunei;Eprom_Write(i * 2+2,temp,1);Eprom_Write(001,0,0); /重置EPPROM中的频道号为0 KeyNumber=0; return keyRel; /全自动搜索void BeginScan()uint state;int i=0,count=0;bit cmp = 0;uint seekth = 08; /灵敏度 0127,默认为8 灵敏度越低越可能搜索到假台,高了可能一些信号弱一点的频道被跳过。uint reg5H;uint tempTune = 0;for(i=0;iChannelCount;i+) /清除原有的电台数据ChannelTunei=0;reg5H = FM_ReadReg(005);reg5H = (reg5H & 0x80FF) | (seekth7);FM_WriteReg(005,reg5H);for(i=0;i 7 ) & 01;while(!cmp);Delay(100);state = FM_ReadReg(0x0B);cmp = (state 8 ) & 01;if(cmp)ChannelTunecount=i;count+;if(count=ChannelCount) break; uchar FM_GetRSSI()uint regVal =FM_ReadReg(0x0b);regVal = regVal9;return (uchar)(regVal/16);void Delay(uint c)int i=0;for(i=0;ic;i+);uint IICRead(uchar uaddr, uchar ramAddr,bit _16b)uint buf;OpenIIC();IICWriteByte(uaddr);IICWriteByte(ramAddr);OpenIIC();IICWriteByte(uaddr | 001); if(_16b)buf = IICReadByte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年科目四模拟考试试题及答案
- 2025版房屋租赁合同示范文本
- 《离婚冷静期间共同财产分割咨询协议》
- 夫妻财产分割与子女抚养权变更法律合同
- 电子合同在租赁合同中的法律效力认定与风险控制
- 知识产权置换股权合作助力智能制造产业发展协议
- 旅游景点租赁合同续约与景区管理服务协议
- 烟酒店员工劳动合同签订与解除中的劳动权益保护
- 银行员工劳动合同及金融信息保密协议
- 跨境电商国际贸易融资合同(含汇率风险与结算管理)
- 湖南信息职业技术学院2025年单独招生考试文化素质测试考试大纲
- 大学新生专业思想教育
- 三叉神经鞘瘤护理查房
- 母婴护理服务方案
- 医学免疫学+医学心理学 医学免疫学课程讲义
- JIT精益生产实务课件
- 原材料验收管理制度内容
- 《中国美术简史》课件
- 意义未明的单克隆免疫球蛋白病病因介绍
- 【MOOC】当代社会中的科学与技术-南京大学 中国大学慕课MOOC答案
- 学习六条禁令心得体会
评论
0/150
提交评论