📄 pll.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 + -