打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
我用洞洞板做的TEA5767数字调频立体声收音机
//本程序使用数码管显示频率,晶振是用12M,已通过测试, 已用万能板做好成品,
//在我的QQ空间里有万能板做的照片,高清的照片可以进QQ相册看,本人空间未加密。
//为了方便电子爱好者自制,本程序将所有的端口进行了宏定义,方便初学者自行修改,并且加了很多注释
// 陈永飞 先生写于2011年2月19号,QQ:49204743,邮箱:baiyni888@163.com.
//地址:江苏省南京市鼓楼区虎踞路180号苏宁电器售后服务中心草场门网点
//本收音机的频率调节是用计算的方法,将显示的频率算好后写到TEA5767芯片里面实现调节的
//使用MCS-51单片机进行控制,两个按键实现自加或自减频率,加了连续加减功能!
//使用的是在淘宝上买的4.5元/片的简化版的TEA5767模块,在南京收到了十个电台
#include <reg51.h>
#include <string.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
/////////////////////////////////////////////////////////////////////////////////////////////////////这
uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; //数码管段码表  /////些
sbit led1=P2^4; //频率显示的数码管位选端口 100兆,P2.4端口     /////是
sbit led2=P2^5; //频率显示的数码管位选端口  10兆,P2.5端口     /////端
sbit led3=P2^6; //频率显示的数码管位选端口   1兆,P2.6端口     /////口
sbit led4=P2^7; //频率显示的数码管位选端口 0.1兆,P2.7端口     /////,
sbit SDA=P3^0; //接在TEA5767的数据端口        /////可
sbit SCL=P3^1; //接在TEA5767的时钟端口        /////以
sbit KEY1=P1^0;  //频率增加按键端口       /////自
sbit KEY2=P1^1;  //频率减小按键端口       /////行
#define duan P0 //频率显示的数码管段选P0端口       /////修
/////////////////////////////////////////////////////////////////////////////////////////////////////改
//unsigned char radio_write_data[5]={0x33,0x8e,0x70,0x16,0x80};        //要写入TEA5767的数据,107.9M江苏旅游台
//unsigned char radio_write_data[5]={0x32,0x8e,0x70,0x16,0x80};        //要写入TEA5767的数据,105.8M 南京音乐台
//unsigned char radio_write_data[5]={0x31,0xd7,0x70,0x16,0x80};        //要写入TEA5767的数据,104.3M南京体育台
//unsigned char radio_write_data[5]={0x30,0x9a,0x70,0x16,0x80};        //要写入TEA5767的数据,101.7M南京经济台城市调频
unsigned char radio_write_data[5]={0x30,0x50,0x70,0x16,0x80};        //要写入TEA5767的数据,101.1M江苏交通广播网
//unsigned char radio_write_data[5]={0x2f,0xa5,0x70,0x16,0x80};        //要写入TEA5767的数据,99.7M江苏金色调频
//unsigned char radio_write_data[5]={0x2c,0xc9,0x70,0x16,0x80};        //要写入TEA5767的数据,97.5M江苏文艺台
//unsigned char radio_write_data[5]={0x2c,0xc9,0x70,0x16,0x80};        //要写入TEA5767的数据,93.7M江苏经济台居家广播
//unsigned char radio_write_data[5]={0x2b,0xb0,0x70,0x16,0x80};        //要写入TEA5767的数据,91.4M江苏广播
//unsigned char radio_write_data[5]={0x2a,0xe1,0x70,0x16,0x80};        //要写入TEA5767的数据,89.7M江苏音乐台
unsigned long frequency=101100; //开机初始化的电台频率为101.1MHz
unsigned int pll;  //计算频率合成时用的变量
void Delayus(unsigned char x)
{
for(;x>0;x--);
}
void iic_start()
{
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
SDA=0;
Delayus(4);
SCL=0;
Delayus(4);
}
void iic_stop()
{
SCL=0;
Delayus(4);
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SDA=1;
Delayus(4);
}
void iic_ack()
{
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
SDA=1;
Delayus(4);
}
bit iic_testack()
{
bit ErrorBit;
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
ErrorBit=SDA;
Delayus(4);
SCL=0;
return ErrorBit;
}
void iic_write8bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp>0;temp--)
{
SDA=(bit)(input&0x80);
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
input=input<<1;
}
}
void delays (unsigned char b) //按键消抖用的延时程序
{
unsigned char i;
for(b;b>0;b--)
for(i=0;i<250;i++);
}
void radio_write(void)
{
unsigned char i;
iic_start();
iic_write8bit(0xc0);        //TEA5767写地址
if(!iic_testack())
{
for(i=0;i<5;i++)
{
iic_write8bit(radio_write_data[i]);
iic_ack();
}
}
iic_stop();
}
//将显示的频率算好后写到TEA5767芯片里面实现调节,不用考虑TEA5767用于搜台的相关位:SM,SUD
void search()
{
pll=(unsigned int)((float)((frequency+225))/(float)8.192);    //计算合成频率数据,频率单位:k
radio_write_data[0]=pll/256; //将算好的频率高位数据写入TEA5767
radio_write_data[1]=pll%256; //将算好的频率低位数据写入TEA5767
radio_write_data[2]=0x70;  //这是TEA5767开立体声,关静音
radio_write_data[3]=0x16;  //中国制式,采用32768晶振,软静音关,立体声消噪声开
radio_write_data[4]=0x80;  //6.5M锁相环开,去加重时间75US
radio_write();
}
void delay()
{
uchar k;
for(k=0;k<100;k++);
}
void desplay(uint aa)
{
duan=tab[aa/1000]|0x80;  //关这位数码管的小数点
led1=0;
delay();
led1=1;
duan=tab[aa%1000/100]|0x80;  //关这位数码管的小数点
led2=0;
delay();
led2=1;
duan=tab[aa%100/10]&0x7f; //点亮这位数码管的小数点
led3=0;
delay();
led3=1;
duan=tab[aa%10]|0x80;  //关这位数码管的小数点
led4=0;
delay();
led4=1;
}
void main()
{
radio_write();  //写入初始化电台频率
while(1)
{
if(!KEY1)  //手动设置频率,+0.1MHz;
{
delays(250); //延时消抖
frequency+=100;
if(frequency>108500) //频率如果大于108.5MHz
frequency=87500; //频率设定为87.5MHz
search();
desplay(frequency/100);  //调用显示
}
if(!KEY2)   //手动设置频率,-0.1MHz;
{
delays(250); //延时消抖
frequency-=100;
if(frequency<87500) //频率如果小于87.5MHz
frequency=108500; //频率设定为108.5MHz
search();
desplay(frequency/100);  //调用显示
}
desplay(frequency/100);  //调用显示
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
I2C总线协议(AT24c02)程序
MSP430F149模拟IIC读写24C02程序
学51单片机-基于PCF8591的AD采样和DA输出【实际应用篇】
ADXL345程序。 (amoBBS 阿莫电子论坛)
51单片机”光控窗帘“简易版c(带视频)
在PC上用并行口模拟I2C总线的C源代码实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服