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)
|