AT89S52 12MHZ TEA5767的数码管显示调频收音机.docx
- 文档编号:6993225
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:6
- 大小:16.32KB
AT89S52 12MHZ TEA5767的数码管显示调频收音机.docx
《AT89S52 12MHZ TEA5767的数码管显示调频收音机.docx》由会员分享,可在线阅读,更多相关《AT89S52 12MHZ TEA5767的数码管显示调频收音机.docx(6页珍藏版)》请在冰豆网上搜索。
AT89S5212MHZTEA5767的数码管显示调频收音机
AT89S52+12MHZ+TEA5767的数码管显示调频收音机
/**************************************************************************************************************
AT89S52+12MHZ+TEA5767的数码管显示调频收音机
本程序使用数码管显示频率晶振是用12M已通过测试,收音机的频率调节是用计算的方法将显示的频率算好后写到TEA5767
芯片里面实现调节的两个按键实现自加或自减频率加了连续加减功能!
使用的是在淘宝上买的4.5元/片的简化版的TEA5767模块.
2012-05-08
/**************************************************************************************************************/
#include;
#defineucharunsignedchar
#defineuintunsignedint
/**************************************************************************************************************/
sbitSDA=P3^0;//接在TEA5767的数据端口
sbitSCL=P3^1;//接在TEA5767的时钟端口
sbitKEY1=P3^4;//频率增加按键端口
sbitKEY2=P3^5;//频率减小按键端口
sbitKEY3=P3^6;//频率增加按键端口
sbitKEY4=P3^7;//频率减小按键端口
#defineduanP0
//频率显示的数码管段选P0端口
//#definegy
//使用共阴极时屏蔽这行
sbitdula=P2^6;
sbitwela=P2^7;
ucharIF,ADC,CH;
//bitRF,STEREO;
#ifdefgy
unsignedcharcodedispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//显示位码
unsignedcharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//数码管显示编码
#else
/**************************************************************************************************************/
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管显示编码
unsignedcharcodedispbit[]={0x7e,0x7d,0x7b,0x77,0x6f,0x5f};/*定义点亮的数码管与数组的关系*/
#endif
/**************************************************************************************************************
unsignedcharradio_write_data[5]={0x2c,0xe1,0x70,0x16,0x80};//频率为93.9MHz广东音乐电台
unsignedcharradio_write_data[5]={0x30,0x5c,0x70,0x16,0x80};//频率为101.2MHz广东电台音乐之声
unsignedcharradio_write_data[5]={0x31,0x38,0x70,0x16,0x80};//频率为103.0MHz广东珠江经济电台
unsignedcharradio_write_data[5]={0x31,0xd7,0x70,0x16,0x80};//频率为104.3MHz宝安广播电台
unsignedcharradio_write_data[5]={0x32,0x20,0x70,0x16,0x80};//频率为104.9MHz中央人民广播电台华夏之声
unsignedcharradio_write_data[5]={0x33,0x2d,0x70,0x16,0x80};//频率为107.1MHz中国国际广播电台环球资讯
/**************************************************************************************************************/
unsignedcharradio_read_data[5];
unsignedcharradio_write_data[5];
unsignedlongfrequency=104900;//开机初始化的电台频率为104.9MHz中央民广播电台华夏之声
unsignedintPLL;
//计算频率合成时用的变量
/**************************************************************************************************************/
voidDelayus(unsignedcharx)
{
for(;x>;0;x--);
}
/**************************************************************************************************************/
voidiic_start()//启动总线传输
{
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
SDA=0;
Delayus(4);
SCL=0;
Delayus(4);
}
/**************************************************************************************************************/
voidiic_stop()//结束总线传输
{
SCL=0;
Delayus(4);
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SDA=1;
Delayus(4);
}
/**************************************************************************************************************/
voidiic_ack()//发送应答位
{
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
SDA=1;
Delayus(4);
}
/**************************************************************************************************************/
bitiic_testack()
{
bitErrorBit;
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
ErrorBit=SDA;
Delayus(4);
SCL=0;
returnErrorBit;
}
/**************************************************************************************************************/
voidiic_write8bit(unsignedcharinput)//写一个字节的数据到总线上
{
unsignedchartemp;
for(temp=8;temp>;0;temp--)
{
SDA=(bit)(input&0x80);
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
input=input;0;b--)
for(i=0;i;>;=4;
//STEREO=radio_read_data[2]&0x80;//最高位就是STEREO值
temp_l=radio_read_data[1];
temp_h=radio_read_data[0];
temp_h&=0x3f;
PLL=temp_h*256+temp_l;
get_frequency();//读TEA5767状态,并转换成频率
}
/**************************************************************************************************************/
#definemax_freq108000
#definemin_freq87500
//自动搜台,mode=1,频率增加搜台;mode=0:
频率减小搜台
voidauto_search(uchardec)
{
intk=0;
//unsignedcharaa[6]={0};
radio_write();//写收音机芯片数据
if(dec)//自动搜台,mode=1,频率增加搜台
{
while(frequency;0x31)&&(ADC>;4))//&&(STEREO)&&(RF))//如搜到电台
{
frequency+=100;
return;
}
}
frequency=min_freq;//将最小频率下限值赋给当前频率
}
else//自动搜台,mode=0:
频率减小搜台
{
while(frequency>;min_freq)//如果当前频率大于最小频率下限值
{
get_pll();//由频率计算PLL
radio_write_data[0]=PLL/256;
radio_write_data[1]=PLL%256;
radio_write_data[2]=0x20;//减小频率搜索,低:
ADC输出大小为5,高充电电流
radio_write_data[3]=0x11;//fxtal=32.768KHz,软件静音开
radio_write_data[4]=0x80;//6.5MHz的锁相环参考频率开,去加重时间常数为50us。
radio_write_data[0]|=0x40;//01000000=SM/SM=1则处于搜索模式
radio_write();
//写入TEA5767
desplay(frequency/100);
//调用显示
radio_read();//读收音机芯片数据
//if((radio_read_data[0]&0x80))//如果有一个频道被搜到或者一个制式已经符合
if((IF;0x31)&&(ADC>;4))//&&(STEREO)&&(RF))//如搜到电台
{
frequency-=100;
return;
}
}
frequency=max_freq;//将最大频率上限值赋给当前频率
}
}
/**************************************************************************************************************/
voidmain()
{
/**************************************************************************************************************
//观察变量用
unsignedcharB,D;
frequency=104900;
PLL=(unsignedint)((float)((frequency+225))/(float)8.192);
B=PLL/256;
D=PLL%256;
delay();
/**************************************************************************************************************/
delays(1000);//延时消抖
search();//写入初始化电台频率
//radio_read();
while
(1)
{
if(!
KEY1)//手动设置频率,+0.1MHz;
{
delays(250);//延时消抖
frequency+=100;
if(frequency>;108500)//频率如果大于108.5MHz
frequency=87500;
//频率设定为87.5MHz
search();
//将显示的频率算好后写到TEA5767芯片里面
desplay(frequency/100);
//调用显示
}
/**************************************************************************************************************/
if(!
KEY2)
//手动设置频率,-0.1MHz;
{
delays(20);//延时消抖
frequency-=100;
if(frequency<87500)//频率如果小于87.5MHz
frequency=108500;
//频率设定为108.5MHz
search();
//将显示的频率算好后写到TEA5767芯片里面
desplay(frequency/100);
//调用显示
}
/**************************************************************************************************************/
if(!
KEY3)
//加频率
{
delays(250);//延时消抖
if(!
KEY3)
{
auto_search
(1);//自动搜台,mode=1,频率增加搜台
}
while(!
KEY3)desplay(frequency/100);//调用显示
}
/**************************************************************************************************************/
if(!
KEY4)
//减频率
{
delays(20);//延时消抖
if(!
KEY4)
{
auto_search(0);//自动搜台mode=0:
频率减小搜台
}
while(!
KEY4)desplay(frequency/100);//调用显示
}
desplay(frequency/100);
//调用显示
}
}
/**************************************************************************************************************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89S52 12MHZ TEA5767的数码管显示调频收音机 12 MHZ TEA5767 数码管 显示 调频 收音机