标题:
rad5820一体机51单片机程序
[打印本页]
作者:
hl12345
时间:
2019-7-31 19:24
标题:
rad5820一体机51单片机程序
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar mode=0,gongneng=0;
bit mute=0; //RDA5820 的寄存器地址
#define RDA5820_READ 0X23 //读 RDA5820
#define RDA5820_WRITE 0X22 //写 RDA5820
uchar code *table[]={"0","1","2","3","4","5","6","7","8","9"};
/*--------- 液晶端口定义 -----*/
sbit LCD_RST = P1^0; //low active
sbit LCD_CE = P1^1; //low active
sbit LCD_DC = P1^2; //0=command,1=data
sbit LCD_DIN = P1^3; //rise edge enable
sbit LCD_CLK = P1^4; //clock
sbit contrl=P2^7;
sbit SDA =P0^0;
sbit SCL =P0^1;
sbit KEYup = P3^3; //按键
sbit KEYdown = P3^4;
sbit KEY3 = P3^5;
sbit KEY4 = P3^6; //按键
sbit KEY = P3^7;
unsigned char code font6x8[][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines
}; /****************************** 汉子字模 *************************************/
unsigned char code hanzi[][16]=
{ /*-- 文字 : 收 -*/ 0x00,0xFC,0x00,0x00,0xFF,0x00,0x40,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00, //0
0x00,0x0F,0x04,0x02,0xFF,0x00,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00, /*-- 文字 : 音 --*/
0x40,0x40,0x44,0x44,0x54,0x64,0x45,0x46,0x44,0x64,0x54,0x44,0x44,0x40,0x40,0x00, //2
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00, /*-- 文字 : 机 --*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00, //4
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00, /*-- 文字 : 发 --*/
0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00, //6
0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00, /*-- 文字 : 射 --*/
0x00,0x00,0xFC,0x56,0x55,0x54,0xFC,0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00, //8
0x02,0x42,0x23,0x12,0x4A,0x86,0x7F,0x00,0x00,0x01,0x46,0x80,0x7F,0x00,0x00,0x00, /*-- 文字 : 机 --*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00, //10
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,
0x00,0x00,0x01,0x03,0x07,0x0F,0x1B,0xF3,0xF3,0x1B,0x0F,0x07,0x03,0x01,0x00,0x00, //12 信号强度
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x02,0x04,0x08,0xF0,0x30,0x50,0xF8,0x8C,0x44,0x24,0x14,0xFC,0xFC,0x02,0x01, //14 静音
0x80,0x40,0x20,0x10,0x0F,0x0C,0x0A,0x1F,0x11,0x2A,0x24,0x28,0x3F,0x3F,0x40,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 取消静音符号
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void delayms(unsigned int m)
{
unsigned int i,j;
for(i=m;i>0;i--)
for(j=113;j>0;j--);
}
void delayus()
{
_nop_ () ;
}
/****************************Nokia5110*************************************/
void LCD_write_byte(uchar dat,uchar cmd)
{
uchar i;
LCD_CE=0;
if(cmd==0) LCD_DC=0; //命令
else LCD_DC=1; //数据
for(i=0;i<8;i++)
{
if(dat&0x80) //高位传起
LCD_DIN=1;
else
LCD_DIN=0;
LCD_CLK=0; dat=dat<<1; //移位
LCD_CLK=1;
}
LCD_CE=1;
}
/*-------------------- 函数名称: LCD_set_xy 入口参数: x:0-5 行选择 y:0-83 列选择
---------------------*/
void LCD_set_xy(uchar x,uchar y)
{
LCD_write_byte(0x40|y,0); //y:0-5
LCD_write_byte(0x80|x,0); //x:0-83
}
/*------------------------ 函数名称: LCD_clear 功能:清屏,向 ram 内写 0
-------------------------*/
void LCD_clear()
{
unsigned int i;
LCD_write_byte(0x0c,0);
LCD_write_byte(0x80,0);
for(i=0;i<504;i++)
LCD_write_byte(0x00,1);
}
/*------------------ 函数名称: LCD_write_char 功能:写入一个字符 入口参数: c
------------------*/
void LCD_write_char(uchar c)
{
uchar line;
c-=32; //转 ASCII 码
for(line=0;line<6;line++) //6 列
LCD_write_byte(font6x8[c][line], 1); //检索
}
/*-------------------------------- 函数名称: LCD_write_english_string 功能:写入字符串 入口参数: x,y:地址 s:地址指针 ---------------------------------*/
void LCD_write_english_string(uchar x,uchar y,char *s)
{
LCD_set_xy(x,y);
while(*s)
{
LCD_write_char(*s);
s++;
}
}
/*------------------------------------ 函数名称: writehanzi 功能:在 LCD 上显示汉字 入口参数: a:汉字在数组中的位置 X:0-83 列选择 Y:0-5 行选择-------------------------------------*/
void Writehanzi(uchar x,uchar y,uchar a)
{
uchar i,j;
LCD_set_xy(x,y);
for(i=a;i<a+2;i++)
{
for(j=0;j<16;j++)
{
LCD_write_byte(hanzi[i][j],1);
}
LCD_set_xy(x,y+1);
}
}
/*------------------ 函数名称: LCD_init 功能:初始化 LCD 入口参数:无 出口参数:无
------------------*/
void LCD_init(void)
{
LCD_RST=0; //复位
delayus();
LCD_RST=1;
LCD_CE=0;
delayus(); LCD_CE=1; //使能
delayus();
LCD_write_byte(0x21,0);// 使用扩展指令集
LCD_write_byte(0xa0,0);// 设置偏置电压
LCD_write_byte(0x06,0);// 温度矫正
LCD_write_byte(0x13,0);//1:48
LCD_write_byte(0x20,0);// 使用基本指令集
LCD_clear(); //清屏
LCD_write_byte(0x0c,0); //普通显示
LCD_CE=0;
}
void Rxjiemian() //收音机界面
{
Writehanzi(0,0,0); //收
Writehanzi(16,0,2); // 音
Writehanzi(32,0,4); // 机
Writehanzi(48,0,12); //信号强度符号
LCD_write_english_string(66,1," ");
LCD_write_english_string(12,3,"Freq: ");
LCD_write_english_string(12,4," V ol: ");
LCD_write_english_string(12,5,"Bass: No");
}
void Txjiemian() //发射机界面
{
Writehanzi(0,0,6); //发
Writehanzi(16,0,8); // 射
Writehanzi(32,0,10);// 机
Writehanzi(48,0,12); //信号强度符号
LCD_write_english_string(66,1," ");
LCD_write_english_string(12,3,"Freq: ");
LCD_write_english_string(12,4,"Gain: ");
LCD_write_english_string(12,5," Pag: ");
}
void displayrssi(uchar rssi) //显示信号强度
{
uchar A1=0,A2=0,A3=0;
A1=rssi/100;
A2=rssi%100/10;
A3=rssi%10;
LCD_write_english_string(66,1,table[A1]);
LCD_write_english_string(72,1,table[A2]);
LCD_write_english_string(78,1,table[A3]);
}
void displaypinlv(float pinlv) // 显示频率
{
uchar A1=1,A2=1,A3=1,A4=1,A5=1,A6=1;
long int WENDU;
WENDU=pinlv*10;
A1=WENDU/1000;
A2=WENDU%1000/100;
A3=WENDU%100/10;
A4=WENDU%10;
LCD_write_english_string(48,3,table[A1]);
LCD_write_english_string(54,3,table[A2]);
LCD_write_english_string(60,3,table[A3]);
LCD_write_english_string(66,3,".");
LCD_write_english_string(72,3,table[A4]);
}
void displayvol(uchar vol) //显示音量
{uchar A1=1,A2=1;
A1=vol/10;
A2=vol%10;
LCD_write_english_string(48,4,table[A1]);
LCD_write_english_string(54,4,table[A2]);}
void displaygain(uchar gain) //显示输入增益
{
uchar A1=1,A2=1;
A1=gain/10;
A2=gain%10;
LCD_write_english_string(48,4,table[A1]);
LCD_write_english_string(54,4,table[A2]);
}
void displaypag(uchar pag) //显示发射功率
{
uchar A1=1,A2=1;
A1=pag/10;
A2=pag%10;
LCD_write_english_string(48,5,table[A1]);
LCD_write_english_string(54,5,table[A2]);
}
void displaybass(uchar bass) //显示重低音 {
{if(bass)LCD_write_english_string(48,5,"YES");
else LCD_write_english_string(48,5,"No ");
}
void displaymute(uchar mute) //显示静音符号
{
if(mute) Writehanzi(67,4,14); //静音符号
else Writehanzi(67,4,16); //静音符号消除
}
void displayguangbiao(uchar wei,uchar flag) //显示光标 {
{if(flag)
LCD_write_english_string(0,(2+wei),"->"); //1 箭头
else LCD_write_english_string(0,(2+wei)," "); //清除 1 箭头
}
/*----------------------------------------IIC 通信程序 ---------------------------------------------------*/
void delay_ms(unsigned int m)
{
unsigned int i,j;
for(i=m;i>0;i--)
for(j=113;j>0;j--);
}
void Dela_y(uint c) //延时
{
int i=0;
for(i=0;i<c;i++);
}
void OpenIIC()
{
SDA = 1;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
SDA = 0;
_nop_();_nop_();_nop_();_nop_();
SCL = 0;
}
void CloseIIC()
{
SCL = 0;
SDA = 0 ;
_nop_();_nop_();_nop_();_nop_();
SCL = 1;
SDA = 1;
_nop_();_nop_();_nop_();_nop_();
Dela_y(50); // 防止过快的读取造成 EPPROM 来不及反应 }
}
uchar IIC_Wait_Ack(void) //等待应答信号 1 接受应答失败, 0 成功
{
uchar ucErrTime=0;
SDA=1;
_nop_();
SCL=1;
_nop_();
while(SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
CloseIIC();
return 1;
}
}
SCL=0;
return 0;
}
void IIC_Ack(void) //产生应答信号
{
SCL=0; SDA=0; //0 表示应答
_nop_();_nop_();
SCL=1;
_nop_();_nop_();
SCL=0;
}
void IIC_NAck(void) //产生非应答信号 {
{SCL=0; SDA=1; //1 表示非应答
_nop_();_nop_();
SCL=1;
_nop_();_nop_();
SCL=0;
}
void IICsendByte(uchar txd) //IIC 发送一个字节
{
uchar t;
SCL=0;
for(t=0;t<8;t++)
{
SDA=(txd&0x80)>>7;
txd<<=1;
_nop_();_nop_();
SCL=1;
_nop_();_nop_();
SCL=0;
_nop_();_nop_();;
}
}
uchar IICReadByte(unsigned char ack) //IIC 读一个字节
{unsigned char i,receive=0;
SDA = 1; //51 单片机将引脚拉高则设置为输入模式
for(i=0;i<8;i++ )
{ SCL=0;
_nop_();_nop_();
SCL=1;
receive<<=1;
if(SDA)receive++;
_nop_();
}
if (!ack) IIC_NAck();// 产生非应答信号
else IIC_Ack(); // 产生应答信号
return receive;
}
/*---------------------------------RDA5820 程序 --------------------------------------------------------------*/
uint ReadReg(uchar regAddr) //读 RDA5820 指令
{
uint buf;
OpenIIC(); IICsendByte(RDA5820_WRITE); //发送写命令
IIC_Wait_Ack(); IICsendByte(regAddr); //发送地址
IIC_Wait_Ack();
OpenIIC(); IICsendByte(RDA5820_READ); //发送读命令
IIC_Wait_Ack();
buf = IICReadByte(1);
buf = buf<<8;
buf =buf|IICReadByte(0);
CloseIIC();
return buf;
}
void WriteReg(uchar regAddr,uint val) // 写 RDA5820 指令
{
OpenIIC();
IICsendByte(RDA5820_WRITE); //发送写命令
IIC_Wait_Ack();
IICsendByte(regAddr); //发送地址
IIC_Wait_Ack();
IICsendByte(val>>8);
IIC_Wait_Ack();
IICsendByte(val&0XFF);
IIC_Wait_Ack();
CloseIIC();
}
void RX_Mode(void) //接收模式
{
uint temp;
temp=ReadReg(0X40);
temp&=0xfff0;
WriteReg(0X40,temp) ;
}
void TX_Mode(void) //发射模式
{
uint temp;
temp=ReadReg(0X40);
temp&=0xfff0;
temp|=0x0001;
WriteReg(0X40,temp) ;}
void Vol_Set(uchar vol) //设置音量 0~15
{
uint temp=0X8845;
temp&=0xfff0;
WriteReg(0x05,vol|=temp) ;
} void Mute_Set(uchar mute) //静音设置 1:静音 0:不静音
{
uint temp=0xd281;
if(!mute)temp|=1<<14;
else temp&=~(1<<14);
WriteReg(0X02,temp) ; }
void Bass_Set(uchar bass) //BASS 设置 1:打开 BASS 0:不打开 BASS
{
uint temp=0xd281;
if(bass)temp|=1<<12;
else temp&=~(1<<12);
WriteReg(0X02,temp) ;
}
uchar Rssi_Get(void) //接收信号强度 0~63
{
uint temp=000;
temp=ReadReg(0X0B);
temp=(temp>>9);
return temp;
}
void TxPAG_Set(uchar gain) //发射功率设置 0~63
{
uint temp;
temp=ReadReg(0X42);
temp&=0XFFC0;
temp|=gain;
WriteReg(0X42,temp) ;
}
void TxPGA_Set(uchar gain) //输入信号增益 0~7
{
uint temp=0XF8FF;
temp|=gain<<8;
WriteReg(0X42,temp) ;}
void Band_Set(uchar band) //频率带宽设置 0:87-108 1:76-91 2:76-108
{
uint temp;
temp=ReadReg(0X03);
temp&=0XFFF3;
temp|=band<<2;
WriteReg(0X03,temp) ;
}
void Space_Set(uchar spc) //设置步进频率 0:100KHz 1:200KHz 3:50KHZ
{
uint temp;
temp=ReadReg(0X03);
temp&=0XFFFC;
temp|=spc;
WriteReg(0X03,temp) ;
}
void Freq_Set(uint freq) // 频率设置 单位 10KHz 6500~10800
{
uint temp;
uchar spc=0,band=0;
uint fbtm,chan;
temp=ReadReg(0X03);
temp&=0X001F;
band=(temp>>2)&0x03;
spc=temp&0x03;
if(spc==0)spc=10;
else if(spc==1)spc=20;
else spc=5;
if(band==0)
fbtm=8700;
else if(band==1||band==2)
fbtm=7600;
else
{
fbtm=ReadReg(0X53);
fbtm*=10;
}
if(freq<fbtm)return;
chan=(freq-fbtm)/spc;
chan&=0X3FF;
temp|=chan<<6;
temp|=1<<4;
WriteReg(0X03,temp) ;
delay_ms(20);
}
void RDA5820_Init(void) //RDA5820 初始化
{
WriteReg(2,0xd281); //基本配置
delay_ms(60);
WriteReg(0x05,0X884F);// 搜索强度 8,lan 1.8ma,vol 最大
}
/*-------------------------------------------------------------------------------------------*/
void modesaomiao() //模式切换按键
{
if(KEY==0)
{
delayms(2);
if(KEY==0)
{
mode+=1;
if(mode==2)mode=0;
while(!KEY);
}
}
}
void gongnengsaomiao() //功能切换按键
{
if(KEY3==0)
{
delayms(2);
if(KEY3==0)
{
gongneng+=1;
if(gongneng==3)gongneng=0;
while(!KEY3);
}
}
}
void Mutesaomiao() //静音扫描
{
if(KEY4==0)
{
delayms(2);
if(KEY4==0)
{
mute=~mute;
if(mute==1){Mute_Set(1);displaymute(1);}
if(mute==0){Mute_Set(0);displaymute(0);}
while(!KEY4);
}
}
}
/*********************************** 主程序 **********************************/
void main(void)
{
uchar Bass=0;
uchar Vol=8,TxPAG=63,Gain=4,Rssi=0;
uint TXFreq=9200,RXFreq=8830;
contrl=1; delayms(2000); //延时,等待系统上电稳定
LCD_init(); //lcd 初始化
LCD_clear(); //清屏
Rxjiemian();
RDA5820_Init(); //RDA 初始化
RX_Mode(); //接收模式
Band_Set(3); //频率带宽 65-108Mhz
Space_Set(0); //频率步进 100Khz
TxPGA_Set(3); //发射模式输入信号增益
TxPAG_Set(63); //发射功率最大
Freq_Set(RXFreq); // 频率设置
while(1)
{
if(mode==0) //接收模式
{ RX_Mode(); //接收模式
Rxjiemian();
displayrssi(Rssi_Get()); //显示信号强度
displaypinlv(RXFreq/100.0);// 显示频率
displayvol(Vol); //显示音量
displaybass(Bass); //显示重低音
while(mode==0)
{
displayrssi(Rssi_Get()); //显示信号强度
if((gongneng==0)&&(mode==0)) //Freq 调节 7760~10800
{
displayguangbiao(1,1); //显示光标
while(gongneng==0)
{
displayrssi(Rssi_Get()); //显示信号强度
modesaomiao();
Mutesaomiao();
gongnengsaomiao();
Mutesaomiao();
if(KEYup==0)
{
delayms(100);
if(RXFreq==10800)RXFreq=10800;
else RXFreq+=10; Freq_Set(RXFreq); //设置频率
displaypinlv(RXFreq/100.0);// 显示频率
}
if(KEYdown==0)
{
delayms(100);
if(RXFreq==6500)RXFreq=6500;
else RXFreq-=10;
Freq_Set(RXFreq); //设置频率
displaypinlv(RXFreq/100.0);// 显示频率
}
if(mode==1)break;
} displayguangbiao(1,0); //不显示光标
}
if((gongneng==1)&&(mode==0)) //Vol 调节 0~15
{
displayguangbiao(2,1); //显示光标
while(gongneng==1)
{
displayrssi(Rssi_Get()); //显示信号强度
Mutesaomiao();
modesaomiao();
gongnengsaomiao();
Mutesaomiao();
if(KEYup==0)
{
if(Vol==15)
Vol=15;
else Vol+=1;
Vol_Set(Vol); //设置音量
displayvol(Vol); //显示音量
while(!KEYup);
}
if(KEYdown==0)
{
if(Vol==0)Vol=0;
else Vol-=1;
Vol_Set(Vol); //设置音量
displayvol(Vol); //显示音量
while(!KEYdown);
}
if(mode==1)break;
}
displayguangbiao(2,0); //不显示光标
}
if((gongneng==2)&&(mode==0)) //Bass 是否打开 0~1
{
displayguangbiao(3,1); //显示光标
while(gongneng==2)
{
displayrssi(Rssi_Get()); //显示信号强度
Mutesaomiao();
modesaomiao();
gongnengsaomiao();
Mutesaomiao();
if(KEYup==0)
{
if(Bass==0)Bass=1;
Bass_Set(Bass); //设置重低音
displaybass(Bass); //显示重低音
}
if(KEYdown==0)
{
if(Bass==1)Bass=0;
Bass_Set(Bass); //设置重低音
displaybass(Bass); //显示重低音
}
if(mode==1)break;
} displayguangbiao(3,0); //不显示光标
}
}
}
if(mode==1) //发射模式
{
TX_Mode(); //发射模式
Freq_Set(TXFreq); //设置频率
Txjiemian(); displayrssi(Rssi); //显示信号强度
displaypinlv(TXFreq/100.0);// 显示频率
displaygain(Gain);// 显示输入增益
displaypag(TxPAG); //显示发射功率
while(mode==1)
{
if((gongneng==0)&&(mode==1)) //Freq 调节 7760~10800
{
displayguangbiao(1,1); //显示光标
while(gongneng==0)
{
displayrssi(0); // 显示信号强度
Mutesaomiao();
modesaomiao();
gongnengsaomiao();
if(KEYup==0)
{
delayms(100);
if(TXFreq==10800)TXFreq=10800;
else TXFreq+=10;
Freq_Set(TXFreq); //设置频率
displaypinlv(TXFreq/100.0);// 显示频率
}
if(KEYdown==0)
{
delayms(100);
if(TXFreq==6500)TXFreq=6500;
else TXFreq-=10;
Freq_Set(TXFreq); //设置频率
displaypinlv(TXFreq/100.0);// 显示频率
}
if(mode==0)break;
}
displayguangbiao(1,0); //显示光标
}
if((gongneng==1)&&(mode==1)) //输入增益 0~7
{
displayguangbiao(2,1); //显示光标
while(gongneng==1)
{
displayrssi(Rssi_Get()); //显示信号强度
Mutesaomiao();
modesaomiao();
gongnengsaomiao();
if(KEYup==0)
{
if(Gain==7)Gain=7;
else Gain+=1; TxPGA_Set(Gain); //设置增益
displaygain(Gain);// 显示输入增益
while(!KEYup);
}
if(KEYdown==0)
{
if(Gain==0)Gain=0;
else Gain-=1;
TxPGA_Set(Gain); // 设置增益
displaygain(Gain);// 显示输入增益
while(!KEYdown);
}
if(mode==0)break;
}
displayguangbiao(2,0); //显示光标
}
if((gongneng==2)&&(mode==1)) //发射功率调节 0~63
{
displayguangbiao(3,1); //显示光标
while(gongneng==2)
{
displayrssi(Rssi_Get()); //显示信号强度
Mutesaomiao();
modesaomiao();
gongnengsaomiao();
if(KEYup==0)
{
if(TxPAG==63)TxPAG=63;
else TxPAG+=1;
TxPAG_Set(TxPAG); //设置发射功率
displaypag(TxPAG); //显示发射功率
while(!KEYup);
}
if(KEYdown==0)
{
if(TxPAG==0)TxPAG=0;
else TxPAG-=1;
TxPAG_Set(TxPAG); //设置发射功率
displaypag(TxPAG); //显示发射功率
while(!KEYdown);
}
if(mode==0)break;
}
displayguangbiao(3,0); //显示光标
}
}
}
}
}
复制代码
rda5820.zip
(71.85 KB, 下载次数: 14)
2019-7-31 19:23 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1