51单片机FM收音机课程设计报告.docx

上传人:b****4 文档编号:5579728 上传时间:2023-05-08 格式:DOCX 页数:15 大小:710.84KB
下载 相关 举报
51单片机FM收音机课程设计报告.docx_第1页
第1页 / 共15页
51单片机FM收音机课程设计报告.docx_第2页
第2页 / 共15页
51单片机FM收音机课程设计报告.docx_第3页
第3页 / 共15页
51单片机FM收音机课程设计报告.docx_第4页
第4页 / 共15页
51单片机FM收音机课程设计报告.docx_第5页
第5页 / 共15页
51单片机FM收音机课程设计报告.docx_第6页
第6页 / 共15页
51单片机FM收音机课程设计报告.docx_第7页
第7页 / 共15页
51单片机FM收音机课程设计报告.docx_第8页
第8页 / 共15页
51单片机FM收音机课程设计报告.docx_第9页
第9页 / 共15页
51单片机FM收音机课程设计报告.docx_第10页
第10页 / 共15页
51单片机FM收音机课程设计报告.docx_第11页
第11页 / 共15页
51单片机FM收音机课程设计报告.docx_第12页
第12页 / 共15页
51单片机FM收音机课程设计报告.docx_第13页
第13页 / 共15页
51单片机FM收音机课程设计报告.docx_第14页
第14页 / 共15页
51单片机FM收音机课程设计报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

51单片机FM收音机课程设计报告.docx

《51单片机FM收音机课程设计报告.docx》由会员分享,可在线阅读,更多相关《51单片机FM收音机课程设计报告.docx(15页珍藏版)》请在冰点文库上搜索。

51单片机FM收音机课程设计报告.docx

51单片机FM收音机课程设计报告

微处理器系统综合设计

51单片机FM收音机

姓名

朱洪涛

学号

311309020430

学院

计算机科学与技术学院

班级

通信1304

1设计要求

51单片机FM收音机分为硬件电路和程序设计两个方面。

从硬件电路来说,主要是实现所需电压值、稳压、搜台、控制和频率显示等方面;从系统程序来说,主要是通过软件来实现RDA5807模块的功能,最后将程序经过编译后所生成的后缀为.HEX的文件烧录到单片机芯片中,使用IIC总线方式调台,并且得到当前的频率,处理并实现频率转换、显示。

2项目概述

2.1主要功能

该项目实现的主要功能及参数:

(1)采用液晶作为显示器。

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

(3)立体声,耳机输出声音。

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

2.2设计方案

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

主要积木包括:

51单片机核心板、独立按键模块、FM模块、LCD1602液晶模块。

系统框图

51单片机FM收音机实物图

程序框图

3硬件电路

F

M接收模块

该模块采用RDA5802E芯片为核心的,新一代数字调频收音机模块。

具有比传统模拟制式收音机模块更突出的性能表现,音质极佳,噪音极少,功耗更低,集成度高,接收灵敏度高、中频选择性好、通用I2C总线控制、外围应用元件少、噪声系数低。

创新平台底板

该底板采用标准定位孔的设计,并集成有5V直流电源接口及自锁电源开关、3.3V电源、8路LED显示、外接接口拓展等。

在课程设计中,为各模块提供固定、供电和接口转换功能。

51单片机核心模块

51单片机核心板即CORE51-BOARD模块。

该模块为51单片机最小系统板,采用标准定位孔的设计,支持JTAG和串口两种下载方式,四组I/O口全部引出,可广泛用于单片机基础学习和电子创新等电子电路的微控制系统。

LCD1602液晶模块

LCD1602液晶模块,即LCD1602-BOARD板。

该模块以工业液晶LCD1602为核心,采用标准定位孔的设计,在原有液晶的基础上增加了背光控制功能。

该模块能够同时显示2行16列共计32个字符。

8位独立按键模块

本模块共8个独立按键,分别分为“上”、“下”、“左”、“右”键和A、B、C、D四个功能键,每个按键对应一个输出端口。

输出端默认高电平,当对应按键按下时,输出低电平。

4软件程序

4.1程序流程

本项目采用C51语言开发,在集成开发环境KEIL中编写完成。

(1)初始化

开机后,完成的初始化包括:

1、串口初始化。

串口初始化之后,可通过printf语句通过串口打印信息。

可以作为程序调试的方法。

2、液晶初始化。

液晶LCD1602初始化,并显示“开机界面”,然后再清屏。

(2)主循环

1、显示当前频率及音量信息。

调用Lcd_Display(),根据变量frequency及volume显示。

2、根据键值,执行相应程序。

如果4个按键有按下的,分别会执行:

自动搜台加减和音量加减。

4.2主要函数

(1)库函数I2C.h

该文件包括了I2C总线驱动的一些基本函数。

主要包括:

1、I2C启动函数,I2C_start();

2、I2C停止,I2C_stop();

3、写单字节,I2C_write_byte(unsignedcharindata);

4、读单字节,I2C_read_byte(unsignedcharack)。

(2)LCD1602液晶驱动

液晶LCD1602的驱动主要由:

1、测试LCD遇忙检测,BOOLlcd_bz();

2、写入指令数据到LCD,voidlcd_wcmd(BYTEcmd);

3、设定显示位置,voidlcd_pos(BYTEpos);

4、写入字符显示数据到LCD,voidlcd_wdat(BYTEdat);

5、LCD初始化设定,voidlcd_init()。

几个构成,调用时,通过下面例程,实现显示。

lcd_pos(0x00);//设定显示位置为:

第一行第一个

for(i=0;i<16;i++)

{lcd_wdat(logo1[i]);

}

(3)FM模块相关函数

FM模块与单片机通过I2C总线通信,相关函数有:

1、写数据,RDA5807_write_reg(void);

2、读数据,RDA5807_read_reg(uchar*buff);

3、自动搜台,RDA5807_FM_seek(void);

4.3主程序

/*******************************************************************************

*程序功能:

FM收音机功能,其中,T,D键为频率设置,L,R键为音量设置

*硬件连接:

1.LCD1602,P0接D0-D7,RS-P2.2,RW-P2.1,E-P2.2

2.FM模块,SDA-P3.7,SCL-P3.6

3.按键:

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"

#defineucharunsignedchar

#defineuintunsignedint

#defineGPIO_DIGP2

sbitK1=P1^3;//K1接P1.3口,自动搜索频率加

sbitK2=P1^2;//K2接P1.2口,自动搜索频率减

sbitK3=P1^1;//K3接P1.2口,音量加

sbitK4=P1^0;//K4接P1.0口,音量减

sbitled1=P1^7;//led灯1

sbitled2=P1^6;//led灯2

sbitvoice=P1^4;//蜂鸣器接口

/****************数码管**********************/

charled_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管显示编码

unsignedchardistab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

charled_bit[]={0x07,0x0B,0x0D,0x0E};/*位选信号编码*/

unsignedintDisplayData[4]={0,0,0,0};

//**************************************************************

//串口初始化

voidUART_init()

{

TMOD=0x20;//定时器1工作于8位自动重载模式,用于产生波特率

TH1=0xFD;//波特率9600

TL1=0xFD;

SCON=0x50;//设定串行口工作方式

PCON&=0xef;//波特率不倍增

TR1=1;//启动定时器1

IE=0x0;//禁止任何中断

TI=1;

}

/***********************************************/

voiddelay1ms(unsignedintms)

{

unsignedchark;

while(ms--)

{

for(k=0;k<120;k++);

}

}

/*************蜂鸣器************************/

voidring()

{inti;

for(i=0;i<100;i++)

{

voice=0;//蜂鸣器开

delay1ms

(1);

voice=1;//蜂鸣器开

delay1ms

(1);

}

}

//**************************************************************

//主函数

voidmain(void)

{unsignedlongfrequency=87000;//设置当前频率为87MHZ

unsignedintvolume=9;//设置当前音量值为9

UART_init();

printf("UARTtest!

\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);//SEEKUP

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);//SEEKDOWN

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);

}

}

}

}

}

//***************************************************************

5拓展功能

在本项目的基础上增加功能,参考FM收音机设计,可用数码管直接显示当前频率。

数码管显示主程序如下:

/********************************************************

数码管显示

*/

voidshow(unsignedlongf)

{

unsignedinti;

unsignedintj;

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]];/*送显示编码*/

else

P2=distab[DisplayData[i]];/*送显示编码*/

P3=led_bit[i];

j=600;

while(j--);

i++;

P2=0xFF;

P3=0xFF;

}

}

6系统设计总结

本次课程设计经过一周时间的磕磕碰碰之后终于圆满完成了。

经过本次课设,我将模拟电子电路、单片机、C语言程序设计的知识重新学习了一遍,并运用到实际中。

可以说,这一次的课程设计让我对整个的电子电路设计过程有了一个重新的认识,并且,我学会了怎么去查阅资料,也认识到了之前所学的电路知识只有在运用实际电路中才能对它们有着更深刻的认识。

本次设计的重点是最小系统的制作和对模块程序的消化,在我的原理设计中,各个集成块的外围电路都不是特别复杂,于是整个设计的重点就落在了程序的设计上,所以单片机知识是一定要加强的,尤其是编程能力。

可以说通过本次设计又把电路方面的知识以及汇编语言重复加强了一遍,同时也接触了几种新的器件,了解了它们的用法。

在硬件连接电路和编程调试过程中不可避免地遇到各种问题,这要求保持沉着冷静,联系书本理论知识积极地思考,实在解决不了可以请教同学或指导老师。

虽然在制作过程中不可避免地遇到很多问题,而且基于个人水平,器件质量,制作工艺和条件等,有些指标不是很完美,但是最后还是在老师以及同学的帮助下还是解决了这些问题,实现了系统总调试,基本达到相关指标要求,很好地完成了本次设计任务。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2