51单片机驱动TEA5767调频收音机芯片C程序

发布者:石头上种庄稼最新更新时间:2015-07-01 来源: 51hei关键字:51单片机  TEA5767  调频收音机芯片 手机看文章 扫描二维码
随时随地手机看文章

完整的源代码下载地址: http://www.51hei.com/bbs/dpj-19294-1.html  下面是程序的主要部分:

                 /*-----------  TEA5767 驱动-----------*/
                 /*------   外部晶振为  12MHz-------*/           
     /*--------最后修改2011.02.26-------*/
#include "STC12C5620AD.H"
#include "IIC.H"
#include "delay.h"
#include "Radio.H"
#include "Channel_Handle.H"

#define Max_Freq 108000
#define Min_Freq 87500
/********************** 声明外部变量**************************/
extern uchar data Display_FM[9];    //From Main.c
/********************** 定义变量**************************/
uchar TEA5767_Write_Data[5]={0x29,0x9e,0x40,0x12,0x40};        //要写入TEA5767的数据
uchar TEA5767_Read_Data[5];
 
unsigned long Frequency;
unsigned int PLL=0x299e;
/********************** TEA5767 写入数据**************************/
void TEA5767_Write(void)
{
    uchar i;
    IIC_Start();
    IIC_Write_Byte(0xc0);            //TEA5767写地址
    if(!IIC_Test_ACK())
    {
        for(i=0;i<5;i++)
        {
            IIC_Write_Byte(TEA5767_Write_Data[i]);
            IIC_ACK();
        }
    }
    IIC_Stop();    
}[page]
/********************** 由PLL获取频率**************************/
void TEA5767_Get_Frequency(void)
{
    uchar HLSI;
 uint NPLL=0;
 NPLL=PLL;
    HLSI=TEA5767_Write_Data[2]&0x10;
    if (HLSI)
        Frequency=(unsigned long)((float)(NPLL)*(float)8.192-225);    //频率单位:KHz
    else
        Frequency=(unsigned long)((float)(NPLL)*(float)8.192+225);    //频率单位:KHz
}
/**********************显示当前频率**************************/
void TEA5767_Display_Frequency()
{
 TEA5767_Get_Frequency();    //由PLL得到频率
 Display_FM[0]=(Frequency/100000);
 if(Display_FM[0]==0)
  Display_FM[0]=0x20;     //第一位为0的话,不显示
 else
  Display_FM[0]|=0x30;    
 Frequency=Frequency%100000;
 Display_FM[1]=0x30|(Frequency/10000);
 Frequency=Frequency%10000;
 Display_FM[2]=0x30|(Frequency/1000);
 Frequency=Frequency%1000;
 Display_FM[4]=0x30|(Frequency/100);  
}
/**********************初始化TEA5767**************************/
void TEA5767_Init()

 TEA5767_Write();     //写入初始化参数
 //EEPROM_Save_PLL(1,0x29de);     //预置第1频道
 //EEPROM_Save_PLL(2,0x2bb0);     //预置第2频道
 //EEPROM_Save_PLL(3,0x2cc9);     //预置第3频道
 //EEPROM_Save_PLL(4,0x2fa5);     //预置第4频道
 //EEPROM_Save_PLL(5,0x3050);     //预置第5频道
 //EEPROM_Save_PLL(6,0x309a);     //预置第6频道
 //EEPROM_Save_PLL(7,0x328e);     //预置第7频道
 //EEPROM_Save_PLL(8,0x2fa5);     //预置第8频道
 //EEPROM_Save_PLL(9,0x2fa5);     //预置第9频道
 //EEPROM_Save_PLL(10,0x2fa5);     //预置第10频道
 //EEPROM_Save_PLL(11,0x2fa5);     //预置第11频道
 //EEPROM_Save_PLL(12,0x2fa5);     //预置第12频道
 //EEPROM_Save_PLL(13,0x2fa5);     //预置第13频道
 //EEPROM_Save_PLL(14,0x2fa5);     //预置第14频道   
 //EEPROM_Save_PLL(15,0x2fa5);     //预置第15频道   注:第一次编译使用预置频道
}
/**********************手动搜索**************************/
void TEA5767_User_Search(uchar Mode)
{      
    switch (Mode)         //向上搜索
     {
   case 1:
    PLL+=1;
          if(PLL>0x3370)       //108MHz时的PLL,
              PLL=0x298d;       //87.5MHz时的PLL,
    break;
   case 0:          //向下搜索
    PLL-=1;      //改变该值可提高精度,但步进变得缓慢
          if(PLL<0x298d)
              PLL=0x3270;
    break;
  }         
    TEA5767_Write_Data[0]=(PLL/256)&0x7f;
    TEA5767_Write_Data[1]=PLL%256;
    TEA5767_Write();        //重新写入参数  
}
/**********************更新PLL**************************/
void TEA5767_Update_PLL(void)
{              
    TEA5767_Write_Data[0]=(PLL/256)&0x7f;
    TEA5767_Write_Data[1]=PLL%256;
    TEA5767_Write();        //重新写入参数  
}

关键字:51单片机  TEA5767  调频收音机芯片 引用地址:51单片机驱动TEA5767调频收音机芯片C程序

上一篇:51单片机循迹小车电机驱动程序PWM
下一篇:51单片机驱动16*16点阵显示生日快乐程序

推荐阅读最新更新时间:2024-03-16 14:23

MCS-51单片机在什么情况下可响应中断?中断响应过程是?
MCS-51在什么情况下可以响应中断?中断响应的过程是? 答:响应中断的条件 (1)中断源有中断请求; (2)中断总允许位EA=1; (3)请求中断的中断源的中断允许位为1; 在满足以上条件的基础上,若有下列任何一种情况存在,中断响应都会受到阻断。 (1)CPU正在执行一个同级或高优先级的中断服务程序。 (2)正在执行的指令尚未执行完。 (3)正在执行中断返回指令 RETI或者对专用寄存器IE、IP进行读/写的指令。CPU在执行完上述指令之后,要再执行一条指令,才能响应中断请求。 中断请求被响应后,有内部长调用(LCALL)将程序转向对应的中断矢量地址,执行执行中断服务程序。
[单片机]
51单片机与蜂鸣器实现摩斯电码转换
具体功能实现 当我们按下矩阵按键中不同的按键时,在LCD1602显示相应的内容,同时一个按键按下多次可以切换不同的字母或数字,并且LED灯会闪烁。最后当我们按下确认时,蜂鸣器会发出不同频率的声音。 器件 蜂鸣器,AT89C51,若干按键,LCD1602,两支LED灯,排阻 仿真展示图 仿真前 仿真后 知识介绍 矩阵按键控制原理 如果使用独立按键与单片机连接, 每一个按键都需要单片机的一个 I/O 口, 若某单片机系统需较多按键, 用独立按键便会占用过多的 I/O 口资源。 单片机系统中 I/O 口资源往往比较宝贵, 当用到多个按键时为了减少 I/O 口引脚, 引入了矩阵按键。 矩阵按键检测原理 按键检测一般通过
[单片机]
AT89S51单片机扩展EEPROM AT2864的设计
  2864A与AT89S51单片机的接口电路如下图所示。 2864A的片选端CE与高地址线P2.7连接,P2.7=0才能选中2864A。这种线选法决定了2864A对应多组地址空间,即0000H~1FFFH,2000H~3FFFH,4000H~5FFFH,6000H~7FFFH。当系统中有其他ROM和RAM 存储器 时,要统一考虑编址问题。      这8K字节存储器可作为数据存储器使用,但掉电后数据不丢失。      AT89S51对2864A进行写操作时所用指令包括: AT89S51对2864A进行读操作时所用指令包括: 下面介绍对2864A装载一个页面数据(16个字节)的子程序W
[单片机]
AT89S<font color='red'>51单片机</font>扩展EEPROM AT2864的设计
MC-51单片机红绿灯+数码管计时实验
单片机实验 //主机板的P1接口 平接 显示板P00接口 即数码管段选接口 //主机板的P3接口 平接 显示板P20接口 即数码管位选接口 //主机板的P0接口 平接 显示板灯的接口 #include reg51.h unsigned char time ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; int n = 2000;//每半秒中断一次 bit change=1; bit Shan=1;//闪 //定义显示管为位选特殊位 sbit A=P3^7; sbit B1=P3^6; sbit C=P3^5; sbit G1=P3^4; sbit daul = P
[单片机]
基于8051单片机的广告灯的设计
1. 实验任务 利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。 2. 电路原理图 图4.5.1 3. 系统板上硬件连线   把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。 4. 程序设计内容 在用表格进行程序设计的时候,要用以下的指令来完成 (1). 利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。 (2). 利用MOVC A,@A+DPTR的指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC指到表格内所
[单片机]
基于80<font color='red'>51单片机</font>的广告灯的设计
51单片机超声波测距仿真结果分析
制作51单片机超声波测距仪时,程序设计及试工作是一项重要内容,所设计的程序51单片机超声波测距程序只是在编译环境下通过编译,消除编程工作中产生的语法错误后,直接将程序写入单片机中与硬件一起进行联调,如果这时硬件设计制作是正确的还好说,只需要进行软件的调试修改,烧写到硬件环境中验证直到达到设计要求即可,但这个工作也是需要反复不停地修改程序并烧录到硬件单片机中进行调试,但如果说硬设计、制作及程序设计都存在问题,整个调试工作就显得无从下手,给软件调试、硬件故障排出带来非常大的困难,增加不少工作量,甚至造成整个超声波测距系统设计制作的失败。有好的解决办法吗?回答是肯定的,就是程序仿真,编译通过的程序,在Proteus环境下,按设计的硬件原
[单片机]
<font color='red'>51单片机</font>超声波测距仿真结果分析
51单片机复习:8*8led点阵
有两种,一种列为低电压通,行为高电压为通,我们可以依次将每一列接低电压,也就依次点亮 然后利用行的电压来控制点亮,如果有一行电压为低,那一行的Led灯都不会亮 第二种反之,列为高低压则通,行为低电压则通,两者同时符合,则对应的灯点亮 74H595芯片 在我使用的普中51单片机中,其控制行电压,而P0口则控制列电压 其有三个引脚,SER(串行数据输入),SCLK(移位储存器时钟输入),CLK(数据储存器时钟输入) 我是这样理解他们的,SER负责传送数据,每一次只能接受一位,而SCLK上升沿让移位有效,而CLK上升沿让整个数据的传输有效
[单片机]
MCS-51单片机指令系统“读-改-写”方式指令
51 单片机有四个 8 位的并行接口。由于内部结构的特点,并行接口在输出 0、1 的时候,能力是不一样的。输出 0 的时候,能力较强,但输出 1 的时候,能力就很差了,而 P0 口,则要外接上拉电阻才能输1。 单片机从端口读入数据的通道有两个,一个是从锁存器引入,一个是从输出引脚处引入,分别叫做“读锁存器”和“读引脚”。单片机在进行端口输出时,经常要参考其上一次的输出状态。 Example:使一个LED灯闪烁。编程序时需要从输出引脚读前一次的输出状态,然后将其求反输出。如果上次是输出“1”使LED点亮,这时候虽然端口上输出逻辑是“1”,但是由于LED的二极管作用将输出高电平拉至“0”电平(0.7V左右),通过引脚读进来就是
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved