- #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 上傳
點擊文件名下載附件
|