欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
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.raoushi.com/bbs/)
Powered by Discuz! X3.1