|
學51單片機做了一個RDA5807M的FM收音機-但雜音大,不知道是哪問題,雜音真的很大,是不是程序出問題了?程序是在網絡上下載的,電路裝好后就可以有聲音了。
20170606_210755.jpg (80.36 KB, 下載次數: 162)
下載附件
2017-6-16 14:43 上傳
20170606_210806.jpg (103.85 KB, 下載次數: 160)
下載附件
2017-6-16 14:43 上傳
20170606_210847.jpg (81.9 KB, 下載次數: 134)
下載附件
2017-6-16 14:43 上傳
20170616_142814.jpg (76.48 KB, 下載次數: 160)
下載附件
2017-6-16 14:43 上傳
20170616_142825.jpg (77.33 KB, 下載次數: 132)
下載附件
2017-6-16 14:43 上傳
20170616_142832.jpg (68.03 KB, 下載次數: 118)
下載附件
2017-6-16 14:43 上傳
20170616_142839.jpg (72.25 KB, 下載次數: 152)
下載附件
2017-6-16 14:43 上傳
20170616_142939.jpg (83.55 KB, 下載次數: 146)
下載附件
2017-6-16 14:43 上傳
2017-06-16_144655.jpg (186.73 KB, 下載次數: 135)
下載附件
2017-6-16 14:47 上傳
- /*****************************************************************
- * *
- * ME850單片機開發系統擴展應用 - 收音模塊演示程序 *
- * *
- * MCU 芯片: AT89S52 工作頻率: 11.0592MHz *
- * *
- *【版權】Copyright(C) 深圳碩飛科技有限公司 All Rights Reserved *
- *【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息! *
- * *
- ******************************************************************
- * *
- * K1--- 向上搜索電臺 K2--- 向下搜索電臺 *
- * K3--- 音量加 K4--- 音量減 *
- * *
- *****************************************************************/
- #include <reg51.h>
- #include <intrins.h>
- //#include "lcd.h"
- #include "IIC.h"
- #include "delay.h"
- sbit K1 = P3^2;
- sbit K2 = P3^3;
- sbit K3 = P3^4;
- sbit K4 = P3^5;
- unsigned long frequency;
- // RDA5807 寄存器
- unsigned char RDA_reg_data[8] =
- {
- 0xd0,0x00, // 02H
- 0x00,0x00, // 03H
- 0x00,0x40, // 04H
- 0x90,0x88, // 05H
- };
- //unsigned char code cdis1[ ] = {"FM STEREO RADIO "};
- //unsigned char code cdis2[ ] = {"FM VOL "};
- char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個字節
- #define uchar unsigned char
- #define uint unsigned int
- /**********************************************************
- 連續寫寄存器子函數
- **********************************************************/
- void RDA5807_write_reg(void)
- {
- uchar i;
- I2C_start();
- // 收音模塊寫入操作
- I2C_write_byte(0x20);
- // 寄存器連續寫操作
- for(i=0; i<8; i++)
- {
- I2C_write_byte(RDA_reg_data[i]);
- }
- I2C_stop();
- }
- /**********************************************************
- 連續讀寄存器子函數
- **********************************************************/
- void RDA5807_read_reg(uchar *reg_buf)
- {
- I2C_start();
- // 收音模塊讀取操作
- I2C_write_byte(0x21);
- // 寄存器連續讀操作
- reg_buf[0] = I2C_read_byte(I2C_ACK);
- reg_buf[1] = I2C_read_byte(I2C_ACK);
- reg_buf[2] = I2C_read_byte(I2C_ACK);
- reg_buf[3] = I2C_read_byte(I2C_NACK);
- I2C_stop();
- }
- /**********************************************************
- 模塊上電初始化子函數
- **********************************************************/
- void RDA5807_power(void)
- {
- delayms(50);
- // 發送軟件復位指令
- RDA_reg_data[0] = 0x00;
- RDA_reg_data[1] = 0x02;
- RDA5807_write_reg();
- delayms(10);
- // 收音模塊默認參數
- RDA_reg_data[0] = 0xd0;
- RDA_reg_data[1] = 0x01;
- RDA5807_write_reg();
- }
- /**********************************************************
- 功能描述:收音模塊自動尋臺模式
- **********************************************************/
- void RDA5807_FM_seek(void)
- {
- uint chan;
- uchar reg_data[4] = {0x00, 0x00, 0x00, 0x00};
- RDA_reg_data[3] &= ~(1 << 4); //調諧禁用
- // 內部自動尋臺使能
- RDA_reg_data[0] |= (1 << 0); //SEEK位置1
- RDA5807_write_reg();
- // 等待STC 標志置位
- while(0 == (reg_data[0] & 0x40))
- {
- delayms(20);
- // 讀取內部狀態
- RDA5807_read_reg(reg_data);
- }
- // 獲取當前工作頻點
- chan = reg_data[0] & 0x03;
- chan = reg_data[1] | (chan << 8);
- chan = chan << 6;
- // 保存當前工作頻點
- RDA_reg_data[2] = (chan >> 8) & 0xff;
- RDA_reg_data[3] = (chan & 0xff);
- }
- #include<stdio.h>
- void mInitSTDIO( void )
- { /* 僅用于調試用途及顯示內容到PC機,與該程序功能完全無關,為printf和getkey輸入輸出初始化串口 */
- SCON = 0x50;
- PCON = 0x80;
- TMOD = 0x20;
- TH1 = 0xfd; /* 11.0592MHz晶振, 19200bps */
- TR1 = 1;
- TI = 1;
- }
- /**********************************************************
- 頻率顯示子函數
- **********************************************************/
- /*void show_frequency(void)
- {
- // unsigned char i,display[5];
- unsigned int temp;
- double temp1;
- temp = (RDA_reg_data[2]*256)+(RDA_reg_data[3]&0xc0); //計算
- temp = temp>>6;
- frequency = (unsigned long)(100*temp+87000)/100;
- temp1= (double)frequency/10.0;
- printf("the fz=%.1fM\n",temp1) ;
- /*for(i=0; i<5; i++) // 清顯存單元
- display[i] = 0x00;
- display[0] = (frequency)/1000 ; //數據轉換
- display[1] = (frequency%1000)/100;
- display[2] = (frequency%100)/10;
- display[3] = 0x2e; //小數點
- display[4] = (frequency%10);
- if(display[0] == 0)
- {
- display[0] = display[1]+0x30;
- display[1] = display[2]+0x30;
- display[2] = display[3];
- display[3] = display[4]+0x30;
- display[4] = 0x20;
- }
- else
- {
- display[0] += 0x30;
- display[1] += 0x30;
- display[2] += 0x30;
- display[4] += 0x30;
- }
- lcd_pos_xy(3,2); //頻率顯示
- lcd_wdat(display[0]);
- lcd_wdat(display[1]);
- lcd_wdat(display[2]);
- lcd_wdat(display[3]);
- lcd_wdat(display[4]); */
- //}
-
- /**********************************************************
- 音量顯示子函數
- **********************************************************/
- /*void show_volume()
- {
- unsigned int temp;
- temp = RDA_reg_data[7] & 0x0f; //取音量值
- printf("the voice=%d\n",temp);
- /* display[0] = temp/10;
- display[1] = temp%10;
- if(display[0] == 0) //如果高位為0
- {
- display[0] = display[1]; //低位顯存內容進入高位顯存
- display[1] = 0x20; //低位不顯示
- }
- else
- {
- display[1] += 0x30;
- }
- display[0] += 0x30;
- lcd_pos_xy(13,2); //音量值顯示
- lcd_wdat(display[0]);
- lcd_wdat(display[1]); */
- //}
- /**********************************************************
- 主函數
- **********************************************************/
- void main(void)
- {
- RDA5807_power();
- mInitSTDIO();
- while(1)
- {
- if(K1 == 0)
- {
- delayms(20);
- if(K1 == 0)
- {
- RDA_reg_data[0] |= (1 << 1); //SEEK UP
- RDA5807_FM_seek();
- while(K1 == 0);
- }
- }
- if(K2 == 0)
- {
- delayms(20);
- if(K2 == 0)
- {
- RDA_reg_data[0] &= ~(1 << 1); //SEEK DOWN
- RDA5807_FM_seek();
- while(K2 == 0);
- }
- }
- if(K3 == 0)
- {
- delayms(20);
- if(K3 == 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();
- while(K3 == 0);
- }
- }
- }
- if(K4 == 0)
- {
- delayms(20);
- if(K4 == 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();
- while(K4 == 0);
- }
- }
- }
- delayms(200);
- // show_volume();
- // show_frequency();
- }
- }
- /*********************************************************/
復制代碼
全部資料下載地址:
RDA5807M-FM程序.rar
(39.17 KB, 下載次數: 287)
2017-6-16 14:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|