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

合集下载

51单片机控制RDA5820制作 数字FM对讲机收音发射一体机程序

51单片机控制RDA5820制作 数字FM对讲机收音发射一体机程序

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint key_=0;uint k_1=0;uint a_3=0;uint m1,m_1,m_4;uint a_4=0;uint k_2=0;uint i_1=0;uint n_0=1;uint l1=1;uint l2=1;uint z,p=1;uint j_=1;uint r_i=0x0427;double b1=0;uint a1=0;uint a2=0;uint FreqTune=0x0000;uint vol=0xa;const uchar FmAddr = 0x22;sbit SDA =P0^0;sbit SCL =P0^1;sbit KEY =P1^4;sbit KEYu=P1^0;sbit KEYd=P1^2;sbit KEY1=P1^1;sbit KEY2=P1^3;sbit rs=P0^5;sbit rw=P0^6;sbit en=P0^7;sbit P02=P0^2;sbit P03=P0^3;sbit P04=P0^4;uchar code table[]="0123456789."; uchar code table_[]="Mhz Vol:";uchar code table_1[]="RT";uchar code table1[]="Welcome";uchar code table2[]="Digital FMdevice"; uchar code table3[]="Please choose"; uchar code table_3[]="s ";uchar code table4[]="function keys"; uchar code table5[]=" -Interphone "; uchar code table6[]=" FM receiver "; uchar code table7[]=" -FM receiver "; uchar code table8[]=" FM transmitter"; uchar code table9[]=" -FM transmitter"; uchar code table10[]=" Transmit Data "; uchar code table11[]=" -Transmit Data "; uchar code table12[]=" Interphone "; uchar code table14[]="Waiting ";uchar code table15[]="............... "; uchar code table16[]=" Interphone "; uchar code table18[]=" FM RX ";uchar code table20[]=" FM TX ";uchar code table22[]=" TX DATA ";uchar code tabletp[]=" ";uchar codetable23[]={0x00,0x1F,0x0A,0x04,0x04,0x0 4,0x04,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F, };uchar codetable24[]={0x00,0x1F,0x0A,0x04,0x04,0x0 4,0x04,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0E,0x1E, };uchar codetable25[]={0x00,0x1F,0x0A,0x04,0x04,0x0 4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x1C ,};uchar codetable26[]={0x00,0x1F,0x0A,0x04,0x04,0x0 4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x18, } ;uchar codetable27[]={0x00,0x1F,0x0A,0x04,0x04,0x0 4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10, };uchar codetable28[]={0x00,0x1F,0x0A,0x04,0x04,0x0 4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };uchar codetable29[]={0x02,0x06,0x1E,0x1E,0x1E,0x1 E,0x06,0x02,};void Dela_y(uint c) //延时{int i=0;for(i=0;i<c;i++);}void DelayIT(uint del_1)//延时 10ms * del {uint i,j;for(i=0; i<del_1; i++)for(j=0; j<1827; j++);}void delay_lcd(uint n)//lcd延时{uint x,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}void lcd_wcom(uchar com)//lcd写命令{rs=0;rw=0;P3=com;delay_lcd(5);en=1;en=0;}void lcd_wdat(uchar dat)//lcd写数据{rs=1;rw=0;P3=dat;delay_lcd(5);en=1;en=0;}void lcd_init()//lcd初始化{lcd_wcom(0x38);lcd_wcom(0x0c);lcd_wcom(0x06);lcd_wcom(0x01);}void OpenIIC(){SDA = 1;SCL = 1; Dela_y(5);SDA = 0; Dela_y(5);SCL = 0; Dela_y(5);}void CloseIIC(){SDA = 0 ;SCL = 1; Dela_y(5);SDA = 1; Dela_y(5);SCL = 1; SDA = 1; Dela_y(150); //防止过快的读取造成EPPROM 来不及反应}}void IICWriteByte( uchar byte ){uchar i=0;int f=30000;bit bitdata;for(i=0;i<8;i++){bitdata=byte>>(7-i) & 1;SDA = bitdata;SCL =1; Dela_y(5);SCL = 0; Dela_y(5);}SCL = 1;while(SDA && -f); Dela_y(5);SCL = 0; Dela_y(5);}void IICWrite(uchar uaddr, uchar romaddr, uint rdata,bit _16b){uchar temp;OpenIIC();IICWriteByte(uaddr);IICWriteByte(romaddr);if(_16b){temp =(uchar)((rdata>>8) & 0x00ff) ; IICWriteByte(temp);}temp = (uchar) (rdata & 0xff); IICWriteByte(temp);CloseIIC();}uchar IICReadByte(bit next){uchar buf =0,i=0;for(i=0;i<8;i++){buf <<=1;SCL = 1; buf |= SDA; Dela_y(5);SCL = 0; Dela_y(5);}if(next){SDA = 0; SCL = 1; Dela_y(5);SCL = 0; Dela_y(5); SDA = 1;}else{SDA = 1; SCL = 1; Dela_y(5);SCL = 0; Dela_y(5); SDA=0;}return buf;}uint IICRead(uchar uaddr, uchar ramAddr,bit _16b){uint buf;OpenIIC();IICWriteByte(uaddr);IICWriteByte(ramAddr);OpenIIC();IICWriteByte(uaddr | 0x01);if(_16b){buf = IICReadByte(1);buf = buf<<8;buf =buf|IICReadByte(0);}else{buf = IICReadByte(0);}CloseIIC();return buf;}uint FM_ReadReg(uchar regAddr)//读取FM 模块的寄存器{return IICRead(FmAddr,regAddr,1);}void FM_WriteReg(uchar regAddr,uint dat)//写FM模块的寄存器{IICWrite(FmAddr,regAddr,dat,1);}void FM_SetFreq_RX(uint FreqTune_1)//设置RX频道的频率87-1*,步进频率100k0x00{FM_WriteReg(3,(FreqTune_1<<6) |0x0010);}void FM_SetFreq__RX(uint FreqTune__1)//设置RX频道的频率65-90,步进频率100k 0x00{FM_WriteReg(53,0x28a);FM_WriteReg(53,0x384);FM_WriteReg(3,(FreqTune__1<<6) |0x001c);}void FM_SetVolume(uint vol_)//设置音量0x0{FM_WriteReg(5,vol_|=0x88a0);}void show(uint addr,double m)//lcd显示初始地址addr及数字xxx.x{uchar n;uchar _n=10;for(n=0;n<5;n++){if(n==0) _n=m/100;if(n==1) _n=((int)m/10)%10;if(n==2) _n=(int)m%10;if(n==3) _n=10;if(n==4) _n=((int)(m*10))%10;lcd_wcom(addr+n);lcd_wdat(table[_n]);}}void show_(uint a_ddr,double k_)//lcd显示初始地址addr及数字xx{uchar n;uchar _n=10;for(n=0;n<2;n++){if(n==0) _n=(int)k_/10;if(n==1) _n=(int)k_%10;lcd_wcom(a_ddr+n);lcd_wdat(table[_n]);}}void rssi(uint r_addr,int rssi) //LCD信号强度指示显示(地址,0——5){lcd_wcom(0x40);if(rssi==0){for(m1=0;m1<16;m1++){lcd_wdat(table28[m1]);}};if(rssi==1){for(m1=0;m1<16;m1++){lcd_wdat(table27[m1]);}};if(rssi==2){for(m1=0;m1<16;m1++){lcd_wdat(table26[m1]);}};if(rssi==3){for(m1=0;m1<16;m1++){lcd_wdat(table25[m1]);}};if(rssi==4){for(m1=0;m1<16;m1++){lcd_wdat(table24[m1]);}};if(rssi==5){for(m1=0;m1<16;m1++){lcd_wdat(table23[m1]);}};lcd_wcom(r_addr); //显示地址for(m1=0;m1<2;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(m1);} ;}void kanji()//开机画面{uchar m1;DelayIT(20);lcd_init(); //液晶初始化lcd_wcom(0x84); //显示地址for(m1=0;m1<7;m1++) //将table1[Welcome]中的数据依次写入1602显示{lcd_wdat(table1[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table2[Digital FMdevice]中的数据依次写入1602显示{lcd_wdat(table2[m1]);}DelayIT(100);lcd_init(); //液晶初始化lcd_wcom(0x81); //显示地址for(m1=0;m1<13;m1++) //将table3[Please choose]中的数据依次写入1602显示{lcd_wdat(table3[m1]); DelayIT(4) ;}lcd_wcom(0x80+0x41); //显示地址for(m1=0;m1<13;m1++) //将table4[function keys]中的数据依次写入1602显示{lcd_wdat(table4[m1]); DelayIT(5) ;}DelayIT(50) ;}void K_S()//主键盘扫描{if(a_3!=1)//有后退按键{a_3=1;if(k_1==0)//对讲机模式{lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table5[-Interphone]中的数据依次写入1602显示{lcd_wdat(table5[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table6[FM receiver]中的数据依次写入1602显示{lcd_wdat(table6[m1]);}};if(k_1==1)//收音机模式{lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table12[]中的数据依次写入1602显示{lcd_wdat(table12[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table7[]中的数据依次写入1602显示{lcd_wdat(table7[m1]);}};if(k_1==2)//FM发射模式{lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table6[]中的数据依次写入1602显示{lcd_wdat(table6[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table9[]中的数据依次写入1602显示{lcd_wdat(table9[m1]);}};if(k_1==3) //第四模式{lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table8[]中的数据依次写入1602显示{lcd_wdat(table8[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table11[]中的数据依次写入1602显示{lcd_wdat(table11[m1]);}};};if(KEYu==0) key_--;//按键判断if(KEYd==0) key_++;if(k_1!=key_%4) //有上下选择按键{k_1=key_%4;if(k_1==0){lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table5[]中的数据依次写入1602显示{lcd_wdat(table5[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table6[]中的数据依次写入1602显示{lcd_wdat(table6[m1]);}};if(k_1==1){lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table12[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table7[m1]);}};if(k_1==2){lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table6[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table9[m1]);}};if(k_1==3){lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table11[]中的数据依次写入1602显示{lcd_wdat(table8[m1]);}lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table11[m1]);}};DelayIT(30);};}使用道具举报13#枫霰中级会员发表于 2012-1-19 16:22:58|只看该作者接上:void mace()//主程序扫描{•串个门•加好友•打招呼•发消息if(k_1==0)//第一模式{for(;m_1>0;m_1--){m_4=8;lcd_init(); //液晶初始化for(;m_4<12;m_4++){lcd_wcom(0x80+0x44); //显示地址for(m1=0;m1<m_4;m1++) //将table15[ ]中的数据依次写入1602显示{lcd_wdat(table15[m1]);DelayIT(4);}}lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table16[m1]);}};z=1;};if(k_1==1) //第二模式{for(;m_1>0;m_1--){m_4=8;lcd_init(); //液晶初始化for(;m_4<12;m_4++){lcd_wcom(0x80+0x44); //显示地址for(m1=0;m1<m_4;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table15[m1]);DelayIT(4);}};lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<18;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table18[m1]);}};z=2;};if(k_1==2)//第三模式{for(;m_1>0;m_1--){m_4=8;lcd_init(); //液晶初始化for(;m_4<12;m_4++){lcd_wcom(0x80+0x44); //显示地址for(m1=0;m1<m_4;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table15[m1]);DelayIT(5);}};lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table20[m1]);}};z=3;};if(k_1==3&&k_2==1) //第四模式{for(;m_1>0;m_1--){m_4=8;lcd_init(); //液晶初始化for(;m_4<12;m_4++){lcd_wcom(0x80+0x44); //显示地址for(m1=0;m1<m_4;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table15[m1]);DelayIT(5);}};lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table22[m1]);}};z=4;};}void main() //主程序{ uint z_1,Tune;P1=0xff;FM_WriteReg(2,0xd281);//rda5820地址FM_ReadReg(0x0b);P02=0;P03=0;kanji(); //开机画面while(1) //进入程序死循环{if(KEY2==0&&k_2<1) k_2++;//左右按键判断if(KEY1==0&&k_2>0) k_2--;if(k_2==0) //没有右按键{n_0=1;m_1=1;K_S(); //上下模式建扫描};if(k_2==1) //有右键{a_3=0;mace(); //模式扫描if(z==1) //第一模式{if(KEY==1){for(;p>0;p--) FM_SetFreq__RX(0x00);//设置频率65Mhzlcd_wcom(0x80+0x46); //显示地址for(m1=0;m1<8;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table_[m1]);} ;lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<1;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table_1[m1]);} ;for(;l1>0;l1--)l2=1;FM_WriteReg(0x40,0x0000);//进入接收模式if(KEYu==0&&KEY2==0&&vol<0xf)vol+=0x1;else if(KEYd==0&&KEY2==0&&vol>0x0)vol-=0x1;else if(KEYu==0&&Tune<20)a1++,Tune+=1;else if(KEYd==0&&Tune>0)a1--,Tune-=1; //声音,频率调节FreqTune=Tune*10;if(b1!=65+(double)Tune*1){b1=65+(double)Tune*1;FM_SetFreq__RX(FreqTune);//写入频率=65+tune};z_1=0xff&(FM_ReadReg(0x0a));FM_SetVolume(vol); //写入音量show(0x80+0x41,65+((double)z_1)/10);show_(0x80+0x4e,((double)vol)); //显示频率音量rssi(0x8d,(uint)((FM_ReadReg(0x0b)>>10)/5)); //显示信号强度if( ((FM_ReadReg(0x0b)>>10)/5) ){lcd_wcom(0x8f);for(m1=6;m1<7;m1++) //将s显示{lcd_wdat(table10[m1]);} ;};if( !((FM_ReadReg(0x0b)>>10)/5) ){lcd_wcom(0x8f);for(m1=0;m1<1;m1++) //将显示{lcd_wdat(table10[m1]);} ;};DelayIT(10);//延时 10ms * del};if(KEY==0){for(;l2>0;l2--){l1=1,FM_WriteReg(0x40,0x0001),FM_SetFreq__RX(FreqTune), lcd_wcom(0x80+0x40); //显示地址for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(tabletp[m1]);} ;};FM_WriteReg(0x40,0x0001) ;z_1=0xff&(FM_ReadReg(0x0a));show(0x80+0x44,65+((double)z_1)/10);lcd_wcom(0x80+0x43); //显示地址for(m1=1;m1<2;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table_1[m1]);} ;if(KEYu==0&&KEY==0&&r_i<0x043b)r_i+=0x000c;//功率调节if(KEYd==0&&KEY==0&&r_i>0x0405)r_i-=0x000c;FM_WriteReg(0x42,r_i);rssi(0x80+0x4d,(uint)((r_i&0xff)/0x0c));DelayIT(10);//延时 10ms * del};};if(z==2) //第二模式{p=1;for(;j_>0;j_--)FM_SetFreq_RX(0x00);FM_WriteReg(0x40,0x0000);lcd_wcom(0x80+0x46); //显示地址for(m1=0;m1<8;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table_[m1]);} ;if(KEYu==0&&KEY2==0&&FreqTune<0xd2)a1+=10,FreqTune +=0x000a;else if(KEYd==0&&KEY2==0&&FreqTune>0x00)a1-=10,FreqTune-=0x000a;else if(KEYu==0&&KEY==0&&vol<0xf)a2++,vol+=0x1;else if(KEYd==0&&KEY==0&&vol>0x0)a2--,vol-=0x1;else if(KEYu==0&&FreqTune<0xd2)a1++,FreqTune+=0x0001; else if(KEYd==0&&FreqTune>0x00)a1--,FreqTune-=0x0001; if(b1!=87+(double)a1*0.1){b1=87+(double)a1*0.1;FM_SetFreq_RX(FreqTune);};FM_SetVolume(vol);z_1=0xff&(FM_ReadReg(0x0a));show(0x80+0x41,87+((double)z_1)/10);show_(0x80+0x4e,((double)vol));rssi(0x8d,(uint)((FM_ReadReg(0x0b)>>10)/5));if( ((FM_ReadReg(0x0b)>>10)/5) ){lcd_wcom(0x8f);for(m1=6;m1<7;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table10[m1]);} ;};if( !((FM_ReadReg(0x0b)>>10)/5) ){lcd_wcom(0x8f);for(m1=0;m1<1;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table10[m1]);} ;};DelayIT(10);//延时 10ms * del};if(z==3) //第三模式{ p=1;for(;j_>0;j_--)FM_SetFreq_RX(0x00);FM_WriteReg(0x40,0x0001) ;lcd_wcom(0x80+0x49); //显示地址for(m1=0;m1<3;m1++) //将table[]中的数据依次写入1602显示{lcd_wdat(table_[m1]);} ;if(KEYu==0&&KEY2==0&&FreqTune<0xd2)a1+=10,FreqTune +=0x000a;else if(KEYd==0&&KEY2==0&&FreqTune>0x00)a1-=10,FreqTune-=0x000a;else if(KEYu==0&&KEY==0&&r_i<0x043b)r_i+=0x000c;else if(KEYd==0&&KEY==0&&r_i>0x0405)r_i-=0x000c;else if(KEYu==0&&FreqTune<0xd2)a1++,FreqTune+=0x0001; else if(KEYd==0&&FreqTune>0x00)a1--,FreqTune-=0x0001; if(b1!=87+(double)a1*0.1){b1=87+(double)a1*0.1;FM_SetFreq_RX(FreqTune);};z_1=0xff&(FM_ReadReg(0x0a));FM_WriteReg(0x42,r_i);show(0x80+0x44,87+((double)z_1)/10);rssi(0x8d,(uint)((r_i&0xff)/0x0c));DelayIT(10);//延时 10ms * del};if(z==4) //第四模式{p=1;};};};}使用道具举报枫霰中级会员•串个门•加好友•打招呼14#发表于 2012-1-19 17:08:50|只看该作者本帖最后由枫霰于 2012-1-19 17:10 编辑RDA5820收音+发射模块PL102BH-20.pdf 资料•发消息近几天刚刚学了IIC总线控制,想亲自实践一下,就从众多IIC控制的芯片中找到了这个RDA5820模块,刚从网上淘回来就开始写控制它的C51程序,经过一周多努力终于调试成功。

基于RDA的收音机

基于RDA的收音机

基于R D A的收音机标准化管理部编码-[99968T-6889628-J68568-1689N]编号:课程设计说明书(信息系统综合实训)题目:立体声调频收音机院(系):信息与通信学院专业:电子信息工程学生姓名:峰之使者学号:指导教师:2016年 1 月 8 日摘要本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。

我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。

RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。

关键词:单片机;RDA5807收音模块;FM收音;目录引言随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。

从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。

本次设计采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。

单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。

单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用STC89c52单片机。

此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能。

1 任务要求与设计的背景设计任务要求本论文的任务是根据调频收音机的特点和应用情况,结合新一代高性能芯片设计一种使用简单、性能优良的收音机。

整个系统以单片机STC89S52控制,RDA5807芯片为核心,配置相应的外设及接口电路。

基于FM的多功能语音收发系统

基于FM的多功能语音收发系统

导读]声音是信息传递的最重要的形式之一,在不同环境不同空间,我们对声音的传播接收有着不同甚至苛刻的要求,鉴于此,我们设计制作了基于FM的多功能语音无线传输系统,可实现语音的无线收发。

一、项目设计背景及概述声音是信息传递的最重要的形式之一,在不同环境不同空间,我们对声音的传播接收有着不同甚至苛刻的要求。

鉴于此,我们队设计制作了基于FM的多功能语音无线传输系统,可实现语音的无线收发。

本品主打以下两款功能:a、校园/车站无线广播。

b、车载电话免提接听器。

主要解决以下两大困难:a、现有校园/车站无线广播发射频率固定单一,易串频,信道易被污染;现有校园/车站有线广播走线成本高,无法满足大规模院校要求,随着走线的加长,必然会带来信号的衰弱和故障率的升高,使维护成本急剧攀升。

b、驾车手动接听电话存在一定危险,本品可以解放双手,让您做到接听电话双手不离方向盘,为您的安全保驾护航。

二、项目设计原理1、原理概述本品是基于FM收发一体芯片RDA5820的一款语音收发系统。

芯片RDA5820由引出的IIC接口作为控制端与单片机相连。

单片机通过IIC写RDA5820寄存器来控制实现以下功能:FM发送/接收的切换、重音提升、软静音、软静噪、频点设定、发射功率调节、灵敏度调节等。

a、作校园/车站无线广播功用时,本品可以接收56~115Mhz频段调频广播,也可以在65~115Mhz空闲频段自由选择频段发射音频调制波供其他子设备接收,形成广播信息网络。

b、作车载电话免提接听器功用时,检测到来电时只需按下自带麦克风上的按钮即可实现电话接通,来电语音和使用者语音均可通过FM在车载音响中放出,使用者只用对着麦克风说话即可,无论手机放在车内哪个位置,都可实现良好通话。

2、硬件设计原理系统共分为语音收发模块,键盘输入模块,LED数码管显示模块,电源模块、蜂鸣提示模块、单片机处理模块。

语音收发模块:负责发送模式下输入音频的发送和接收模式下广播接收。

基于RDA5820的芯片功能扩展(DOC)

基于RDA5820的芯片功能扩展(DOC)

成都信息工程学院基于RDA5820芯片功能扩展班级:技术人员:文档整理:指导老师:日期:年月号摘要该项目是以收音机芯片为核心,进行一系列功能扩展(扩展功能自定)。

其中采用收音机芯片(RDA5820)进行无线电的接收。

同时以TI芯片(MSP430F5529)作为主控芯片进行显示与控制。

最后是以芯片(TDA2822)作为功放模块进行音量调节。

显示包括时钟显示和收音机频段显示。

关键词:RDA5820;MSP430F5529;TDA2822AbstractA series of function extension is based on the radio chip, in which uses the radio chip (RDA5820) to carry out radio reception. At the same time, with TI chip (MSP430F5529) as the master control chip for display and control. Finally based on chip (TDA2822) as a power amplifier module which can adjust the volume. Display including the clock display and the radio spectrum.Key Words:RDA5820; MSP430F5529; TDA282目录1 引言 (1)1.1 背景 (1)1.2 研究内容提要 (1)2 系统框图 (2)3 主控模块 (3)3.1 芯片选择 (3)3.2 主控芯片 (4)3.3 JTAG接口 (5)3.4 液晶显示模块 (6)3.5 晶振 (6)3.6 变压模块 (7)3.7 MSP430F5529芯片介绍 (7)3.7.1 MSP430系列 (8)3.7.2 部分功能介绍 (9)4 收音机模块 (10)4.1 RDA5820概述 (10)4.2 应用范围 (10)4.3 功能特点 (11)4.4 电气特性 (11)5 功率放大模块 (11)5.1 功率放大电路说明 (11)5.2 TDA2822芯片介绍 (12)5.2.1 概述与特点 (12)5.2.2 引出端功能 (12)5.3 应用电路 (13)5.3.1 TDA2822立体声应用线路 (13)5.3.2 TDA2822单声道桥式(BTL)应用线路 (14)6 部分程序及代码 (14)7 总结 (15)参考文献 (16)1引言1.1背景从1923年1月23日第一批收音机的问世到现今,收音机经历了翻天覆地的“改革”,从矿石收音机、电子管收音机、晶体管收音机、集成电路收音机到如今的DSP收音机(全球收音机数字化),可谓日新月异。

基于单片机的数字FM收音机设计与实现

基于单片机的数字FM收音机设计与实现
基于单片机的数字FM收音机设计与实现
基于51单片机的数字FM收音机
设计与实现
摘 要
关键词:数字调频;STC89C52;TEA5767;TDA2030
ABSTRACT
Nowadays peopleusually use the radio for manual FM accept , it is much trouble, and because the rx sensitivity is not high, the frequency band received is very narrow。TEA5767 has high-performance RF AGC circuit, high sensitivity receiving, reference frequency selection flexible and it can be the realization of automatic search platform。So inthis designingI will use the STC89C52 single-chip microcomputer and TEA5767 as the core components of digital FM radio system andUse the I2C communication to connect between STC89C52 and TEA5767 chip。Through the software written and using single chip computer control TEA5767 achieve manually live to be automatic FM, received signal through the TAD2030 amplifier amplification device, then use the speaker output the signal。In the process of FM the frequency of the signal can be checked by LCD1602。

基于51单片机的收音机制作报告

基于51单片机的收音机制作报告
DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序 CLR RS SETB RW CLR E NOP SETB E
第 11 页
收音机制作报告
JB P1.7,DELAY ;如果 P1.7 为高电平表示忙就循环等待 RET END
3.6 程序在开始时对液晶模块功能进行了初始化设置,约定了显 示格式。注意显示字符时光标是自动右移的,无需人工干预, 每次输入指令都先调用判断液晶模块是否忙的子程序 DELA Y,然后输入显示位置的地址 0C0H,最后输入要显示的字符 A 的代码 41H。
Vss

SCL 串行时钟 AT24C02 串行时钟输入管脚用于产生器件所有数据
发送或接收的时钟,这是一个输入管脚。 SDA 串行数据/地址 AT24C02 双向串行数据/地址管脚用于器件所有数
据的发送或接收,SDA 是一个开漏输出管脚,可与其它 开漏输出或集电极开路输出进行线或(wire-OR)。
第 15 页
指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低 电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效, 低电平则无效 指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开 显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光 标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电 平不闪烁 指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时 移动光标 指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位 总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符 指令 7:字符发生器 RAM 地址设置 指令 8:DDRAM 地址设置 指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此 时模块不能接收命令或者数据,如果为低电平表示不忙。

51单片机FM收音机-用户指南资料

51单片机FM收音机-用户指南资料

用户指南——51单片机FM收音机2015年河南惠思通电子科技有限公司Henan Huistone Electronic Technology Co.,Ltd目录1 项目背景 (1)2 项目概述 (1)2.1主要功能 (1)2.2设计方案 (1)3 硬件电路 (2)3.1FM接收模块 (2)3.2创新平台底板 (4)3.351单片机核心模块 (5)3.4LCD1602液晶模块 (6)3.58位独立按键模块 (7)4 软件程序 (9)4.1程序流程 (9)4.2主要函数 (9)5 拓展功能 (10)6 装箱清单 (10)1 项目背景收音机从发明到现在,经历了一个多世纪。

技术上从最早期矿石收音机、到电子管收音机,再到后来的半导体收音机,发展到现在高度集成化的集成电路收音机。

体积上,也由早期需要架设天线的收音机,到桌旁听,再到随身听,发展到现在直接集成到手机或耳机上的收音机。

老式收音机当前,常见的广播电台主要由AM(调幅)和FM(调频)两种方式。

AM主要集中在中波电台(526.5kHz~1606.5kHz)和短波电台(2.3~26.1MHz)。

FM主要集中在(87~108MHZ)之间。

由于FM具有较强的抗噪能力,声质优美清晰,因此得到了广泛的应用。

FM方式的频率较高,天线尺寸可以做得很短,也便于小型化,很容易嵌入到其它的电子设备中。

在本项目中,就用到了飞利浦TEA系列立体声收音机接收芯片,结合单片机作为人机交互,自己动手DIY一个FM收音机。

2 项目概述2.1 主要功能该项目实现的主要功能及参数:1、采用液晶作为显示器。

2、可接收87.5~108MHz范围内的调频广播电台。

3、立体声,耳机输出声音。

4、按键可实现音量调节和自动搜台两个功能。

2.2 设计方案项目采用“电子积木+底板”的形式,通过电子积木拼接,实现项目功能。

主要积木包括:51单片机核心板、独立按键模块、FM模块、LCD1602液晶模块。

系统框图这是51单片机FM收音机实物图:实物图3 硬件电路3.1 FM接收模块该模块采用RDA5802E芯片为核心的,新一代数字调频收音机模块。

基于单片机的数字FM收音机(毕业设计)

基于单片机的数字FM收音机(毕业设计)

基于单片机的数字FM收音机设计摘要:本文在具体分析了STC89C52单片机的技术特点与数字FM收音机的基础上,提出了采用单片机控制收音机实现数字调频的方法,并给出了具体的软硬件设计。

该系统利主要由STC89C52单片机、液晶显示器、按键、调频收音模块TEA5767、功放LM386组成[1]。

实际运行时,用TEA5767搜索频率,利用单片机STC89C52控制处理,经LM386芯片放大音频功率同时再通过液晶显示器显示频率,最终实现87.5MHz~108MHz调频广播的接收。

相关的功能验证实验表明,本系统达到了既定的设计目标。

关键词:单片机技术;收音机;频率搜索;液晶显示The Design of Digital FM Radio Which Based on Single ChipMicrocomputerAbstract:This paper mainly proposes the method of using single chip computer to control digital FM radio . It gives the specific hardware and software design which based on a detailed analysis on of the technical characteristics of STC89C52 SCM and digital FM radio. The system uses STC89C52 SCM as CPU for overall control, mainly composed of STC89C52 SCM, LCD display, keypad, FM radio module TEA5767 and LM386 amplifier. When it operates, firstly you should use the TEA5767 display to show the search frequency. Then, control and process it with STC89C52 SCM. By the way magnify the audio power through LM386 chip. The LCD display frequency. Ultimatel y, it’ll reach a broadcast reception range from 87.5MHz to 108MHz FM. Some related functional verification experiments show that the system achieves the established design goals.Keywords:SCM technology; Radio; Frequency search;Liquid-crystal display目录序言 (1)第1章课题分析与方案论证 (2)1.1 课题任务分析 (2)1.2 方案论证 (2)第2章硬件电路 (5)2.1主控电路 (5)2.2音频输出电路 (9)2.3FM收音电路 (12)2.4LCD1062液晶屏模块 (15)2.5按键电路 (16)2.6I2C总线简介 (16)2.7电路装配注意事项 (18)第3章软件设计 (19)3.1主程序设计 (19)3.2液晶屏显示控制子程序 (21)3.3收音机控制子程序 (23)第4章系统测试 (25)4.1硬件测试 (25)4.2软件测试 (25)4.3整机调试 (26)4.4调试结果 (26)结束语 (27)参考文献 (28)致谢 (29)附录 (30)附录1 程序清单 (30)附录2 硬件原理图 (42)附录3 硬件实物图 (43)附录4 外文资料原文 (44)外文资料译文 (50)序言当前时代,虽然电视、手机、互联网等媒体和各种便携式娱乐设备已经普及到千家万户,但传统的收音机在丰富的娱乐媒介中任然占有重要地位。

基于51系列单片机的调频收音机的设计(5.29修改)

基于51系列单片机的调频收音机的设计(5.29修改)

基于51系列单片机的调频收音机的设计摘要收音机从它的诞生至今,不仅方便了媒体信息的传播,也推进了现代电子技术和更先进的电信设备的发展。

从分立元件组成的收音机到由集成电路组成的收音机,从普通的调幅收音机到高级调频收音机。

调频收音机具有灵敏度高、工作稳定、选择性好及失真度小等优点。

以较高的技术含量和较高的音质得到了广泛的欢迎。

本课题主要研究调频收音机的设计全过程,介绍一种基于51系列单片机的调频收音机,能够实现范围在88.5MHz~108.5MHz之间的自动调频,步进0.1M可调。

该系统主要由电源模块、控制模块、显示模块和调频模块,功放模块组成。

它以51单片机为核心,控制TEA5767调频芯片及LED数码管实现调频收音与显示频率,并通过功放播音。

该设计将是一台工作稳定、高性能、体积小、易调谐、接收灵敏度高、参考频率选择灵活、可实现自动搜台的调频收音机。

关键词:调频收音机; 51系列单片机; TEA5767芯片AbstractRadio from its birth date, not only facilitate the media dissemination of information, but also promoted the modern electronic technology and the development of more advanced telecommunications equipment. From discrete components radio to consist of Integrated Circuits Radio, from the ordinary to the senior FM Radio AM FM radio. FM radio has the advantages of high sensitivity, stable work, good selectivity and low degree of distortion etc.. With high technology content and high quality has been widely welcomed.The main topic on FM radio design process, based on the51 Series MCU FM radio, can realize the automatic frequency range between 88.5MHz~108.5MHz, step0.1M adjustable. The system is mainly composed of a power supply module, control module, display module and a modulation module, power amplifier module. With51 single-chip microcomputer as the core control chip, TEA5767FM and LED digital control to achieve the FM radio frequency power amplifier and display, and the broadcast. The design will be a stable work, high performance, small volume, easy tuning, high receiving sensitivity, frequency reference selection is flexible, can realize the automatic searching FM radio.Key words: FM radio;The 51 Series MCU;TEA5767 chip目录第一章绪论 (1)第二章系统总体设计方案 (2)2.1设计的主要任务 (2)2.2设计的主要要求 (2)2.3调频波的特点 (2)2.3.1调频波的形成 (2)2.3.2频偏 (2)2.4广播频段和传播特点 (2)2.5调频广播的优点 (2)2.6调频接收机的主要技术指标有 (3)2.7系统各模块方案论证和选择 (3)2.7.1控制模块 (4)2.7.2调频模块 (4)2.7.3键盘模块 (4)2.7.4显示模块 (4)2.7.5功放模块 (5)2.7.6电源模块 (5)第三章系统硬件电路的设计与实现 (6)3.1 控制模块设计 (6)3.2 调频模块设计 (6)3.3 键盘电路 (7)3.4 显示模块设计 (8)3.5 功放模块设计 (8)3.6 电源模块设计 (9)第四章系统的软件设计 (10)4.1 主程序设计 (10)4.2 TEA5767的主要功能特征 (10)4.3 TEA5767的管脚说明及其基本的外围电路 (11)4.4 TEA5767的应用电路 (12)第五章系统调试 (14)5.1硬件调试 (14)5.2软件调试 (14)东华理工大学毕业设计(论文)目录5.3软硬件调试 (15)5.4结果分析 (15)第六章总结 (16)参考文献 (17)附录一 (18)附录二 (19)第一章绪论1888年德国科学家赫兹,发现了无线电波的存在。

51单片机专用FM调频立体声收音模块操作指南

51单片机专用FM调频立体声收音模块操作指南

51单片机专用FM调频立体声收音模块操作指南
首先下载HEX文件到MCU中,即可插上耳机收听调频广播
在使用过程中如收音效果不理想,请按照以下进行操作
第一种方法:不使用电脑USB供电,改用带USB插口的电源(5V 1A)的都可以。

如没有别的电源可用,就按下一种方法进行:
第一步:打开我的电脑属性,点击硬件----设备管理器
在设备管理器里面找到COM口
如下图,点右键—选择停用即可,如果要从新下载程序必须再点一次右键选择启用
注:如你的单片机开发板没有自动下载的功能,而是使用ISP下载的方式即不需要以上步骤就能接收到满意的效果。

FM收音机原理与原理图

FM收音机原理与原理图

AM/FM收音机的安装与调试ξ1概述一、实习目的:1、学习收音机的调试与装配。

2、提高读整机电路图及电路板图的能力。

3、掌握收音机生产工艺流程,提高焊接工艺水平。

二、实习内容:1、收音机电路原理分析。

2、掌握印制电路板的组装及焊接工艺。

3、进行AM、FM中频及统调覆盖的调试及整机测试。

4、故障判断及排除。

三、实习基本要求:1、会检测元器件并判别其质量。

2、独立完成各测试点的测量与整机安装。

3、会排除在调试与装配过程中可能出现的问题与故障。

4、所制作的产品电器性能指标应能满足三级机水平(国标),具体如下:接收频率范围:AM 525~1605KHZ FM72~108MHZ接收灵敏度:AM 达国家C类标准FM优于μV级输出功率:大于100mW供电电源:DC 3V立体声耳机输出阻抗:32Ωξ2收音机的基本工作原理1、收音机的电路结构种类有很多,早期的多为分立元件电路,目前基本上都采用了大规模集成电路为核心的电路。

集成电路收音机的特点是结构比较简单,性能指标优越,体积小等优点。

AM/FM型的收音机电路可用如图1所示的方框图来表示。

收音机通过调谐回路选出所需的电台,送到变频器与本振电路送出的本振信号进行混频,产生中频输出(我国规定的AM中频为465KHZ,FM中频为10.7MHZ),中频信号将检波器检波后输出调制信号,调制信号经低放、功放放大电压和功率,推动喇叭发出声音。

图1 AM/FM型收音机电路方框图2、本实训中的收音机是一种50型的AM/FM二波段的收音机,收音机电路主要由索尼公司生产的专为调频、调幅收音机设计的大规模集成电路CXA1191M/CXC1191P组成。

由于集成电路内部无法制作电感、大电容和大电阻,故外围元件多以电感、电容和电阻为主,组成各种控制、供电、滤波等电路。

50型收音机电路图如图2所示。

图2 50型收音机电路图CXA1191M/CXC1191P的内部方框图如图3所示。

图3 CXA1191M/CXC1191P的内部方框图下面介绍收音机电路图的功能块电路的作用。

本科毕业设计-基于单片机的数字fm收音机设计

本科毕业设计-基于单片机的数字fm收音机设计

毕业论文题目基于单片机的数字FM收音机设计学生姓名学号 13021101班级: 130211 专业:电气制动化技术分院:工程技术分院指导教师:2015年 11 月 20 日目录摘要 (II)1 基于单片机的FM收音机工作原理 (1)1.1 FM收音机的基本工作原理 (1)1.2 数字调节FM收音机的工作原理 (1)1.3 用单片机完成数字调节的FM收音机的功能设计 (2)2 硬件电路设计.................................... 错误!未定义书签。

2.1 硬件组成.................................. 错误!未定义书签。

2.1.1 数字FM收音机系统控制中心单片机...... 错误!未定义书签。

2.1.2 收音功放芯片TDA2030 (4)2.1.3 PT2257音量模块 (5)2.1.4 FM收音模块 (6)2.2 FM电路及其设计 (8)2.3 单片机控制与显示电路 (10)2.4 供电电路与放大电路 (10)3 软件设计 (12)3.1键盘与显示函数设计 (12)3.1.1 LCD液晶显示函数 (13)3.1.2 键盘读键子程序 (14)3.2数字调节与收音控制程序设计 (14)3.2.1 EA5767HN读写寄存器 (14)3.2.2 TEA5767HN的数据传输 (18)3.2.3 TEA5767HN的读写流程 (18)3.2.4 收音模块的初始化 (18)结论 (21)参考文献 (22)致谢 (23)基于单片机的数字FM收音机设计摘要本文在具体分析了STC89C52单片机的技术特点与数字FM收音机的基础上,提出了采用单片机控制收音机实现数字调频的方法,并给出了具体的软硬件设计。

该系统利主要由STC89C52单片机、液晶显示器、按键、调频收音模块TEA5767、功放LM386组成[1]。

实际运行时,用TEA5767搜索频率,利用单片机STC89C52控制处理,经LM386芯片放大音频功率同时再通过液晶显示器显示频率,最终实现87.5MHz~108MHz调频广播的接收。

(完整word版)基于51单片机的数控调频收音机

(完整word版)基于51单片机的数控调频收音机

课程设计论文题目:基于RDA5807的数控FM收音机院(系):信息与通信学院专业:电子信息工程学生姓名:杜俊峰学号:1100220509指导教师:蔡晓东2013 年12月15日摘要此收音机基于RDA5807收音模块,通过STC89C52单片机来控制频率显示、音量控制,单片机与收音模块之间通过IIC通信协议来进行通信控制。

该数控收音机具有噪音消除、软静音、低音增强,而且灵敏度高、噪声小,抗干扰能力强,能够在液晶屏上实时显示频率和声音。

并且体积小、方便携带。

关键词:RDA5807,STC89C52.IIC通信AbstractThis radio radio module based RDA5807 by STC89C52 microcontroller to control the frequency display, through IIC communication protocol for communication between the control volume control, microcontroller and radio module. The digital radio with noise cancellation, soft mute, bass boost, and high sensitivity, low noise, strong anti-interference ability to display the frequency and sound in real time on the LCD screen. And small, easy to carry.Key words:RDA5807,STC89C52 、IIC目录引言 (1)1 设计要求及方案选择 (1)1.1 设计要求 (1)1.2 方案选择 (1)1.2.1 方案对比 (1)1.2.2 方案构图 (2)1.2.3 各部分作用 (2)2 理论分析与设计 (3)2.1 单片机最小系统设计 (3)2.1.1 STC89C52特性 (3)2.1.2 STC89C521引脚功能 (3)2.2 收音模块及存储芯片电路设计 (4)3 电路设计 (6)3.1 硬件电路设计 (6)3.1.1单片机最小系统电路 (6)3.1.2 模块电路设计 (6)4 软件设计 .............................................................. 错误!未定义书签。

51单片机FM收音机代码

51单片机FM收音机代码

51单片机FM收音机代码/************************************************************** ****************** 程序功能:FM收音机功能,其中,T,D键为设置,L,R键为* 硬件连接:1.LCD1602,P0接D0-D7,RS-P2.2,RW-P2.1,E-P2.22.FM模块,SDA-P3.7,SCL-P3.63.按键:T-P1.3(自动搜索频率加),D-P1.2(自动搜索频率减)L-P1.1(音量加),R-P1.0(音量减)*************************************************************** ****************/#include#include#include#include#include#include "rda5807.h"#include "delay.h"#include "lcd1602.h"#define uchar unsigned char#define uint unsigned int#define GPIO_DIG P2sbit K1 = P1^3;sbit K2 = P1^2;sbit K3 = P1^1;sbit K4 = P1^0;sbit led1 = P1^7;sbit led2 = P1^6;sbit voice=P1^4;/****************数码管**********************/char led_mod[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; /*共阳数码管显示编码*/unsigned char distab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};char led_bit[] = { 0x07, 0x0B, 0x0D, 0x0E }; /*位选信号编码*/ unsigned int DisplayData[4]={0,0,0,0};//************************************************************* *//串口初始化void UART_init(){TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率TH1 = 0xFD; // 波特率9600TL1 = 0xFD;SCON = 0x50; // 设定串行口工作方式PCON &= 0xef; // 波特率不倍增TR1 = 1; // 启动定时器1IE = 0x0; // 禁止任何中断TI =1;}/***********************************************/void delay1ms( unsigned int ms){unsigned char k;while(ms--){for(k = 0; k < 120; k++);}}/******************************************************** 数码管显示*/void show(unsigned long f ){unsigned int i;unsigned int j;DisplayData[0]=f/100000;DisplayData[1]=(f%100000)/10000;DisplayData[2]=((f%100000)%10000)/1000; DisplayData[3]=(((f%100000)%10000)%1000)/100;i=0;while(i<4){P3=0xFF; /*关位选,防止显示混乱*/if(i!=2)P2 = led_mod[DisplayData[i]]; /*送显示编码*/elseP2 = distab[DisplayData[i]]; /*送显示编码*/P3 = led_bit[i];j=600;while(j--);i++;P2 = 0xFF;P3=0xFF;}}/*************蜂鸣器************************/void ring() //蜂鸣器{ int i;for(i=0;i<100;i++){voice=0; //蜂鸣器开delay1ms(1);voice=1;delay1ms(1);}}//************************************************************* *//主函数void main(void){ unsigned long frequency=87000;unsigned int volume=9;UART_init();printf("UART test!\n");lcd_init();displogo();delayms(10000);lcd_init();RDA5807_power();while(1){led1 =1;led2 =1;Lcd_Display(frequency,volume);show(frequency);if(K1 == 0){led1 =0;delayms(20);if(K1 == 0){ring();while(K1 == 0);RDA_reg_data[0] |= (1 << 1); //SEEK UP frequency=RDA5807_FM_seek();printf("frequency:%ld\n",frequency);}}if(K2 == 0){led1 =0;delayms(20);if(K2 == 0){ring();while(K2 == 0);RDA_reg_data[0] &= ~(1 << 1); //SEEK DOWN frequency=RDA5807_FM_seek();printf("frequency:%ld\n",frequency);}}if(K3 == 0){ led2 =0;delayms(20);if(K3 == 0){ring();while(K3 == 0);if((RDA_reg_data[7] & 0x0f) > 0x00){RDA_reg_data[0] = 0xd0;RDA_reg_data[1] = 0x01;RDA_reg_data[3] &= ~(1 << 4);RDA_reg_data[7]--; // 音量递减RDA5807_write_reg();volume=RDA_reg_data[7] & 0x0f;printf("volume:%d\n",volume);}}}if(K4 == 0){ led2 =0;delayms(20);if(K4 == 0){ring();while(K4 == 0);if((RDA_reg_data[7] & 0x0f) < 0x0f){RDA_reg_data[0] = 0xd0;RDA_reg_data[1] = 0x01;RDA_reg_data[3] &= ~(1 << 4);RDA_reg_data[7]++; // 音量递增RDA5807_write_reg();volume=RDA_reg_data[7] & 0x0f;printf("volume:%d\n",volume);}}}}}//************************************************************* **。

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

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

* 晶振:8M*/#include <reg52.h>#include <string.h>#define ChannelCount 50 //最多支持多少个台,因为常驻内存,多了RAM放不下#define uchar unsigned char#define uint unsigned inttypedef 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; //起始频率* 100KHzconst uint MaxFreq = 1080; //最高频率* 100KHzconst 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~0xFuchar 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();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(result>0){ vol = (uchar)result –1;}result =Eprom_Read(1,0);Channel = (uchar)result;for(i=0;i<ChannelCount;i++){result =Eprom_Read(i * 2 + 2,1);ChannelTune[i] = result;}FreqTune = ChannelTune[Channel];}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,(FreqTune<<6) | 0×10);}void FM_SetVolume(){uint reg2H;if(vol>0){if(Mute){reg2H = FM_ReadReg(2);reg2H |= 0×4000;FM_WriteReg(2,reg2H);}FM_WriteReg(5,vol);}else{Mute = 1;reg2H = FM_ReadReg(2);reg2H &= 0xBFFF;FM_WriteReg(2,reg2H);}Eprom_Write(0,vol+1,0);}void Lcd_Init(){uchar CGRamAddr = 0×40;int i,j;LcdEn = 0;Lcd_Comm(0×38);Lcd_Comm(0x0c);Lcd_Comm(0×06);Lcd_Comm(0×01);for(j=0;j<5;j++){Lcd_Comm(CGRamAddr + 8 * j); //建立自定义字符(显示信号强度的) for(i=0;i<8;i++){Lcd_Data(LevlChar[j][i]);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;LcdEn = 1;Delay(50);LcdEn = 0;}void Lcd_String(char* dat){char *p;int j, i=strlen(dat);for(j=0;j<i;j++){p=dat + j;Lcd_Data(*p);}}void Lcd_DispRssi(){int i;Lcd_Comm(0×80);for(i=0;i<5;i++){Lcd_Data(‘‘);}RSSI = FM_GetRSSI();Lcd_Comm(0×80);Lcd_Data(0×00);if(RSSI>=1) Lcd_Data(0×01);if(RSSI>=2) Lcd_Data(0×02);if(RSSI>=3) Lcd_Data(0×03);if(RSSI>=4) Lcd_Data(0×04);}void Lcd_DispFreq(){uint curFreq = MinFreq + FreqTune;int i;Lcd_Comm(0×85);for(i=5;i<16;i++){Lcd_Data(‘‘);}Lcd_Comm(0×80+6);if(curFreq>=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(0×80+0×40);for(i=0;i<15;i++){Lcd_Data(‘‘);}Lcd_Comm(0×80+0×40);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 str[6]={‘\0′,’\0′,’\0′,’\0′,’\0′,’\0′}; char temp;dostr[i++] = ’0′+ (number % 10); number /= 10;}while(number) ;len = strlen(str);for(i=0;i<len/2;i++){temp = str[i];str[i] = str[len-i-1];str[len-i-1] = temp;}Lcd_String(str);}bit KeyScan(){bit keyRel = 0; //按键释放检测char value=0;int i;uint temp;if(AutoScan) return 0;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==0)KeyNumber=2;}}return 0;}else{switch(KeyNumber){case 1:if(key1==1)keyRel = 1; break;case 2:if(key2==1)keyRel = 1; break;case 3:if(key3==1)keyRel = 1; break;case 4:if(key4==1)keyRel = 1; break;}if(keyRel){switch(KeyNumber){case 2:Func++;if(Func>3) Func = 0;break;case 3:value = -1;break;case 4:value = 1;break;}if(KeyNumber>2){if(Func==0){if((value > 0 && Channel<ChannelCount) || (value<0 && Channel > 0)) {Channel+=value;FreqTune= ChannelTune[Channel];FM_SetFreq();Eprom_Write(1,Channel, 0);}else if(Func==1){if((value > 0 && vol<0xF) || (value<0 && vol > 0)){vol+=value;FM_SetVolume();}}else if(Func==2){if((value > 0 && FreqTune<0xd2) || (value<0 && FreqTune > 0)) {FreqTune+=value;ChannelTune[Channel] = FreqTune;FM_SetFreq();Eprom_Write(Channel * 2 + 2 ,FreqTune,1);}}else if(Func==3) //开始自动扫描{AutoScan = 1;BeginScan();AutoScan = 0;Channel = 0;FreqTune = ChannelTune[0];Func = 0;FM_SetFreq();//覆盖EppRom中的所有的频道for(i=0;i<ChannelCount;i++){temp = ChannelTune[i];Eprom_Write(i * 2+2,temp,1);}Eprom_Write(0×01,0,0); //重置EPPROM中的频道号为0}}KeyNumber=0;}return keyRel;}}//全自动搜索void BeginScan(){uint state;int i=0,count=0;bit cmp = 0;uint seekth = 0×8; //灵敏度0~127,默认为8 灵敏度越低越可能搜索到假台,高了可能一些信号弱一点的频道被跳过。

51单片机控制的FM收音机

51单片机控制的FM收音机

专业综合课程设计基于单片机控制的FM收音机班级:通信(三)班成绩:基于单片机控制的FM收音机摘要:单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。

单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。

正因为单片机有如此多的优点,因此其应用领域之广,几乎到了无孔不入的地步。

在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、智能化家用电器、航空航天系统和和国防军事、尖端武器等各个方面。

我们可以开发利用单片机系统以获得很高的经济效益。

更重要的意义是单片机的应用改变了控制系统传统的设计思想和方法。

以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。

这种以软件结合硬件或取代硬件并能提高系统性能的控制技术称为微控制技术。

例如,本文所要论述的通过单片机来控制TEA5767HN芯片及驱动LCD1602液晶屏实现FM收音并显示频率。

现在人们常使用的收音机为手动调频收台,使用较为麻烦,而且由于接收灵敏度不高,所接收的频段较窄。

本设计采用的是TEA5767HN芯片,它是由PHILIPS公司推出的针对低电压应用的单芯片数字调谐FM立体声收音机芯片。

TEA5767HN芯片内集成了完整的IF频率选择和鉴频系统,只需很少的低成本外围元件,就可实现FM收音机的全部功能。

另外,它具有高性能的RF AGC电路,其接收灵敏度高;参考频率选择灵活;可实现自动搜台。

关键词:89C52单片机;TEA5767HN芯片;2822功率放大器AbstractThis test constitute with stc89c52 singlechip micyoco, tea5767 model,2822 power amplifier,1602 and peripheral circuit.In the design process,we used modular design for several types,such as searching model,display model,storage model and some ancillary function.STC series singlechip has very good control ability and stable level to meet the requirements.前言:本设计研究FM收音机分为硬件电路和程序设计两个方面。

基于RDA5820的芯片功能扩展(DOC)

基于RDA5820的芯片功能扩展(DOC)

成都信息工程学院基于RDA5820芯片功能扩展班级:技术人员:文档整理:指导老师:日期:年月号摘要该项目是以收音机芯片为核心,进行一系列功能扩展(扩展功能自定)。

其中采用收音机芯片(RDA5820)进行无线电的接收。

同时以TI芯片(MSP430F5529)作为主控芯片进行显示与控制。

最后是以芯片(TDA2822)作为功放模块进行音量调节。

显示包括时钟显示和收音机频段显示。

关键词:RDA5820;MSP430F5529;TDA2822AbstractA series of function extension is based on the radio chip, in which uses the radio chip (RDA5820) to carry out radio reception. At the same time, with TI chip (MSP430F5529) as the master control chip for display and control. Finally based on chip (TDA2822) as a power amplifier module which can adjust the volume. Display including the clock display and the radio spectrum.Key Words:RDA5820; MSP430F5529; TDA282目录1 引言 (1)1.1 背景 (1)1.2 研究内容提要 (1)2 系统框图 (2)3 主控模块 (3)3.1 芯片选择 (3)3.2 主控芯片 (4)3.3 JTAG接口 (5)3.4 液晶显示模块 (6)3.5 晶振 (6)3.6 变压模块 (7)3.7 MSP430F5529芯片介绍 (7)3.7.1 MSP430系列 (8)3.7.2 部分功能介绍 (9)4 收音机模块 (10)4.1 RDA5820概述 (10)4.2 应用范围 (10)4.3 功能特点 (11)4.4 电气特性 (11)5 功率放大模块 (11)5.1 功率放大电路说明 (11)5.2 TDA2822芯片介绍 (12)5.2.1 概述与特点 (12)5.2.2 引出端功能 (12)5.3 应用电路 (13)5.3.1 TDA2822立体声应用线路 (13)5.3.2 TDA2822单声道桥式(BTL)应用线路 (14)6 部分程序及代码 (14)7 总结 (15)参考文献 (16)1引言1.1背景从1923年1月23日第一批收音机的问世到现今,收音机经历了翻天覆地的“改革”,从矿石收音机、电子管收音机、晶体管收音机、集成电路收音机到如今的DSP收音机(全球收音机数字化),可谓日新月异。

[实用参考]51单片机控制的FM收音机

[实用参考]51单片机控制的FM收音机

专业综合课程设计基于单片机控制的FM收音机班级:通信(三)班成绩:基于单片机控制的FM收音机摘要:单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。

单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。

正因为单片机有如此多的优点,因此其应用领域之广,几乎到了无孔不入的地步。

在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、智能化家用电器、航空航天系统和和国防军事、尖端武器等各个方面。

我们可以开发利用单片机系统以获得很高的经济效益。

更重要的意义是单片机的应用改变了控制系统传统的设计思想和方法。

以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。

这种以软件结合硬件或取代硬件并能提高系统性能的控制技术称为微控制技术。

例如,本文所要论述的通过单片机来控制TEA5767HN芯片及驱动LCD1602液晶屏实现FM收音并显示频率。

现在人们常使用的收音机为手动调频收台,使用较为麻烦,而且由于接收灵敏度不高,所接收的频段较窄。

本设计采用的是TEA5767HN芯片,它是由PHILIPS公司推出的针对低电压应用的单芯片数字调谐FM立体声收音机芯片。

TEA5767HN芯片内集成了完整的IF频率选择和鉴频系统,只需很少的低成本外围元件,就可实现FM收音机的全部功能。

另外,它具有高性能的RFAGC电路,其接收灵敏度高;参考频率选择灵活;可实现自动搜台。

关键词:89C52单片机;TEA5767HN芯片;2822功率放大器AbstractThistestconstitutewithstc89c52singlechipmicPoco,tea5767model,28 22poweramplifier,1602andperipheralcircuit.Inthedesignprocess,weused modulardesignforseveraltPpes,suchassearchingmodel,displaPmodel,stor agemodelandsomeancillarPfunction.STCseriessinglechiphasverPgoodco ntrolabilitPandstableleveltomeettherequirements.前言:本设计研究FM收音机分为硬件电路和程序设计两个方面。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

* 晶振:8M*/#include <reg52.h>#include <string.h>#define ChannelCount 50 //最多支持多少个台,因为常驻内存,多了RAM放不下#define uchar unsigned char#define uint unsigned inttypedef 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; //起始频率* 100KHzconst uint MaxFreq = 1080; //最高频率* 100KHzconst 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~0xFuchar 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();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(result>0){ vol = (uchar)result –1;}result =Eprom_Read(1,0);Channel = (uchar)result;for(i=0;i<ChannelCount;i++){result =Eprom_Read(i * 2 + 2,1);ChannelTune[i] = result;}FreqTune = ChannelTune[Channel];}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,(FreqTune<<6) | 0×10);}void FM_SetVolume(){uint reg2H;if(vol>0){if(Mute){reg2H = FM_ReadReg(2);reg2H |= 0×4000;FM_WriteReg(2,reg2H);}FM_WriteReg(5,vol);}else{Mute = 1;reg2H = FM_ReadReg(2);reg2H &= 0xBFFF;FM_WriteReg(2,reg2H);}Eprom_Write(0,vol+1,0);}void Lcd_Init(){uchar CGRamAddr = 0×40;int i,j;LcdEn = 0;Lcd_Comm(0×38);Lcd_Comm(0x0c);Lcd_Comm(0×06);Lcd_Comm(0×01);for(j=0;j<5;j++){Lcd_Comm(CGRamAddr + 8 * j); //建立自定义字符(显示信号强度的) for(i=0;i<8;i++){Lcd_Data(LevlChar[j][i]);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;LcdEn = 1;Delay(50);LcdEn = 0;}void Lcd_String(char* dat){char *p;int j, i=strlen(dat);for(j=0;j<i;j++){p=dat + j;Lcd_Data(*p);}}void Lcd_DispRssi(){int i;Lcd_Comm(0×80);for(i=0;i<5;i++){Lcd_Data(‘‘);}RSSI = FM_GetRSSI();Lcd_Comm(0×80);Lcd_Data(0×00);if(RSSI>=1) Lcd_Data(0×01);if(RSSI>=2) Lcd_Data(0×02);if(RSSI>=3) Lcd_Data(0×03);if(RSSI>=4) Lcd_Data(0×04);}void Lcd_DispFreq(){uint curFreq = MinFreq + FreqTune;int i;Lcd_Comm(0×85);for(i=5;i<16;i++){Lcd_Data(‘‘);}Lcd_Comm(0×80+6);if(curFreq>=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(0×80+0×40);for(i=0;i<15;i++){Lcd_Data(‘‘);}Lcd_Comm(0×80+0×40);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 str[6]={‘\0′,’\0′,’\0′,’\0′,’\0′,’\0′}; char temp;dostr[i++] = ’0′+ (number % 10); number /= 10;}while(number) ;len = strlen(str);for(i=0;i<len/2;i++){temp = str[i];str[i] = str[len-i-1];str[len-i-1] = temp;}Lcd_String(str);}bit KeyScan(){bit keyRel = 0; //按键释放检测char value=0;int i;uint temp;if(AutoScan) return 0;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==0)KeyNumber=2;}}return 0;}else{switch(KeyNumber){case 1:if(key1==1)keyRel = 1; break;case 2:if(key2==1)keyRel = 1; break;case 3:if(key3==1)keyRel = 1; break;case 4:if(key4==1)keyRel = 1; break;}if(keyRel){switch(KeyNumber){case 2:Func++;if(Func>3) Func = 0;break;case 3:value = -1;break;case 4:value = 1;break;}if(KeyNumber>2){if(Func==0){if((value > 0 && Channel<ChannelCount) || (value<0 && Channel > 0)) {Channel+=value;FreqTune= ChannelTune[Channel];FM_SetFreq();Eprom_Write(1,Channel, 0);}else if(Func==1){if((value > 0 && vol<0xF) || (value<0 && vol > 0)){vol+=value;FM_SetVolume();}}else if(Func==2){if((value > 0 && FreqTune<0xd2) || (value<0 && FreqTune > 0)) {FreqTune+=value;ChannelTune[Channel] = FreqTune;FM_SetFreq();Eprom_Write(Channel * 2 + 2 ,FreqTune,1);}}else if(Func==3) //开始自动扫描{AutoScan = 1;BeginScan();AutoScan = 0;Channel = 0;FreqTune = ChannelTune[0];Func = 0;FM_SetFreq();//覆盖EppRom中的所有的频道for(i=0;i<ChannelCount;i++){temp = ChannelTune[i];Eprom_Write(i * 2+2,temp,1);}Eprom_Write(0×01,0,0); //重置EPPROM中的频道号为0}}KeyNumber=0;}return keyRel;}}//全自动搜索void BeginScan(){uint state;int i=0,count=0;bit cmp = 0;uint seekth = 0×8; //灵敏度0~127,默认为8 灵敏度越低越可能搜索到假台,高了可能一些信号弱一点的频道被跳过。

相关文档
最新文档