RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx

上传人:b****2 文档编号:14537801 上传时间:2022-10-23 格式:DOCX 页数:20 大小:321.71KB
下载 相关 举报
RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx_第1页
第1页 / 共20页
RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx_第2页
第2页 / 共20页
RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx_第3页
第3页 / 共20页
RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx_第4页
第4页 / 共20页
RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx

《RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx》由会员分享,可在线阅读,更多相关《RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx(20页珍藏版)》请在冰豆网上搜索。

RDA5807m+IIC收音机51单片机C程序上课讲义Word格式.docx

//矩阵键盘扫描使用

//RDA的寄存器地址

#defineRDA_R000X00//读出16个位的ID=0X5800

#defineRDA_R020X02//DHIZ[15],DMUTE[14]静音,MONO[13]声道,BASS[12]重低音,SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:

4]时钟源选择,SOFTRESET[1]软复位,ENABLE[0]电源使能

#defineRDA_R030X03//CHAN[15:

6],TUNE[4],BAND[3:

2],SPACE[1:

0]设置频率带宽步长

#defineRDA_R040X04//STCIEN[14],DE[11],I2Senable[6],

#defineRDA_R050X05//INT_MODE[15],SEEKTH[14:

8](设定自动搜索信号强度阀值),LNA_PORT_SEL[7:

6]=0b10,LNA_ICSEL_BIT[5:

4],VOLUME[3:

0]音量;

#defineRDA_R0A0X0A//STC[14]seekcompleteSF[13]seekfailreadchan[9:

0]当前频道

#defineRDA_R0B0X0B//RSSI[15:

9],FMTRUE[8]当前频道是一个节目台

#defineRDA_READ0X23//读RDA5807

#defineRDA_WRITE0X22//写RDA5807

//IO操作函数

sbitSDA=P2^1;

sbitSCL=P2^0;

sbitRW=P1^1;

sbitRS=P1^0;

sbitEN=P2^5;

ucharcodea[]="

FM:

."

;

ucharcodeb[]="

Vol:

RSSI:

"

ucharcodeshu[]="

0123456789"

ucharnum;

voiddelayms(uintx)//延迟程序

{

uinti,j;

for(i=x;

i>

0;

i--)

for(j=113;

j>

j--);

}

/***********************************************矩阵键盘程序********************************************************************/

ucharScanKey()//矩阵键盘扫描返回值是当前按键数值如没按下则返回值为零

{

uintx,y;

for(x=0;

x<

4;

x++)

{

uchartemp,gaowei;

P3=hang[x];

//分行置零

temp=P3&

0xf0;

if(temp!

=0xf0)

delayms(10);

if(temp!

{

gaowei=P3/16;

//判断是第几列的按键按下,将数据装入高四位

switch(gaowei)

{

case0xe:

y=0;

break;

case0xd:

y=1;

case0xb:

y=2;

case0x7:

y=3;

}

while(temp!

temp=P3&

}

returnxian[x][y];

}

return0;

/*******************************************************LCD1602程序************************************************************************/

voidwrite_com(unsignedcharcom)

RS=0;

P0=com;

delayms(5);

EN=1;

EN=0;

voidwrite_data(unsignedchardate)

RS=1;

P0=date;

voidinit_1602()

{

P0=0xc0;

RW=0;

write_com(0x38);

//é

è

?

16*2?

ê

£?

5*7μ?

ó

8?

y?

Y?

ú

write_com(0x0c);

a?

2?

1a±

write_com(0x06);

//D′ò

×

·

μ?

1

write_com(0x01);

//?

á

voidDisplayFrq(floatFrq)//显示频率

uintF;

F=Frq*10;

write_com(0x80+3);

write_data(shu[F/1000]);

delayms

(1);

write_data(shu[F/100%10]);

write_data(shu[F/10%10]);

write_com(0x80+7);

write_data(shu[F%10]);

voidDisplayVol(uintVol)//显示音量

write_com(0x80+0x40+4);

write_data(shu[Vol/10]);

write_data(shu[Vol%10]);

voidDisplay_mute()//显示静音

write_data('

x'

);

voidDisplay_RSSI(uintRSSI)//显示信号强度

write_com(0x80+0x40+14);

write_data(shu[RSSI/10]);

write_data(shu[RSSI%10]);

/*----------------------------------------IIC通信程序---------------------------------------------------*/

voidIIC_delayms()//用于IIC延时

_nop_();

_nop_();

voidOpenIIC()//IIC启动信号

SDA=1;

SCL=1;

IIC_delayms();

SDA=0;

SCL=0;

voidCloseIIC()//IIC停止信号

ucharIIC_Wait_Ack(void)//IIC发送字节后等待从机发送响应信

ucharucErrTime=0;

while(SDA==1)

ucErrTime++;

if(ucErrTime>

250)

CloseIIC();

return1;

}

voidIIC_Ack(void)//发送应答信号

//0±

í

|′e

voidIIC_NAck(void)//IIC非应答信号

}

voidIICsendByte(uchartxd)//IIC·

写一个字节

uchart;

for(t=0;

t<

8;

t++)

{

if(((txd&

0x80)>

>

7)==1)

SDA=1;

else

SDA=0;

txd<

<

=1;

IIC_delayms();

SCL=1;

SCL=0;

}

}

ucharIICReadByte(unsignedcharack)//IIC读一个字节

unsignedchari,receive=0;

//51单片机讲引脚置高可设为输入引脚

for(i=0;

i<

i++)

{

receive<

if(SDA==1)receive++;

}

if(!

ack)

IIC_NAck();

else

IIC_Ack();

returnreceive;

uintReadReg(ucharre

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1