- #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, 下载次数: 12)
|