1、整理PICTEA5767数码管显示调频收音机TEA5767数码管显示调频收音机在深圳本地目前能收到如下电台/*unsigned char radio_write_data5 = 0x2c,0xe1,0x70,0x16,0x80; /频率为93.9MHz 广东音乐电台unsigned char radio_write_data5 = 0x30,0x5c,0x70,0x16,0x80; /频率为101.2MHz 广东电台音乐之声unsigned char radio_write_data5 = 0x31,0x38,0x70,0x16,0x80; /频率为103.0MHz 广东珠江经济电台unsig
2、ned char radio_write_data5 = 0x31,0xd7,0x70,0x16,0x80; /频率为104.3MHz 宝安广播电台unsigned char radio_write_data5 = 0x32,0x20,0x70,0x16,0x80; /频率为104.9MHz 中央人民广播电台华夏之声unsigned char radio_write_data5 = 0x33,0x2d,0x70,0x16,0x80; /频率为107.1MHz 中国国际广播电台环球资讯/*/把用来下载的M币给我算了,直上程序供复制。哈哈!/* AT89S52+12MHZ+TEA5767的数码管显
3、示调频收音机本程序使用数码管显示频率 晶振是用12M 已通过测试,收音机的频率调节是用计算的方法 将显示的频率算好后写到TEA5767芯片里面实现调节的 两个按键实现自加或自减频率 加了连续加减功能!使用的是在淘宝上买的4.5元/片的简化版的TEA5767模块. 2012-05-08/*/#include #define uchar unsigned char#define uint unsigned int /*/ sbit SDA = P30; /接在TEA5767的数据端口 sbit SCL = P31; /接在TEA5767的时钟端口 sbit KEY1 = P34; /频率增加按键端
4、口 sbit KEY2 = P35; /频率减小按键端口sbit KEY3 = P36; /频率增加按键端口 sbit KEY4 = P37; /频率减小按键端口 #define duan P0 /频率显示的数码管段选P0端口 /#define gy /使用共阴极时屏蔽这行sbit dula=P26;sbit wela=P27;uchar IF,ADC,CH;/bit RF,STEREO;#ifdef gyunsigned char code dispbit=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/显示位码 unsigned char code dis
5、pcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/数码管显示编码#else/*/unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00; /数码管显示编码 unsigned char code dispbit=0x7e,0x7d,0x7b,0x77,0x6f,0x5f;/*定义点亮的数码管与数组的关系*/#endif/*unsigned char radio_write_data5 = 0x2c,0xe1,0x7
6、0,0x16,0x80; /频率为93.9MHz 广东音乐电台unsigned char radio_write_data5 = 0x30,0x5c,0x70,0x16,0x80; /频率为101.2MHz 广东电台音乐之声unsigned char radio_write_data5 = 0x31,0x38,0x70,0x16,0x80; /频率为103.0MHz 广东珠江经济电台unsigned char radio_write_data5 = 0x31,0xd7,0x70,0x16,0x80; /频率为104.3MHz 宝安广播电台unsigned char radio_write_da
7、ta5 = 0x32,0x20,0x70,0x16,0x80; /频率为104.9MHz 中央人民广播电台华夏之声unsigned char radio_write_data5 = 0x33,0x2d,0x70,0x16,0x80; /频率为107.1MHz 中国国际广播电台环球资讯/*/unsigned char radio_read_data5;unsigned char radio_write_data5;unsigned long frequency = 104900; /开机初始化的电台频率为104.9MHz中央民广播电台华夏之声unsigned int PLL; /计算频率合成时用
8、的变量/*/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
9、= 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 & 0x8
10、0); Delayus(4); SCL = 1; Delayus(4); SCL = 0; Delayus(4); input = input 1;/*/uchar iic_rdbyt() /从总线上读取一个字节的数据uchar a = 0,i = 0;for(i = 0;i 8;i+) SDA = 1; SCL = 1; if(SDA = 1) a = (a 1) + 1; SCL = 0; else if(SDA = 0) a = a 0;b-)for(i = 0;i 250;i+);/*/void radio_write(void) /写入TEA5767unsigned char i;i
11、ic_start(); /启动总线传输iic_write8bit(0xc0); /TEA5767写地址if(!iic_testack() for(i = 0;i 5;i+) iic_write8bit(radio_write_data); /写一个字节的数据到总线上 iic_ack(); /发送应答位 iic_stop(); /结束总线传输 /*/将显示的频率算好后写到TEA5767芯片里面实现调节,不用考虑TEA5767用于搜台的相关位:SM,SUD/写模式/数据字节1 数据字节2 数据字节3 数据字节4 数据字节5void search() PLL = (unsigned int)(flo
12、at)(frequency + 225) / (float)8.192); /计算合成频率数据 频率单位:k/*/数据字节1的格式 radio_write_data0/位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ MUTE SM PLL13 PLL12 PLL11 PLL10 PLL9 PLL8/7 MUTE 如果MUTE=1 则左右声道被静音;MUTE=0 左右声道正常工作。/6 SM 如果SM=1 则处于搜索模式 SM=0 不处于搜索模式。/5到0 PLL13:8 设定用于搜索和预设的可编程频率合成器。radio_write_data0 = PLL / 256; /将算
13、好的频率高位数据存入将要TEA5767的数组里/*/ /数据字节2的格式 radio_write_data1 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0/PLL7:0 设定用于搜索和预设的可编程频率合成器。radio_write_data1 = PLL % 256; /将算好的频率低位数据存入将要TEA5767的数组里/*/ /数据字节3的格式 radio_write_data2 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ SUD SSL1 SSL0 HLSI MS
14、ML MR SWP1/SUD SUD=1 增加频率搜索 SUD=0 减小频率搜索。 /SLL1:0 搜索停止标准:见下表1。/SSL0 SSL1 搜索停止标准/ 0 0 在搜索模式下禁止 / 0 1 低:ADC输出大小为5/ 1 0 中:ADC输出大小为7/ 1 1 高:ADC输出大小为10 /HLSI 高/低充电电流切换:HLSI=1 高充电电流 HLSI=0 低充电电流。/MS 立体声/单声道:MS=1 单声道 MS=0 立体声。/ML 左声道静音:ML=1 左声道静音并置立体声 ML=0 左声道正常。/MR 右声道静音:MR=1 右声道静音并置立体声 MR=0 右声道正常。/SWP1 软
15、件可编程端口1:SWP1=1 端口1高电平 SWP1=0 端口1低电平。radio_write_data2 = 0x70; /这是TEA5767开立体声 关静音/*/ /数据字节4的各个位描述 radio_write_data3 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ SWP2 STBY BL XTAL SMUTE HCC SNC SI/SWP2 软件可编程端口2:SWP2=1,端口2高电平;SWP2=0,端口2低电平。/STBY 等待:STBY=1 处于待机模式,STBY=0,退出待机模式。/BL 波段制式:BL=1 日本调频制式 BL=0,美国/欧洲调频制式。/
16、XTAL 如果XTAL=1 那么fxtal=32.768KHz;如果XTAL=0 那么fxtal=13MHz。/SMUTE 软件静音:SMUTE=1 软静音打开;SMUTE=0,软静音关闭。/HCC 白电平切割:HCC=1 高电平切割打开 HCC=0 高电平切割关闭。/SNC 立体声噪声去除:如果SNC=1,立体声消噪除打开,如果SNC=0,立体声消噪除关闭。/SI 搜索标志位:SI=1 SWPORT1输出准备好信号 SI=0 SWPORT1作为软件可编程端口1用。radio_write_data3 = 0x16; /中国制式 采用32768晶振 软静音关 立体声消噪声开/*/数据字节5的格式
17、 radio_write_data4/位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ PLLREF DTC - - - - - -/若PLLREF=1 6.5MHz的锁相环参考频率启用;若PLLREF=0 6.5MHz的锁相环参考频率关闭。/若DTC=1 去加重时间常数为75us;若DTC=0 去加重时间常数为50us。/位5到0 未用 状态不必考虑。radio_write_data4 = 0x80; /6.5M锁相环开 去加重时间50US/*/radio_write(); /写入TEA5767/*/读模式/数据字节1 数据字节2 数据字节3 数据字节4 数据字节5 /数据字
18、节1的格式 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ RF BLF PLL13 PLL12 PLL11 PLL10 PLL9 PLL8/7 RF 准备好标志:RF=1 有一个频道被搜到或者一个制式已经符合;RF=0 没有频道被搜到。 /6 BLF 波段制式:BLF=1 一个制式已经符合 BLF=0 没有制式已经符合。/5到0 PLL13:8 用于搜索和预设后的可编程频率合成器设定结果。/数据字节2的格式 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0/数据字节2的各个位
19、描述/PLL7:0 设定用于搜索和预设后的可编程频率合成器设定结果。 /数据字节3的格式/位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ STEREO IF6 IF5 IF4 IF3 IF2 IF1 IF0/7 STEREO 立体声标志位:STEREO=1 立体声接收 STEREO=0 单声道接收。 /6到0 IF6:0 中频计数器结果。 /数据字节4的格式 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ LEV3 LEV2 LEV1 LEV0 CI3 CI2 CI1 0/7到4 LEV3:0 ADC的输出。/3到1 CI3:1 芯片验证号。/0 - 该位内部置0。/数据字节5的格式 /位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)/ 0 0 0 0 0 0 0 0/7到0 - 预留为扩展用 由内部置0。 /*/void delay()uchar k;for(k = 0;k 100;k+);/*/void desplay(uint aa)/*duan = tabaa / 1000 | 0x80; /关这位数码管的小数点led1 = 0;delay();led1 = 1;duan = tabaa % 1000 / 100 | 0x80; /关这位