RDA5820和51单片机制作的FM数字收音机源代码及电路原理图

上传人:re****.1 文档编号:557433708 上传时间:2022-11-29 格式:DOC 页数:15 大小:61.50KB
返回 下载 相关 举报
RDA5820和51单片机制作的FM数字收音机源代码及电路原理图_第1页
第1页 / 共15页
RDA5820和51单片机制作的FM数字收音机源代码及电路原理图_第2页
第2页 / 共15页
RDA5820和51单片机制作的FM数字收音机源代码及电路原理图_第3页
第3页 / 共15页
RDA5820和51单片机制作的FM数字收音机源代码及电路原理图_第4页
第4页 / 共15页
RDA5820和51单片机制作的FM数字收音机源代码及电路原理图_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《RDA5820和51单片机制作的FM数字收音机源代码及电路原理图》由会员分享,可在线阅读,更多相关《RDA5820和51单片机制作的FM数字收音机源代码及电路原理图(15页珍藏版)》请在金锄头文库上搜索。

1、*晶振:8M*/#include#include#defineChannelCount50/最多支持多少个台,因为常驻内存,多了RAM放不下#defineucharunsignedchar#defineuintunsignedinttypedefstructucharFreq;ucharRssi;ChannelInfo;sbitSDA=P2A0;sbitSCL=卩2人1;sbitkey1=P3A4;sbitkey2=P2A7;sbitkey3=P2A6;sbitkey4=P2A5;/P3A7;sbitLcdEn=P3A4;sbitLcdRs=P3A5;ucharChannel=0;ucharF

2、reqTune=0;constuintMinFreq=870;/起始频率*100KHzconstuintMaxFreq=1080;/最高频率*100KHzconstucharFmAddr=0X22;/FM模块IIC地址constucharEpAddr=0xA0;/24C02EPPRom的地址ucharRSSI=0;/信号强度ucharChannelTuneChannelCount;ucharcodeLevlChar58=0x1F,0X11,0x0A,0X04,0X04,0X04,0X04,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0x1E,0X00,0X0

3、0,0X00,0X00,0X06,0x1E,0x1E,0x1E,/显示型号强度的自定义字符0X00,0X00,0X06,0x1E,0x1E,0x1E,0x1E,0x1E,0X06,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E;ucharvol=0X8;/音量00xFucharFunc=0X0;/当前功能号bitAutoScan=0;/标记当前是不是在自动搜台bitMute=0;/标记是否被静音ucharKeyNumber=0;voidOpenIIC();voidCloseIIC();voidIICWrite(ucharuaddr,ucharromaddr,uintrda

4、ta,bit_i6b);voidIICWriteByte(ucharbyte);uintIICRead(ucharuaddr,ucharromaddr,bit_i6b);ucharIICReadByte(bitnext);voidFM_SetFreq();voidFM_SetVolume();uintFM_ReadReg(ucharregAddr);/读取FM模块的寄存器voidFM_WriteReg(ucharregAddr,uintdat);/写FM模块的寄存器ucharFM_GetRSSI();/获取当前的信号强大voidDelay(uintc);bitKeyScan();voidBeg

5、inScan();voidLcd_DispNumber(uintnumber);voidLcd_Init();voidLcd_Comm(ucharcmd);voidLcd_Data(uchardat);voidLcd_String(char*dat);voidLcd_DispRssi();voidLcd_DispFreq();voidLcd_Refresh();voidLcd_DispDiscript();voidEprom_LoadInitData();uintEprom_Read(ucharaddr,bit_16bit);voidEprom_Write(ucharaddr,uintdat,

6、bit_16bit);voidmain()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();voidEprom_LoadInitData()uintresult=0;inti=0;result=Eprom_Read(0,

7、0);if(result0)vol=(uchar)result-1;result=Eprom_Read(1,0);Channel=(uchar)result;for(i=0;i0)if(Mute)reg2H=FM_ReadReg(2);reg2H|=0X4000;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);voidLcd_Init()ucharCGRamAddr=0X4

8、0;inti,j;LcdEn=0;Lcd_Comm(0X38);Lcd_Comm(0x0c);Lcd_Comm(0X06);Lcd_Comm(0X01);for(j=0;j5;j+)Lcd_Comm(CGRamAddr+8*j);/建立自定义字符(显示信号强度的)for(i=0;i8;i+)Lcd_Data(LevlCharji);Delay(510);voidLcd_Comm(ucharcmd)LcdRs=0;P0=cmd;Delay(50);LcdEn=1;Delay(50);LcdEn=0;voidLcd_Data(uchardat)LcdRs=1;P0=dat;Delay(50);Lc

9、dEn=1;Delay(50);LcdEn=0;voidLcd_String(char*dat)char*p;intj,i=strlen(dat);for(j=0;ji;j+)p=dat+j;Lcd_Data(*p);voidLcd_DispRssi()inti;Lcd_Comm(0X80);for(i=0;i=1)Lcd_Data(0X01);if(RSSI=2)Lcd_Data(0X02);if(RSSI=3)Lcd_Data(0X03);if(RSSI=4)Lcd_Data(0X04);voidLcd_DispFreq()uintcurFreq=MinFreq+FreqTune;inti

10、;Lcd_Comm(0X85);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);voidLcd_DispDiscript()inti;Lcd_Comm(0X80+0X40);for(i=0;i15;i+)Lcd_Data();Lcd_Comm(0X80+0X40);switch(Func)case0:Lc

11、d_String(“Channel:”);Lcd_DispNumber(Channel+1);break;case1:Lcd_String(“Volume:”);Lcd_DispNumber(vol);break;case2:Lcd_String(“Tune”);break;case3:Lcd_String(“AutoScan”);voidLcd_Refresh()Lcd_DispRssi();Lcd_DispFreq();Lcd_DispDiscript();voidLcd_DispNumber(uintnumber)inti=0,len;0Z;charst6=0,0,0,0,0charte

12、mp;dostri+=O+(number%10);number/=10;while(number);len=strlen(str);for(i=0;ilen/2;i+)temp=stri;stri=strlen-i-1;strlen-i-1=temp;Lcd_String(str);bitKeyScan()bitkeyRel=0;/按键释放检测charvalue=0;inti;uinttemp;if(AutoScan)return0;if(KeyNumber=0)if(key3=0)Delay(50);if(key3=0)KeyNumber=3;if(key4=0)Delay(50);if(key4=0)KeyNumber=4;if(key2=0)Delay(50);if(key2=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号