亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
SI4730 收音機芯片資料與程序
[打印本頁]
作者:
liuda
時間:
2015-1-20 15:33
標題:
SI4730 收音機芯片資料與程序
在網上看到關于這個SI4730的收音機芯片的資料比較少,所以現在特發上來,共有緣人參考,
如有不對之處,請指出。!!
由于時間倉促,自動搜臺就沒有編寫,望有緣人寫好后發上來分享。!!!!
晶振:24MHz
單片機:at89s52
注:轉載請注明出處,否則追究法律責任!!!
日期:2010-03-06
版本:v1.0
設計者:sws
*/
#include"reg52.h"
#include"intrins.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define HIGH 1
#define LOW 0
#define SI4730_HIGH //4730選擇地址定義
//#define SI4730_LOW
#define Max_freq_FM 10800 //108MHz
#define Min_freq_FM 8750 //87.5MHz
#define max_freq_AM 1701 //1701KHz
#define min_freq_AM 531
#define FM_RECEIVER 0x20 //FM調諧頻率 page.52
#define FM_TRNSMITTER 0x30
#define AM_RECEIVER 0x40 //AM調諧頻率
#define TX_TUNE_MEASURE 0x32
uint Frequency_fm=875;
uint Frequency_am=531;
bit Mode = 0;
sbit KEY_UP = P2^2; //向上搜臺
sbit KEY_DW = P2^3; //向下搜臺
sbit FM_AM_Choose = P2^4; //FM與AM選擇
bit FM_AM_ = 0;
/******************************************************
START condition:
SCLK: -----------|______
SDIO:-----|_____________
1 | 2 | 3
STOP condition:
SCLK: ____|--------------
SDIO:____________|-------
1 | 2 | 3
DATA:
SCLK:_______________|---|________|----|_______
SDIO:___________|------------|____________|----
|<==========>|
RESET:
SENB:__|---------------------------------------------
SDIO:_________________________________________|------
RST: ___________|------------------------------------
SCLK:__|---------------------------------------------
| 1 | 2 | 3
******************************************************/
sbit Si4730_Reset = P1^3;
sbit Si4730_SCLK = P1^2;
sbit Si4730_SDIO = P1^1;
//如果SI4730的第六腳(SEN)接高電平那么地址是0x23,0x22
//如果SI4730的第六腳(SEN)接低電平那么地址是0xc7,0xc6
//#if 0 //address switch
#ifdef SI4730_LOW
#define READ_ADDR 0x23
#define WRITE_ADDR 0x22
#endif
#ifdef SI4730_HIGH
#define READ_ADDR 0xc7
#define WRITE_ADDR 0xc6
#endif
#define SCLK_HIGH Si4730_SCLK = HIGH
#define SCLK_LOW Si4730_SCLK = LOW
#define SDIO_HIGH Si4730_SDIO = HIGH
#define SDIO_LOW Si4730_SDIO = LOW
#define READ_SDIO Si4730_SDIO
//===============FM START===================
void _NOP()
{
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
}
void Si4730_Delay(unsigned char k)
{
uchar i,j;
for(i=150;i>0;i--)
for(j=k;j>0;j--);
}
#define I2C_CLK_Delay() _NOP()
void ResetSi47XX_2w()
{
Si4730_Reset = LOW;
SCLK_HIGH;
Si4730_Delay(100);
SDIO_HIGH;
Si4730_Delay(250);
Si4730_Reset = HIGH;
}
void Si4730_start()
{
SDIO_HIGH;
I2C_CLK_Delay();
SCLK_HIGH;
I2C_CLK_Delay();
SDIO_LOW;
I2C_CLK_Delay();
SCLK_LOW;
}
void Si4730_ack()
{
SDIO_LOW;
I2C_CLK_Delay();
SCLK_HIGH;
I2C_CLK_Delay();
SCLK_LOW;
I2C_CLK_Delay();
SDIO_HIGH;
}
void Si4730_stop()
{
SDIO_LOW;
I2C_CLK_Delay();
SCLK_HIGH;
I2C_CLK_Delay();
SDIO_HIGH;
I2C_CLK_Delay();
SCLK_LOW;
}
void Si4730_writebyte(uchar write_data)
{
uchar i;
for(i=8;i!=0;i--) // 循環移入8個位
{
READ_SDIO = (bit)(write_data & 0x80);
SCLK_HIGH;
I2C_CLK_Delay();
SCLK_LOW; //SDA數據線上數據變化
write_data <<= 1; //調整發送位
}
}
void Operation_Si4730_Write(uchar *data1,uchar numByte)
{
uchar j;
Si4730_start();
Si4730_writebyte(WRITE_ADDR);//器件地址 0xc6
Si4730_ack();
I2C_CLK_Delay();
for(j=LOW;j<numByte;j++,*data1++)
{
Si4730_writebyte(*data1);
Si4730_ack();
I2C_CLK_Delay();
}
Si4730_stop(); //發送結束
}
void Si4730_Power_Up_FM_AM_Choose(unsigned char mod) //fm,am選擇
{
unsigned char write_buf[3]={0x01,0xd0,0x05};
switch(mod)
{
case FM_RECEIVER: //si4730
write_buf[1] = 0xd0; //使用時鐘晶振,32.768khz ,FM模式
write_buf[2] = 0x05; //模擬L/R輸出
break;
case AM_RECEIVER: //si4730
write_buf[1] = 0xd1; //使用時鐘晶振,32.768khz ,AM模式
write_buf[2] = 0x05; //模擬L/R輸出
break;
}
Operation_Si4730_Write(&(write_buf[0]), 3);//need wait >=300mS
Si4730_Delay(250);
Si4730_Delay(250);
Si4730_Delay(120);
}
void Si4730_Tune(char mod,unsigned short Channel_Freq)
{
unsigned char write_buf[5];
write_buf[0]= mod;
write_buf[1]= 0x00;
write_buf[2] = Channel_Freq >> 8; //寫入高字節
write_buf[3] = Channel_Freq; //寫入低字節
write_buf[4]= 0x00;
Operation_Si4730_Write(&(write_buf[0]), 5);
}
void Search_FM() //調用手動FM 頻率調整子程序 menu = 15
{
if(Mode)
{
Frequency_fm += 10; //步進+0.1MHz
if(Frequency_fm > Max_freq_FM)
Frequency_fm = Min_freq_FM;
}
else
{
Frequency_fm -= 10; //步進-0.1MHz
if(Frequency_fm < Min_freq_FM)
Frequency_fm = Max_freq_FM;
}
// Si4730_Power_Up(FM_RECEIVER); //向上搜臺
Si4730_Tune(FM_RECEIVER,Frequency_fm); //FM收音芯片數據刷新一次
}
//=================fm end============
//===============am start==============
void Si4730_Tune_AM(char mod,unsigned short Channel_Freq)
{
unsigned char write_buf[6];
write_buf[0]= mod;
write_buf[1]= 0x00;
write_buf[2] = Channel_Freq >> 8; //寫入高字節
write_buf[3] = Channel_Freq; //寫入低字節
write_buf[4]= 0x00;
write_buf[5]= 0x00;
Operation_Si4730_Write(&(write_buf[0]), 6);
}
void Search_AM() //調用手動FM 頻率調整子程序 menu = 95
{
if(Mode)
{
Frequency_am += 9; //步進+9KHz
if(Frequency_am > max_freq_AM)
Frequency_am = min_freq_AM;
}
else
{
Frequency_am -= 9; //步進-9KHz
if(Frequency_am < min_freq_AM)
Frequency_am = max_freq_AM;
}
// Si4730_Power_Up(AM_RECEIVER); //向上搜臺
Si4730_Tune_AM(AM_RECEIVER,Frequency_am); //AM收音芯片數據刷新一次
}
//=======================am end========================
//==============main start=======================
void main()
{
ResetSi47XX_2w();
Si4730_Delay(250);
while(1)
{
if(!FM_AM_Choose)
{
Si4730_Delay(100);
if(!FM_AM_Choose)
{
FM_AM_ = ~FM_AM_;
if(!FM_AM_)
{
Si4730_Power_Up_FM_AM_Choose(FM_RECEIVER); //fm選擇
}
else if(FM_AM_)
{
Si4730_Power_Up_FM_AM_Choose(AM_RECEIVER ); //am選擇
}
}
}
if(!FM_AM_)
{
// ResetSi47XX_2w();
if(!KEY_UP)
{
Si4730_Delay(100);
if(!KEY_UP)
{
Mode = HIGH; //向上搜臺
Search_FM();
}
}
if(!KEY_DW)
{
Si4730_Delay(100);
if(!KEY_DW)
{
Mode = LOW; //向下搜臺
Search_FM();
}
}
}
else if(FM_AM_)
{
// ResetSi47XX_2w();
if(!KEY_UP)
{
Si4730_Delay(100);
if(!KEY_UP)
{
Mode = HIGH; //向上搜臺
Search_AM();
}
}
if(!KEY_DW)
{
Si4730_Delay(100);
if(!KEY_DW)
{
Mode = LOW; //向下搜臺
Search_AM();
}
}
}
}
}
//=================main end=====================
作者:
李友明
時間:
2015-1-20 16:02
這個沒有顯示頻率的,我不會加上顯示頻率,用的是1602,
作者:
李友明
時間:
2015-1-20 16:08
include"reg52.h"
#include"intrins.h"
#include "LCD1602_4w.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define HIGH 1
#define LOW 0
#define SI4730_HIGH //4730選擇地址定義
//#define SI4730_LOW
#define Max_freq_FM 10800 //108MHz
#define Min_freq_FM 8750 //87.5MHz
#define max_freq_AM 1701 //1701KHz
#define min_freq_AM 531
#define FM_RECEIVER 0x20 //FM調諧頻率 page.52
#define FM_TRNSMITTER 0x30
#define AM_RECEIVER 0x40 //AM調諧頻率
#define TX_TUNE_MEASURE 0x32
uint Frequency_fm=875;
uint Frequency_am=531;
bit Mode = 0;
sbit KEY_UP = P2^2; //向上搜臺
sbit KEY_DW = P2^3; //向下搜臺
sbit FM_AM_Choose = P2^4; //FM與AM選擇
bit FM_AM_ = 0;
//LCD1602_4w
sbit LCD_RS = P1^0;
sbit LCD_RW = P1^1;
sbit LCD_EP = P1^2;
#define LCD_EN LCD_EP
#define LCD_DATA P0
/******************************************************
START condition:
SCLK: -----------|______
SDIO:-----|_____________
1 | 2 | 3
STOP condition:
SCLK: ____|--------------
SDIO:____________|-------
1 | 2 | 3
DATA:
SCLK:_______________|---|________|----|_______
SDIO:___________|------------|____________|----
|<==========>|
RESET:
SENB:__|---------------------------------------------
SDIO:_________________________________________|------
RST: ___________|------------------------------------
SCLK:__|---------------------------------------------
| 1 | 2 | 3
******************************************************/
sbit Si4730_Reset = P1^3;
sbit Si4730_SCLK = P1^2;
sbit Si4730_SDIO = P1^1;
//如果SI4730的第六腳(SEN)接高電平那么地址是0x23,0x22
//如果SI4730的第六腳(SEN)接低電平那么地址是0xc7,0xc6
//#if 0 //address switch
#ifdef SI4730_LOW
#define READ_ADDR 0x23
#define WRITE_ADDR 0x22
#endif
#ifdef SI4730_HIGH
#define READ_ADDR 0xc7
#define WRITE_ADDR 0xc6
#endif
#define SCLK_HIGH Si4730_SCLK = HIGH
#define SCLK_LOW Si4730_SCLK = LOW
#define SDIO_HIGH Si4730_SDIO = HIGH
#define SDIO_LOW Si4730_SDIO = LOW
#define READ_SDIO Si4730_SDIO
//===============FM START===================
void _NOP()
{
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
}
void Si4730_Delay(unsigned char k)
{
uchar i,j;
for(i=150;i>0;i--)
for(j=k;j>0;j--);
}
#define I2C_CLK_Delay() _NOP()
void ResetSi47XX_2w()
{
Si4730_Reset = LOW;
SCLK_HIGH;
Si4730_Delay(100);
SDIO_HIGH;
Si4730_Delay(250);
Si4730_Reset = HIGH;
}
void Si4730_start()
{
SDIO_HIGH;
I2C_CLK_Delay();
SCLK_HIGH;
I2C_CLK_Delay();
SDIO_LOW;
I2C_CLK_Delay();
SCLK_LOW;
}
void Si4730_ack()
{
SDIO_LOW;
I2C_CLK_Delay();
SCLK_HIGH;
I2C_CLK_Delay();
SCLK_LOW;
I2C_CLK_Delay();
SDIO_HIGH;
}
void Si4730_stop()
{
SDIO_LOW;
I2C_CLK_Delay();
SCLK_HIGH;
I2C_CLK_Delay();
SDIO_HIGH;
I2C_CLK_Delay();
SCLK_LOW;
}
void Si4730_writebyte(uchar write_data)
{
uchar i;
for(i=8;i!=0;i--) // 循環移入8個位
{
READ_SDIO = (bit)(write_data & 0x80);
SCLK_HIGH;
I2C_CLK_Delay();
SCLK_LOW; //SDA數據線上數據變化
write_data <<= 1; //調整發送位
}
}
void Operation_Si4730_Write(uchar *data1,uchar numByte)
{
uchar j;
Si4730_start();
Si4730_writebyte(WRITE_ADDR);//器件地址 0xc6
Si4730_ack();
I2C_CLK_Delay();
for(j=LOW;j<numByte;j++,*data1++)
{
Si4730_writebyte(*data1);
Si4730_ack();
I2C_CLK_Delay();
}
Si4730_stop(); //發送結束
}
void Si4730_Power_Up_FM_AM_Choose(unsigned char mod) //fm,am選擇
{
unsigned char write_buf[3]={0x01,0xd0,0x05};
switch(mod)
{
case FM_RECEIVER: //si4730
write_buf[1] = 0xd0; //使用時鐘晶振,32.768khz ,FM模式
write_buf[2] = 0x05; //模擬L/R輸出
break;
case AM_RECEIVER: //si4730
write_buf[1] = 0xd1; //使用時鐘晶振,32.768khz ,AM模式
write_buf[2] = 0x05; //模擬L/R輸出
break;
}
Operation_Si4730_Write(&(write_buf[0]), 3);//need wait >=300mS
Si4730_Delay(250);
Si4730_Delay(250);
Si4730_Delay(120);
}
void Si4730_Tune(char mod,unsigned short Channel_Freq)
{
unsigned char write_buf[5];
write_buf[0]= mod;
write_buf[1]= 0x00;
write_buf[2] = Channel_Freq >> 8; //寫入高字節
write_buf[3] = Channel_Freq; //寫入低字節
write_buf[4]= 0x00;
Operation_Si4730_Write(&(write_buf[0]), 5);
}
void Search_FM() //調用手動FM 頻率調整子程序 menu = 15
{
if(Mode)
{
Frequency_fm += 10; //步進+0.1MHz
if(Frequency_fm > Max_freq_FM)
Frequency_fm = Min_freq_FM;
}
else
{
Frequency_fm -= 10; //步進-0.1MHz
if(Frequency_fm < Min_freq_FM)
Frequency_fm = Max_freq_FM;
}
// Si4730_Power_Up(FM_RECEIVER); //向上搜臺
Si4730_Tune(FM_RECEIVER,Frequency_fm); //FM收音芯片數據刷新一次
}
//=================fm end============
//===============am start==============
void Si4730_Tune_AM(char mod,unsigned short Channel_Freq)
{
unsigned char write_buf[6];
write_buf[0]= mod;
write_buf[1]= 0x00;
write_buf[2] = Channel_Freq >> 8; //寫入高字節
write_buf[3] = Channel_Freq; //寫入低字節
write_buf[4]= 0x00;
write_buf[5]= 0x00;
Operation_Si4730_Write(&(write_buf[0]), 6);
}
void Search_AM() //調用手動FM 頻率調整子程序 menu = 95
{
if(Mode)
{
Frequency_am += 9; //步進+9KHz
if(Frequency_am > max_freq_AM)
Frequency_am = min_freq_AM;
}
else
{
Frequency_am -= 9; //步進-9KHz
if(Frequency_am < min_freq_AM)
Frequency_am = max_freq_AM;
}
// Si4730_Power_Up(AM_RECEIVER); //向上搜臺
Si4730_Tune_AM(AM_RECEIVER,Frequency_am); //AM收音芯片數據刷新一次
}
//=======================am end========================
//==============main start=======================
void main()
{
ResetSi47XX_2w();
Si4730_Delay(250);
while(1)
{
if(!FM_AM_Choose)
{
Si4730_Delay(100);
if(!FM_AM_Choose)
{
FM_AM_ = ~FM_AM_;
if(!FM_AM_)
{
Si4730_Power_Up_FM_AM_Choose(FM_RECEIVER); //fm選擇
}
else if(FM_AM_)
{
Si4730_Power_Up_FM_AM_Choose(AM_RECEIVER ); //am選擇
}
}
}
if(!FM_AM_)
{
// ResetSi47XX_2w();
if(!KEY_UP)
{
Si4730_Delay(100);
if(!KEY_UP)
{
Mode = HIGH; //向上搜臺
Search_FM();
}
}
if(!KEY_DW)
{
Si4730_Delay(100);
if(!KEY_DW)
{
Mode = LOW; //向下搜臺
Search_FM();
}
}
}
else if(FM_AM_)
{
// ResetSi47XX_2w();
if(!KEY_UP)
{
Si4730_Delay(100);
if(!KEY_UP)
{
Mode = HIGH; //向上搜臺
Search_AM();
}
}
if(!KEY_DW)
{
Si4730_Delay(100);
if(!KEY_DW)
{
Mode = LOW; //向下搜臺
Search_AM();
}
}
}
}
}
//=================main end=====================
新建文件夾 (3).rar
(5.93 KB, 下載次數: 74)
2015-1-20 16:08 上傳
點擊文件名下載附件
先不管1602怎么定義接MCU,現在報錯,說什么沒定義,你幫看一下
作者:
李友明
時間:
2015-1-20 16:11
我只是你這程序加上#include "LCD1602_4w.h",然后加上1602的接線定義后翻譯出錯,請求版主大家幫看一下,怎么樣在你發的程序上加上頻率顯示,MCU你可隨便定義,我改就行,期盼你的回復
作者:
q642071377
時間:
2015-3-29 15:02
我現在也要做si4730收音機,一起努力吧
作者:
xyz101531411
時間:
2015-8-16 00:13
好東西,學習,學習,
作者:
51單片機1234
時間:
2019-1-10 16:35
好東西,學習,學習,
作者:
這一生只為你
時間:
2019-11-8 08:59
正在找它的資料,感謝分享!
作者:
1314520jieber
時間:
2021-11-8 12:24
timer.h: #ifndef __TIMER_H_ #define __TIMER_H_ //如果外部需要使用這些變量或函數,直接包含頭文件即可。 //如果不對外開放的函數,就不需要添加 //注:在C源文件中,函數聲明要補全 extern int timerCnt; extern int timerStatu; extern void TimerStart(); extern void TimerStop(); extern void TimerInit(); #endif
作者:
HAISONC
時間:
2024-9-23 21:34
這個程序用不了哦
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1