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)
2018-12-6 11:00 上傳
點擊文件名下載附件
|