标题:
FM收音机+12864+TEA5767的单片机程序
[打印本页]
作者:
kwokkevin
时间:
2018-12-6 11:01
标题:
FM收音机+12864+TEA5767的单片机程序
12864显示,fm收音模块文件!
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define max_freq 1080 //最高频率
#define min_freq 875 //最低频率
uchar data fm_w[5]={0x00,0x00,0x31,0x17,0x00};//这是要写入的数据
uchar data fm_r[5]={0,0,0,0,0}; //这是放读出的数据
//位定义说明:u:=1向上自动搜台反之。。。
bit SM,SUD,RF,SystemError,u,SD,HISI=1,mode;
uchar IF,ADC,STEREO,ADC1;
uint fm,PLL,freq1;
uint frequency=1049;
//#include"FM_PLL.h"//这里包涵的是FM收音的PLL值
sbit down =P1^1; //频道下
sbit up =P1^2; //频道上
sbit menu =P1^0;
sbit k3 =P1^1;
sbit k4 =P1^2;
sbit ok =P1^3;
sbit SDA=P2^6;
sbit SCL=P2^7;
sbit SDA1=P2^0;
sbit SCL1=P2^1;
uchar menu_bit=0; //申请一下菜单的变量
uchar ch=1; //申请一个频道号码变量
uchar ch_max; //申请一个最大台号保存变量
delayms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<123;j++);
}
void display();
void key_search();
void fm_xing();
void search();
void auto_search();
void get_pll(void);
void get_freq(void);
void delay() //10ms定时器,晶振6M时
{
TMOD=0x01;
TH0=0xEC; //
TL0=0x78;
TR0=1;
do{}while(!TF0);
TF0=0;
}
#include <LCD1602.h> //包含的头文件
#include"IIC.h"
#include"IAP.h"
#include"display.h"
//由频率计算PLL
void get_pll(void)
{
unsigned long y=frequency;
PLL=((y*100+225)/8.192);
}
void get_freq(void) //由PLL计算频率
{
unsigned long y;
y=PLL;
freq1=(y*8192-225000)/100000+1;
}
void fm_xing() //FM收音芯片数据刷新一次
{
write_5byte(); //送入到5767里面
delayms(50); //送进PLL值后,要等50ms再去读TEA5767里面的数据
read_5byte(); //读TEA5767的5个字节数据
}
//手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,
//不用考虑TEA5767用于搜台的相关位:SM,SUD
void search()
{
//给频率+/-1,
if(mode)
{
frequency+=1;
if(frequency>max_freq)
frequency=min_freq;
}
else
{
frequency-=1;
if(frequency<min_freq)
frequency=max_freq;
}
fm_xing();
key_display(); //调用显示程序
}
//自动搜台,mode=1,频率增加搜台; mode=0:频率减小搜台
void auto_search()
{
do
{
if(mode)
fm_w[2]=0xa0; //增加频率搜索
else
fm_w[2]=0x20; //减少频率搜索
search(); //频率调整,+或-
fm_xing();
}
while((IF>0x3e)|(IF<0x31)|(ADC<5)|(!STEREO)|(!RF)); //搜台成功标志
}
/**********************************************************/
void FM_init()
{
uchar a1,a2;
ch=Byte_Read(0x401); //读出上次播放时的台号
ch_max=Byte_Read(0x201); //读出保存的最高台号
a1=Byte_Read(ch*3-1);
display();
a2=Byte_Read(ch*3);
display();
PLL=a1*256+a2; //
get_freq(); //由PLL计算频率
frequency=freq1;
iicInit();
delayms(300);//等待电源稳定后再发数据
if(frequency>max_freq,frequency<min_freq)
{
frequency=min_freq; //防止出错
}
fm_xing(); //给PLL写入TEA5767中,并读出其中的状态
display(); //调用显示程序
}
/**********************************************************/
void main(void)
{
init_12864(); // 初始化LCD
delayms(10);
write_code(0x0c); //向右移动光标
write_code(0x91);
write_hz("FM载入中...");
//开机画面
delayms(500); //延时
write_code(0x01); //清屏
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
FM收音机 12864 TEA5767.rar
(8.33 KB, 下载次数: 87)
2018-12-6 11:00 上传
点击文件名下载附件
作者:
admin
时间:
2018-12-6 16:44
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
没有什么的
时间:
2019-5-16 16:28
这个程序有问题!用不了
作者:
单片机学习习
时间:
2024-11-3 23:02
,程序不全
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1