赞助论坛
  • 13710阅读
  • 0回复

LC72131收音机锁相环芯片程序(C语言) [复制链接]

楼层直达
taoli01  
发帖
11
精华
0
金币
15
威望
2
贡献
0
好评
0
注册
2008-08-15
楼主    taoli01 发表于: 2008-08-16 08:29:50 
自己用的,分享出来,

LC72131+LA1787收音机程序文件(XX.H文件)2007-04-06 10:10//LC72131控制程序//////

/////////编写时间2007.4///////////////

////////编写:陶淘//////////////

//////////版本 :V1.0A/////////////////

#include <REG931.H>
#include <intrins.h>
sbit radio_clk = P1^7;
sbit radio_di = P1^6;
sbit radio_do   =P2^7;
sbit radio_ce   =P1^4;
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long  
set_fre(uint freq,bit bandb);
////////////1data//////////////////
uchar bdata fl=0,fh=0,col=0;
sbit sns=col^0;
sbit dvs=col^1;
sbit cte=col^2;//测量中频开始或结束 1:开始   2:结束复位
sbit xs=col^3;//晶振设置   1:7.2M   0: 4.5M
sbit r0=col^4;//参考频率设置
sbit r1=col^5;
sbit r2=col^6;
sbit r3=col^7;
////////////////2data/////////
uchar bdata io1=0,io2=0,io3=0;
sbit   ioc1=io1^0;
sbit   ioc2=io1^1;
sbit   ioo1=io1^2;
sbit   ioo2=io1^3;
sbit   bo1=io1^4;
sbit   bo2=io1^5;
sbit   bo3=io1^6;
sbit   bo4=io1^7;
sbit doc0=io2^1;
sbit doc1=io2^2;
sbit doc2=io2^3;
sbit ul0=io2^4;
sbit ul1=io2^5;
sbit dz1=io2^6;
sbit dz2=io2^7;
sbit gt0=io3^0;
sbit gt1=io3^1;
sbit tbc=io3^2 ;
sbit dlc=io3^3;
sbit ifs=io3^4;
sbit test0=io3^5;
sbit test1=io3^6;
sbit test2=io3^7;
/////////////3data///////// 接收
uchar bdata js1;
sbit i2=js1^7; //输入口状态   高:1 低: 0
sbit i1=js1^6; //输入口状态   高:1 低: 0
sbit ul=js1^4;//频率锁定标志 1:锁定   0:未锁定
///////////4data/////////// 接收
ulong IF=0;
uchar   IF0,IF1,IF2;  
////////////////延时程序//////////////////
void delay1(uint i)
{
uchar j;
while(--i)
{
for(j=0;j<20;j++)_nop_();
}
}

/////向收音机发送一个字节数据////
tx_dat(uchar i)
{  
uchar j;
for(j=0;j<8;j++)
{
radio_clk=0;_nop_();_nop_();_nop_();_nop_();_nop_();
radio_di=(i&1);_nop_();_nop_();_nop_();_nop_();_nop_();
radio_clk=1; _nop_();_nop_();_nop_();_nop_();_nop_();
i>>=1;
}
}
////接收收音机发出的一个字节数据////
uchar rx_dat()
{
uchar i;
uchar   j=0;
for(i=0;i<8;i++)
{
radio_clk=0;
_nop_();_nop_();_nop_();_nop_();_nop_();  
radio_clk=1;_nop_();_nop_();_nop_();_nop_();
j|=radio_do;
  if(i<7)j<<=1;//下一位
}
radio_do=1;
radio_clk=1;
return j;

}
///////收音机数据传输////////////
rd_cmd()
{
tx_dat(0X28);//地址1
radio_ce=1;
tx_dat(fl);tx_dat(fh);tx_dat(col);
_nop_();
radio_ce=0;
delay1(2);
tx_dat(0x29);
radio_ce=1;
tx_dat(io1);tx_dat(io2);tx_dat(io3);
_nop_();
radio_ce=0;
}

////////////收音机数据输出////////////
rd_rd()
{  
   
tx_dat(0X2a);//地址1
radio_ce=1;
js1=rx_dat();//高位
IF1=rx_dat();
IF0=rx_dat();//低位
IF2=js1&0xf;
radio_ce=0;
IF=((ulong)IF2)*65536+((uint)IF1)*256 + IF0;  

}

////////////////band波段控制/////////////////
band1(bit i)
{
if(i==1){dvs=1;sns=0;r3=0;r2=0;r1=0;r0=0;bo3=1;bo4=0; gt1=1;gt0=0;} //FM
// else   {dvs=0;sns=0;r3=1;r2=0;r1=0;r0=0;   bo4=1;bo3=0; gt1=0;gt0=1; }//AM   8132
  else   {dvs=0;sns=1;r3=1;r2=0;r1=0;r0=1;   bo4=1;bo3=0; gt1=0;gt0=1; }//AM 1787
}
///////////////设置频率////////////////////
set_fre(uint freq,bit bandb)
{  
  uint i;
//uint freq_am,uint freq_fm;
band1(bandb);
ul1=ul0=1;
xs=1;//7.2M晶振
radio_ce=0; radio_di=0;radio_clk=0;
ioc1=ioc2=0;//io口为输入模式
ifs=1;
if(bandb)   //FM?
{
i=(freq+107)/2;//计算分频器,接收频率+中频/基准频率
fl=i%256;     //分出高低8位
fh=i/256;
rd_cmd();
}
else //AM?
/* {
i=(freq+450)/10;// 计算分频器,接收频率+中频
i*=16;   //
fl=i%256;
fh=i/256;
rd_cmd();
} //*/////CD8132高频头
{
i=(freq+10710)/9;// 计算分频器,接收频率+中频/基准频率
//i*=16;   //
fl=i%256;
fh=i/256;
rd_cmd();
} //*/////LA1787高频头
}
文章出处:LCDHOME论坛网[url]WWW.LCDHOME.NET[/url] 原文地址:[url]http://bbs.lcdhome.net/read-htm-tid-3181.html[/url]