资源简介
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
评论
共有 条评论