基于单片机的RDS接收控制设计_第1页
基于单片机的RDS接收控制设计_第2页
基于单片机的RDS接收控制设计_第3页
基于单片机的RDS接收控制设计_第4页
基于单片机的RDS接收控制设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录摘 要1abstract2第1章 方案设计31.1 基于nrf401的接收控制设计31.2 基于rds功能的接收控制设计4第2章 接收模块设计62.1接收模块硬件设计62.1.1 fm接收电路设计62.1.2 单片机控制电路的设计72.1.3音频放大电路的设计82.2 接收部分软件设计92.2.1 qn8035的源程序92.2.2 12864源程序212.2.3 单片机控制qn8035的程序322.2.4 i2c总线的源程序36结 论43参考文献44附 录45摘 要 现代社会中,基于单片机的rds接收控制模块是我们在生活、学习等各方面普遍接触到的商品的重要组成部分之一,如无线对讲机、收音

2、机等。它有效地为我们的生活提供了便利。 本文主要设计一个基于单片机的rds接收控制模块。采用嵌入式处理器芯片stc89c52rc控制,使用fm接收芯片qn8035接收信息。本系统设计分为硬件设计和软件设计两部分。硬件设计部分包含fm接收电路设计、单片机控制电路设计和音频放大电路设计;软件设计部分包含qn8035的源程序、12864源程序、单片机控制qn8035的程序和i2c总线的源程序。然后通过protel进行仿真,实现本次系统设计的功能。关键词: 单片机stc89c52rc 、qn8035、接收控制、rds功能abstract in modern society, based on sing

3、le chip microcomputer rds reception control module is our life, study and so on various aspects in common exposure to one of the important component of the goods, such as radio, radio, etc. it effectively provides a convenience to our lives. in this paper, we design a rds receiver based on single-ch

4、ip microcomputer control module. using embedded processor chip stc89c52rc control, the use of fm receiver chip qn8035 receiving information. this system is divided into hardware design and software design two parts. hardware design part contains an fm receiver circuit design, the mcu control circuit

5、 design, and audio amplifier circuit design; software design section contains qn8035 source program, 12864 source program, single-chip microcomputer control qn8035 programs and source code of the i2c bus. then simulation by protel, can realize the function of the system design.keywords: scm ,stc89c5

6、2rc and qn8035, receives the control, the rds function 基于单片机的rds接收控制设计第1章 方案设计1.1 基于nrf401的接收控制设计 nrf401是nordic公司研制的单片uhf无线收发芯片,工作在433mhz ism(industrial, scientific and medical)频段。它采用fsk调制解调技术,抗干扰能力强,并采用pll频率合成技术,频率稳定性好,发射功率最大可达10dbm,接收灵敏度最大为105dbm,数据传输速率可达20kbps,工作电压在+35v之间。nrf401无线nrf401无线收发芯片所需外围

7、元件较少,并可直接接单片机串口。 nrf401芯片内包含有发射功率放大器(pa)、低噪声接收放大器(lna)、晶体振荡器(osc)、锁相环(pll)、压控振荡器(vco)、混频器(mixfr)、解调器(dem)等电路。在接收模式中,nrf401被配置成传统的外差式接收机,所接收的射频调制的数字信号被低噪声效大器放大,经混频器变换成中频,放大、滤波后进入解调器,解调后变换成数字信号输出(dout端)。在发射模式中,数字信号经din端输入,经锁相环和压控振荡器处理后进入到发射功率放大器射频输出。由于采用了晶体振荡和pll合成技木,频率稳定性极好;采用fsk调制和解调,抗干扰能力强。50的单端天线通

8、过差分转换匹配网络连接到nrf401的ant1和ant2引脚。使用nrf401的ant1和ant2引脚是接收时低噪声接收放大器lna的输入,以及发送时发射功率放大器pa的输出。连接nrf401的天线可以以差分方式连接到nrf401,一个50的单端天线也可以通过一个差分转换匹配网络连接到nrf401。环形天线nrf401,整个环形天线可以做在pcb上,对比传统的鞭状天线或单端天线,不仅节省空间和生产成本,机构上也更稳固可靠,图1.1 基于nrf401无线收发设计的框图。 话 筒功效前置放大nrf401单片机图1.1 基于nrf401无线数字对讲系统设计的框图1.2 基于rds功能的接收控制设计调

9、频发射部分:与qn8035接收机模块配对的是以qn8027芯片为中心的发射模块,可以实现音频和rds的发射。单片机我们使用开发板,这样解决了我们编写软件时没有硬件的问题,并且开发板每个管脚可以用跳线引出,接线方便。qn8027是一颗高性能、低能耗、全功能的立体声调频发射单芯片,主要适用于便携式音频和视频播放器、汽车配件、手机及gps个人导航设备等。qn8027集成了完整的fm发射、空台扫描,以及天线自动调谐等功能。先进的数字架构使变量输入增益可编程,可选预加重,提供了精确的mpx 立体声编码,基于pll的低噪声调制以及纯净的频谱。qn8027凭借其体积小巧,所需外部元件数量少,并且支持多个时钟

10、频率,很容易被集成到多种小型低功耗便携式应用中。qn8027集成了稳压器使它可以直接连接电池,并提供高电源纹波抑制比可以更高效地抑制噪声。具有低功耗待机模式,能充分延长电池使用时间。所有管脚都有静电保护。qn8027应用高可靠性的cmos制程制造。 调频接收机:在众多的fm接收模块中我们选择使用qn8035芯片为中心的模块。qn8035 是一颗高性能、低能耗、全功能的立体声调频接收单芯片,主要适用于手机、mp3播放器及便携式收音机等。qn8035支持rds/rbds数据接收。接收射频信号首先由一个低噪声放大器,然后向下转换为一个中间频率传给正交混频器。为了改善音质,抑制噪音,正交混频器可被编程

11、在高端或低端注入。每个通道使用滤波器抑制干扰信号。它还可以接收rds信息,内容可以通过lcd显示。高功率32负载音频输出,直接耳机驳接,无需外接音频放大,图1.2 基于qn8027、qn8035无线收发系统设计框图。fm射频放大话筒8027前置放大单片机8035音频功放扬声器单片机图1.2 基于qn8027、qn8035无线数字对讲系统设计框图综上比较两种方案,考虑系统的便携性,效率以及成本问题nrf401虽然可以符合设计要求,所需外围较少,可直接与串口相接,但是qn8035开发板每个管脚可以用跳线引出,接线方便,qn8027应用高可靠性的cmos制程制造,更加适合本设计的要求,因此采用方案二

12、来实现这个系统。第2章 接收模块设计2.1接收模块硬件设计2.1.1 fm接收电路设计qn8035 是一颗高性能、低能耗、全功能的立体声调频接收单芯片,主要适用于手机、mp3播放器及便携式收音机等。qn8035支持rds/rbds数据接收。支持全球 fm 波段发射;76 mhz 108 mhz全波段调步长50/100/200 khz;50/75s 去加重;易于集成;小封装,提供 2.5 x2.5mm qfn16 和 3x3 msop10两种封装;支持32.768 khz mhz的时钟输入;i2c控制接口;低功耗;典型值 13 ma;vcc: 2.75.0v,集成稳压器,可直连电池;vio: 1

13、.63.6v, vcc: 2.75.0v;省电和待机模式;极小关断电流;提供1.63.6v 数字接口;高性能;优越的灵敏度,优于 1.5vemf;63db 立体声信噪比, 0.03% thd;集成了音频处理 (snc, hcc, sm);改进了自动搜台功能;l/r声道分离 45db;rds/rbds 接收机;支持美国和欧洲的数据服务;稳健运行;在-250c 到 +850c 范围内运;所有输入和输出管脚都有静电保护。图2.1.1是qn8035fm接收电路框图。图2.1.1 qn8035接收电路内部图2.1.2 单片机控制电路的设计 stc89c52单片机具有以下特点:增强型8051 单片机,6

14、时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.2;工作电压:5.5v3.3v(5v 单片机)/3.8v2.0v(3v 单片机);工作频率范围:040mhz,相当于普通8051 的080mhz,实际工作 频率可达48mhz;用户应用程序空间为8k 字节;片上集成512 字节ram;通用i/o 口(32 个),复位后为:p0/p1/p2/p3 是准双向口/弱上拉, p0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 i/o 口用时,需加上拉电阻;isp(在系统可编程)/iap(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(rxd/p3

15、.0,txd/p3.1)直接下载用户程 序,数秒即可完成一片;具有eeprom 功能;具有看门狗功能;共3个16位定时器/计数器。即定时器t0、t1、t2;外部中断4 路,下降沿中断或低电平触发电路,power down 模式可 由外部中断低电平触发中断方式唤醒;通用异步串行口(uart),还可用定时器软件实现多个uart;工作温度范围:-40+85(工业级)/075(商业级);pdip 封装。图2.1.2是stc89c52rc控制qn8035的电路图。图2.1.2 stc89c52控制qn8035电路2.1.3音频放大电路的设计由于qn8035与qn8027均是双信道接收机,所以音频放大的时

16、候也要选择双信道音频放大。音频放大电路主要用来向扬声器中送去驱动信号,它可以将功率进行放大。图2.1.3是音频放大电路。图2.1.3 音频放大电路2.2 接收部分软件设计2.2.1 qn8035的源程序/*qn8035.h*/#ifndef _qn8035_h_#ifndef _qn8035_h_#include #define uint unsigned int#define uchar unsigned char/*一级指令*/#define clear 0#define turn_on 1#define turn_off 2#define action_on3 #define actio

17、n_off 4#define send_rds5#define change_fm6/*从机开关二级指令*/#define area11#define area22#define area33#define area44#define area55#define area66#define area77#define area88#define area99#define area_all10#define area_single11/*从机动作二级指令*/#define yu_cun5#define man_set4#define feng_mq3#define ji_dq2#define

18、zhi_sd1uint fm=9000; /接收频率初始值uchar vol=0x0f; /音量初始值最大sbit rssi_zs = p37;bit mute_flag=1;bit rds_flag=0; /rds标志位extern uchar init_riss;extern uchar init_volue;extern uchar defu_mute;/定义操作qn8035数据区unsigned char idata qn8035_send9;unsigned char idata qn8035_read9;unsigned char idata buffer36=0,1,2,3,4,

19、5,6,7,8,9,0,1,2,3,4,5,6,7,8,9;void qn8035_delay(unsigned int count);void qn8035_init(void);bit rds_check();void rds_init();unsigned char qn8035_rssi_read();void qn8035_write_freq(unsigned int frequnt);void qn8035_vol_set(unsigned char uclevel);void qn8035_mute_ctr(bit mute_flag);void qn8035_set();un

20、signed int qn8035_auto_seek(unsigned int str_freq);unsigned int qn8035_auto_seek_ll(unsigned int str_freq);#endif/*函数功能:定义软件延时函数名:qn8035_delay入口参数:count出口参数:无*/void qn8035_delay(unsigned int count)unsigned int i,j;for(i=count; i0; i-)for(j=111; j0; j-);/*函数功能:初始化qn8035模块函数名:qn8035_init入口参数:无出口参数:无*/

21、void qn8035_init(void) qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x81; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x18; qn8035_send0x01 = 0x10; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x2f; qn8035_send0x01 = 0x90; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x

22、00 = 0x40; qn8035_send0x01 = 0x01; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x46; qn8035_send0x01 = 0x05; qn8035_send0x02 = 0xd0; qn8035_send0x03 = 0xa8; i2c_data_write(0x20, &qn8035_send0, 4); qn8035_send0x00 = 0x4a; qn8035_send0x01 = 0x18; i2c_data_write(0x20, &qn8035_send0, 2); q

23、n8035_send0x00 = 0x14;qn8035_send0x01 = 0xc6; qn8035_send0x02 = 0x00; qn8035_send0x03 = 0x02; qn8035_send0x04 = 0x20; i2c_data_write(0x20, &qn8035_send0, 5); qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x51; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_delay(1000); qn8035_send0x00 = 0x00; qn8035_sen

24、d0x01 = 0x01; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x11; qn8035_send0x02 = 0x49; i2c_data_write(0x20, &qn8035_send0, 3);qn8035_delay(279);/*函数功能:读取rssi信号,用来控制静音,防止噪音,也可实现电源控制函数名:qn8035_rssi_read入口参数:无出口参数:qn8035_read0*/unsigned char qn8035_rssi_read()i2c_

25、selset_read(0x20, 0x03, &qn8035_read0, 1);/,读取rssi信号,用来控制静音,防止噪音/return qn8035_read0;if(qn8035_read0-46) = init_riss)/理想的信号强度,开启声音,(启动电源) if(defu_mute)/静音时能 qn8035_send0x00 = 0x14;qn8035_send0x01 = 0x40|init_volue;i2c_data_write(0x20, &qn8035_send0, 2);rssi_zs=0;defu_mute=0; else/-/信号强度不够,使能静音,关闭电源!

26、 if(!defu_mute) /没有静音 qn8035_send0x00 = 0x14;qn8035_send0x01 = 0xc6;i2c_data_write(0x20, &qn8035_send0, 2);rssi_zs=1;defu_mute=1; /*函数功能:向qn8035模块写入一个频率,手动设置频率函数名:qn8035_write_freq入口参数:frequnt 需要写入的频率出口参数:无*/void qn8035_write_freq(unsigned int frequnt) qn8035_send0x00 = 0x07; qn8035_send0x01 = (freq

27、unt - 6175)/5; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x0a; qn8035_send0x01 = (frequnt - 6175)/5 8) | 0x60; i2c_data_write(0x20, &qn8035_send0, 2);/*函数功能:软件音量调节函数名:qn8035_write_freq入口参数:uclevel 需要写入的声音大小出口参数:无*/void qn8035_vol_set(unsigned char uclevel)qn8035_send0x00=0x14;qn8035_

28、send0x01=0x40|(uclevel);i2c_data_write(0x20, &qn8035_send0, 2);/*函数功能:手动静音控制,如果mute_flag=1静音,否则不静音,函数名:qn8035_mute_ctr入口参数:mute_flag 出口参数:无*/void qn8035_mute_ctr(bit mute_flag)if(mute_flag)qn8035_send0x00 = 0x14;qn8035_send0x01 = 0xc6;i2c_data_write(0x20, &qn8035_send0, 2);elseqn8035_send0x00 = 0x14

29、;qn8035_send0x01 = 0x40|vol;i2c_data_write(0x20, &qn8035_send0, 2);/*函数功能rds 初始化*/void rds_init() qn8035_send0x00 = 0x17; /rds使能 qn8035_send0x01 = 0xa0; i2c_data_write(0x20, &qn8035_send0, 2);qn8035_send0x00 = 0x00; /开启rds qn8035_send0x01 = 0x19; i2c_data_write(0x20, &qn8035_send0, 2); bit rds_check

30、() uchar i,j,k;uchar bian=0,old=0;i=150;while(i-) i2c_selset_read(0x20,0x13,&qn8035_read0x00,1);qn8035_read0x00&=0x9f;if(qn8035_read0x00=16|qn8035_read0x00=144) if(old!=qn8035_read0x00) bian+;old=qn8035_read0x00; delay_1ms(5); /*观测用*/wr_string(0,2,变化次数:);/wr_int(5,2,bian);if(bian3)return 1;else retu

31、rn 0;void qn8035_set()bit flag; qn8035_init(); /qn8035初始化qn8035_write_freq(fm); /设置频率rds_init(); /rds初始化/flag=rds_check();/if(flag)mute_flag=0;rds_flag=1; /else mute_flag=1; rds_flag=0; /qn8035_mute_ctr(mute_flag);qn8035_vol_set(vol); /设置音量/*函数功能:qn8035模块实现自动搜索函数名:unsigned int qn8035_auto_seek(unsig

32、ned int str_freq)入口参数:str_freq出口参数:搜索到的频率*/unsigned int qn8035_auto_seek(unsigned int str_freq)unsigned int scan_freq,read_freq,send_freq;unsigned char freq_h;scan_freq=str_freq; rescan: qn8035_send0x00 = 0x08; qn8035_send0x01 = (scan_freq - 6175)/5; qn8035_send0x02 = 0x9d; qn8035_send0x03 = (scan_f

33、req - 6175)/5 6) | 0x70; i2c_data_write(0x20, &qn8035_send0, 4); qn8035_send0x00 = 0x01; qn8035_send0x01 = 0x7d; /75 i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x10; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x12; i2c_dat

34、a_write(0x20, &qn8035_send0, 2);qn8035_delay(500); i2c_selset_read(0x20, 0x0a, &qn8035_read0, 1); freq_h=(qn8035_read0&0x03); i2c_selset_read(0x20, 0x07, &qn8035_read0, 1); read_freq=freq_h*256+qn8035_read0; send_freq=(read_freq)*5+6175; if(send_freq=10800) scan_freq=8760; goto rescan; else return (

35、send_freq); /*/-qn8035程序完-/*/*函数功能:qn8035模块实现自动搜索,反向收缩函数名:unsigned int qn8035_auto_seek(unsigned int str_freq)入口参数:str_freq出口参数:搜索到的频率*/unsigned int qn8035_auto_seek_ll(unsigned int str_freq)unsigned int scan_freq,read_freq,send_freq;unsigned char freq_h;scan_freq=str_freq; rescan_ll:qn8035_send0x00

36、 = 0x08;qn8035_send0x01 = (scan_freq - 6175)/5; qn8035_send0x02 = 0x0d;/9d qn8035_send0x03 = (scan_freq - 6175)/5 6) | 0x60; i2c_data_write(0x20, &qn8035_send0, 4); qn8035_send0x00 = 0x01; qn8035_send0x01 = 0x59; i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x10;

37、 i2c_data_write(0x20, &qn8035_send0, 2); qn8035_send0x00 = 0x00; qn8035_send0x01 = 0x12; i2c_data_write(0x20, &qn8035_send0, 2);qn8035_delay(500); i2c_selset_read(0x20, 0x0a, &qn8035_read0, 1); freq_h=(qn8035_read0&0x03); i2c_selset_read(0x20, 0x07, &qn8035_read0, 1); read_freq=freq_h*256+qn8035_rea

38、d0; send_freq=(read_freq)*5+6175; if(send_freq=8800) scan_freq=10850; goto rescan_ll; else return (send_freq); /*/-qn8035程序完-/*2.2.2 12864源程序/*12864c.h*/设定wr为p24/设定en为p23/在main()中开输出/*#define uint unsigned int#define uchar unsigned char#ifndef _12864c_h_#define _12864c_h_#define uint unsigned int#de

39、fine uchar unsigned char#includesbit rs=p23; /片选(正)sbit sid=p24; /rw(sid)sbit sclk=p25; /e(scld)sbit rst=p37; /复位(正)sbit psb=p26; /(负:串行模式) /sbitpsb=p04;/sbitrst=p03;/在此设置输入端口*#define lcd_sid1 sid=1#define lcd_sid0 sid=0 /wr 做数据传输使用sid#define lcd_sclk1 sclk=1#define lcd_sclk0 sclk=0 /en 当做串行时钟使用sclk

40、#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1code uchar num=0123456789;#define cpu_f (double)16000000)/cpu frequency8000000#define delay_us(x) _delay_cycles(long)(cpu_f*(double)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(cpu_f*(double)x/1000.0)/wr_lcd(1,data)/wr_lcd

41、(0,address)void clr_34();void delay180us();void delay_1ms(uchar del);void lcd_set();void wr_lcd(uchar dat_comm,uchar content); /写数据/地址或命令 dat_comm为数据 content数据void init_lcd(void); /初始化void clrram(); /清屏void clr_lcd(uchar x,uchar y0,uchar length); /清除lcd任意位置字符 从y0行,的第x个位置(1、16),清除length个字符void lcd_xy

42、(uchar x,uchar y0);/定位光标void wr_data(uchar x,uchar y0,uchar data0 );/void wr_string(uchar x,uchar y0,uchar *p);/void wr_int2(uchar x,uchar y0,uint num); void wr_int(uchar x,uchar y0,uint num); /写入4为整形数据 void wr_xxx(uchar hang,uchar lie,int sign); void wr_long(uchar x,uchar y0,long num); void wr_floa

43、t(uchar x,uchar y0,float num); /写入xx.xxx型浮点数#endifvoid clr_34() clr_lcd(0,2,16); clr_lcd(0,3,16);void lcd_set()/配置液晶引脚工作在串口模式下rs=1;psb=0;rst=1;void delay180us()/11.0592mhzunsigned char i, j;_nop_();_nop_();i = 6;j = 93;dowhile (-j); while (-i); /* 名称 : delay_1ms()/22.1184mhz*/void delay_1ms(uchar del)uchar i, j,k;for(k=0;kdel;k+)_nop_();i = 2;j = 199;dowhile (-j); while (-i);void init_lcd(void)/*init_lcd()wr_lcd(comm,0x30);/8-bit控制接口,基本指令集动作wr_lcd(comm,0x01);/清除显示 全屏清除delay_1ms(1);wr_lcd(comm,0x06);/光标右移,ac自动加一,整体显示不移动wr_lcd(comm,0x0c);/整体显示on

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论