資源簡介
RDA5807m+IIC +RDS 單片機驅動程序,內含了我自己寫的RDS驅動,之前基本所有驅動沒有這功能,我只有自己看寄存器增加了 。集合所有控制,實現所有的控制命令,對于使用者來說十分簡單實用,只要調用接口即可 。

代碼片段和文件信息
#include?“sys.h“
uchar?code?xian[4][4]={12345678910111213141516};
uchar?code?hang[]={0xfe0xfd0xfb0xf7};??//矩陣鍵盤掃描使用
sbit?RW?=P1^1;
sbit?RS=P1^0;
sbit?EN=P2^5;
//uchar?code?a[]=“FM:???.?????????“;
//uchar?code?b[]=“Vol:????RSSI:?????“;
//uchar?code?shu[]=“0123456789“;
//uchar?num?;
void?delayms(uint?x) ???//延遲程序
{
????uint?ij;
for(i=x;i>0;i--)
???for(j=113;j>0;j--);
}
/*----------------------------------------IIC通信程序---------------------------------------------------*/
void?IIC_delayms()????????//用于IIC延時
{
_nop_();_nop_();_nop_();_nop_();
}
void?OpenIIC()? //IIC啟動信號
{
SDA=1;
SCL=1;
IIC_delayms();??
SDA=0;
IIC_delayms();??
SCL=0;
}
void?CloseIIC() //IIC停止信號
{
?SCL=0;
?SDA=0;
?IIC_delayms();??
?SCL=1;?
?SDA=1;?
?IIC_delayms();??
}
uchar?IIC_Wait_Ack(void) //IIC發送字節后?等待從機發送響應信
{
uchar?ucErrTime=0;??
SDA=1;
IIC_delayms();?? ???
SCL=1;
IIC_delayms();?? ?
while(SDA==1)
{
ucErrTime++;
if(ucErrTime>250)
{
CloseIIC();
return?1;
}
}
SCL=0; ???
return?0;??
}?
void?IIC_Ack(void) ??//發送應答信號
{
SCL=0;
SDA=0; ??//0±íê?ó|′e
IIC_delayms();??
SCL=1;
IIC_delayms();??
SCL=0;
}
????
void?IIC_NAck(void) ?//IIC?非應答信號
{
SCL=0;
SDA=1; ?
IIC_delayms();??
SCL=1;
IIC_delayms();??
SCL=0;
} ? ?????
void?IICsendByte(uchar?txd) ?//IIC?寫一個字節
{????????????????????????
????uchar?t;?
????SCL=0;
????for(t=0;t<8;t++)
????{??
if(((txd&0x80)>>7)==1)
SDA=1;
else?
SDA=0;
????????txd<<=1;? ??
IIC_delayms();???
SCL=1;
IIC_delayms();??
SCL=0;
IIC_delayms();??
????} ?
}?
uchar?IICReadByte(unsigned?char?ack)??//IIC讀一個字節
{
unsigned?char?xdata?ireceive=0;
SDA=1; ??//51單片機講引腳置高可設為輸入引腳
????for(i=0;i<8;i++?)
{
SCL=0;?
IIC_delayms();??
SCL=1;
receive<<=1;
if(SDA==1)receive++;???
IIC_delayms();??
????}
????if?(!ack)
????????IIC_NAck();
????else
????????IIC_Ack();??
????return?receive;
}
//uint8?read_data(uint8?reguint8?tBituint8?len)
//{
// uint?buff=0;
//
// buff=ReadReg(reg);
//
// buff=buff&(1< //}
uint?ReadReg(uchar?regAddr) //芯片讀寄存器
{
uint?buf;
OpenIIC();
IICsendByte(RDA_WRITE); ??//發送芯片地址?方向為寫
IIC_Wait_Ack();
IICsendByte(regAddr); //發送寄存器地址
IIC_Wait_Ack();
OpenIIC();
IICsendByte(RDA_READ);? ??//?發送芯片地址?方向為讀
IIC_Wait_Ack();
buf?=?IICReadByte(1);?
buf?=?buf<<8;
buf?=buf|IICReadByte(0);?
CloseIIC();
return?buf;
}
void?WriteReg(uchar?regAddruint?val)?//芯片寫寄存器
{
OpenIIC();
IICsendByte(RDA_WRITE); //發送芯片地址?方向為寫
IIC_Wait_Ack(); ?
IICsendByte(regAddr); //發送寄存器地址
IIC_Wait_Ack(); ?
IICsendByte(val>>8);
IIC_Wait_Ack();
IICsendByte(val&0XFF);
IIC_Wait_Ack();
CloseIIC();
}
void?Vol_Set(uchar?vol) //音量設置 ?0~15
{
uint?xdata?temp=0;
temp=ReadReg(RDA_R05);
temp&=0xfff0; ???
WriteReg(0x05vol|temp)?;
}
void?Mute_S
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6872??2018-08-11?17:14??RDA5807M.c
?????文件???????1944??2018-08-11?17:15??RDA5807M.h
-----------?---------??----------?-----??----
?????????????????8816????????????????????2
評論
共有 條評論