⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pll.c

📁 MC145162双锁相环芯片的51单片机驱动程序,能同时配置两个通道的NA值.
💻 C
字号:
#include"reg52.h"
#include"LCD1602_Driver_12M.h"
#include"user.h"
#define uchar unsigned char
#define uint unsigned int

 uint F_TX=29600 ;
 uint F_RX=29600 ;
 uchar step=1 ;
uchar set_flag=0 ;
uchar code step_tab[4]={5,10,100,5};

//************************************
//EEPROM寄存器定义
sfr ISP_DATA  = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD   = 0xe5;
sfr ISP_TRIG  = 0xe6;
sfr ISP_CONTR = 0xe7;
//************************************		 
sbit NR0=P1^0;
sbit NR1=P1^1;
sbit NR2=P1^2;

sbit AR0=P1^3;
sbit AR1=P1^4;
sbit AR2=P1^5;
sbit AR3=P1^6;
sbit AR4=P1^7;
sbit AR5=P3^0;

sbit NT0=P3^1;
sbit NT1=P3^2;
sbit NT2=P3^3;
sbit NT3=P3^4;

sbit AT0=P3^5;
sbit AT1=P3^6;
sbit AT2=P3^7;
sbit AT3=P2^2;
sbit AT4=P2^1;
sbit AT5=P2^0;

sbit key0=P2^3;
sbit key1=P2^4;
/*
//********************************************
uchar EEPROM_read(uint addr)//EEPROM字节读
{
	ISP_ADDRH=(addr&0xff00)>>8;
	ISP_ADDRL=addr&0x00ff;
	ISP_CONTR=0x80;
	ISP_CMD=1;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
	return ISP_DATA;
}
//********************************************
void EEPROM_write(uint addr,uchar dat)//EEPROM字节写
{
	ISP_DATA=dat;
	ISP_ADDRH=(addr&0xff00)>>8;
	ISP_ADDRL=addr&0x00ff;
	ISP_CONTR=0x80;
	ISP_CMD=2;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
}
//********************************************
void EEPROM_ERASE(uint addr)//EEPROM扇区擦除
{
	ISP_ADDRH=(addr&0xff00)>>8;
	ISP_ADDRL=addr&0x00ff;
	ISP_CONTR=0x80;
	ISP_CMD=3;
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
}
//********************************************
void save()
{
	uchar F_TX_H,F_TX_L,F_RX_H,F_RX_L;
	uint addr=0xf000;
	EEPROM_ERASE(addr);
	F_TX_H=(F_TX>>8)&0x00ff;
	F_RX_H=(F_RX>>8)&0x00ff;
	F_TX_L= F_TX & 0x00ff;
	F_RX_L= F_RX & 0x00ff;
	
	EEPROM_write(  addr,F_TX_H);
	EEPROM_write(addr+1,F_TX_L);
	EEPROM_write(addr+2,F_RX_H);
	EEPROM_write(addr+3,F_RX_L);
	EEPROM_write(addr+4,step);
	EEPROM_write(addr+5,set_flag);
}

void read()
{

	uint F_TX_H,F_TX_L,F_RX_H,F_RX_L;
	uint addr=0xf000;

	F_TX_H=EEPROM_read(  addr);
	F_TX_L=EEPROM_read(addr+1);
	F_RX_H=EEPROM_read(addr+2);
	F_RX_L=EEPROM_read(addr+3);
	step=  EEPROM_read(addr+4);
	set_flag=EEPROM_read(addr+5);
	F_TX=(F_TX_H<<8)| F_TX_L;
	F_RX=(F_RX_H<<8)| F_RX_L;
	

}
*/
void system_start()
{
	dis_one_char(0,0,'1');
	dis_one_char(0,1,'0');
	dis_one_char(0,2,'m');
	dis_one_char(0,3,' ');
	dis_one_char(0,4,'B');
	dis_one_char(0,5,'a');
	dis_one_char(0,6,'n');
	dis_one_char(0,7,'d');
	dis_one_char(0,8,' ');
	dis_one_char(0,9,'F');
	dis_one_char(0,10,'M');
	dis_one_char(0,11,' ');
	dis_one_char(0,12,'T');
	dis_one_char(0,13,'R');
	dis_one_char(0,14,'e');
	dis_one_char(0,15,'r');
	
	dis_one_char(1,0,'D');
	dis_one_char(1,1,'e');//design
	dis_one_char(1,2,'s');
	dis_one_char(1,3,'i');
	dis_one_char(1,4,'g');
	dis_one_char(1,5,'n');
	dis_one_char(1,6,' ');
	dis_one_char(1,7,'b');
	dis_one_char(1,8,'y');
	dis_one_char(1,9,' ');
	dis_one_char(1,10,'R');
	dis_one_char(1,11,'o');
	dis_one_char(1,12,'b');
	dis_one_char(1,13,'b');
	dis_one_char(1,14,'e');
	dis_one_char(1,15,'r');	

	delay(1500);
	dis_cls();
}
void write_pll(uint tx,uint rx)
{
	uint N_T,A_T,N_R,A_R;
	uint out_T,out_R;
//	save();
	rx+=10700;
	N_T=(tx/320) & 0x0f;
	A_T=((tx/5)%64) & 0x3f;
	
	N_R=(rx/320) & 0x07 ;
	A_R=((rx/5)%64) & 0x3f; 
	
	out_T=(N_T<<6) | A_T;
	out_R=(N_R<<6) | A_R;

	AR0=out_R  &  0x01;
	AR1=(out_R>>1) & 0x01;
	AR2=(out_R>>2) & 0x01;
	AR3=(out_R>>3) & 0x01;
	AR4=(out_R>>4) & 0x01;
	AR5=(out_R>>5) & 0x01;
	NR0=(out_R>>6) & 0x01;
	NR1=(out_R>>7) & 0x01;
	NR2=(out_R>>8) & 0x01;

	AT0=out_T  &  0x01;
	AT1=(out_T>>1) & 0x01;
	AT2=(out_T>>2) & 0x01;
	AT3=(out_T>>3) & 0x01;
	AT4=(out_T>>4) & 0x01;
	AT5=(out_T>>5) & 0x01;
	NT0=(out_T>>6) & 0x01;
	NT1=(out_T>>7) & 0x01;
	NT2=(out_T>>8) & 0x01;
	NT3=(out_T>>9) & 0x01;	
}
void dis_pco()
{
 	dis_one_char(0,0,'T'); 
	dis_one_char(0,4,'.');
	dis_one_char(0,8,'M');
	dis_one_char(0,9,'H');
	dis_one_char(0,10,'z');
	
	dis_one_char(1,0,'R');
	dis_one_char(1,4,'.'); 
	dis_one_char(1,8,'M');
	dis_one_char(1,9,'H');
	dis_one_char(1,10,'z');
	
	dis_one_char(0,12,'S');
	dis_one_char(0,13,'T');
	dis_one_char(0,14,'E');
	dis_one_char(0,15,'P');
	
	dis_one_char(1,15,'K');	
}

void dis_var(uint TX,uint RX,uchar step)
{
	uchar NT0,NT1,NT2,NT3,NT4;
	uchar NR0,NR1,NR2,NR3,NR4;
	
	NT4=(TX/10000);
	NT3=(TX-NT4*10000)/1000;
	NT2=(TX-NT4*10000-NT3*1000)/100;
	NT1=(TX-NT4*10000-NT3*1000-NT2*100)/10;
	NT0=TX%10;

	NR4=(RX/10000);
	NR3=(RX-NR4*10000)/1000;
	NR2=(RX-NR4*10000-NR3*1000)/100;
	NR1=(RX-NR4*10000-NR3*1000-NR2*100)/10;
	NR0=RX%10;

	dis_one_char(0,2,NT4+0x30); 
	dis_one_char(0,3,NT3+0x30); 
	dis_one_char(0,5,NT2+0x30); 
	dis_one_char(0,6,NT1+0x30); 
	dis_one_char(0,7,NT0+0x30); 

	dis_one_char(1,2,NR4+0x30); 
	dis_one_char(1,3,NR3+0x30); 
	dis_one_char(1,5,NR2+0x30); 
	dis_one_char(1,6,NR1+0x30); 
	dis_one_char(1,7,NR0+0x30); 

 	switch (step)
	{
		case 0:
	 
			dis_one_char(1,12,'T');
			dis_one_char(1,13,'-');
			dis_one_char(1,14,'5');
		break;

		case 1:
			dis_one_char(1,12,' ');
			dis_one_char(1,13,'1');
			dis_one_char(1,14,'0');
		break;

		case 2:
			dis_one_char(1,12,'1');
			dis_one_char(1,13,'0');
			dis_one_char(1,14,'0');
		break;
		case 3:
	
		 	dis_one_char(1,12,'5');
		 	dis_one_char(1,13,'.');
		 	dis_one_char(1,14,'0');
		break;
		default:
		break;
	}	  
}

void main()
{
	uchar temp;
	
	lcd1602_init();
	dis_cls();
//	read();
	system_start();
	dis_pco();
	dis_var(F_TX,F_RX,step);
	write_pll(F_TX,F_RX);
	while(1)
	{
	re:	dis_var(F_TX,F_RX,step);
		write_pll(F_TX,F_RX);
		key0=1;key1=1;
		temp=P2;
		temp=(temp>>3)&0x03;
		if(temp==0x03)
			goto re;
		 delay(5);
		//set_flag状态:0-常态,1-步进选择,2-发射频率设置,3-接收频率设置
		switch (temp)
		{
			case 0: 
			if(++step>=4)
			{
				step=0;
				set_flag=1;
				dis_one_char(1,0,' ');
			}
			else
			{
				set_flag=0;
				dis_one_char(1,0,'R');
			}
			dis_var(F_TX,F_RX,step);
			write_pll(F_TX,F_RX);
			delay(150);	 
			break;
 
			case 1: 
			if(set_flag==0)
			{
				dis_one_char(1,0,'R');
				F_TX+=step_tab[step];
				F_RX+=step_tab[step];
				if(F_TX>29700)
					F_TX=28000;
				if(F_RX>29700)
					F_RX=28000;
			}
			else if(set_flag==1)
			{
				dis_one_char(1,0,' ');
				F_TX+=step_tab[step];
				if(F_TX>29700)
					F_TX=28000;
			}
			dis_var(F_TX,F_RX,step);
			write_pll(F_TX,F_RX);
			break;

			case 2: 
			if(set_flag==0)
			{
				dis_one_char(1,0,'R');
				F_TX-=step_tab[step];
				F_RX-=step_tab[step];
				if(F_TX<28000)
					F_TX=29700;
				if(F_RX<28000)
					F_RX=29700;
			 }
			 else if(set_flag==1)
			{
				dis_one_char(1,0,' ');
				F_TX-=step_tab[step];
				if(F_TX<28000)
					F_TX=29700;
			}
			dis_var(F_TX,F_RX,step);
			write_pll(F_TX,F_RX);	
			break;
			default:
			break;
		}
	}

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -