東戳戳西戳戳,戳出一篇利用MCU控制對講機制作的源程序,苦于無硬件連線圖無法仿制。求助大神們,可否從程序上面畫出硬件連線圖?
附上源程序,供大家琢磨。因為這個對講機工作頻率范圍很寬,好像可以工作在短波10米范圍。原數(shù)據(jù)手冊上寫有支持19~33Mhz,并附上芯片的數(shù)據(jù)手冊。
并求大神畫出MCU控制的硬件連接圖,和如何修改程序為工作頻率段為29.6Mhz范圍?
單片機源程序如下:
- #include "STC8F.h"
- #include "intrins.h"
- #include "IICANDDELAY.h"
- #include "codetab.h"
- sbit set=P3^7;//must connect not more than 8.2K resistor to GND
- //MCU and BK4802N share 3.3v VCC(STC8MCU must using 3.3v VCC)
- //BK4802N pin19-pin22 must connect to 3.3v.
- sbit ppt=P5^4;//ppt must be connected to BK4802N pin23.
- sbit test=P5^5;//test(p5.5) connect a LED to GND to indict 4802n IIC RUN.
- //DEFAULT FERQ:TX=RX=439.725mh.uSING "BK4802NCalc.exe to calculate.
- int rxfreq[]={
- 0x52BE,0xF850,0x0000};
- int txfreq[]={
- 0x52C5,0x925F,0x0000};
- char txinf[]="TX...";
- char rxinf[]="RX...";
- char blankinf[]=" ";
- char newtxfreq[6];
- char newrxfreq[6];
- unsigned char newtxfreqinf[6];
- //char newrxfreqinf[6];
- int rxreg[]={ //rx setting for register
- 0x0300,
- 0x8e04,
- 0xF140,
- 0xED00,
- 0x17E0,
- 0xe0e0,
- 0x8543,
- 0x0700,
- 0xA066,
- 0xFFFF,
- 0xFFE0,
- 0x07a0,
- 0x9E3C,
- 0x1F00,
- 0xD1D1,
- 0x200F,
- 0x01FF,
- 0xE000,
- 0x0340
- };
- int txreg[]={//tx setting for register
- 0x7C00,
- 0x0c04,
- 0xF140,
- 0xED00,
- 0x3fE0,
- 0xe0e0,
- 0x8543,
- 0x0700,
- 0xA066,
- 0xFFFF,
- 0xffe0,
- 0x061f,
- 0x9e3c,
- 0x1f00,
- 0xd1C1,
- 0x200f,
- 0x01FF,
- 0xE000,
- 0x0c00
- };
- void setchannel(char k)//setting new trx freq from EEPROM in MCU
- {
-
- int i;
-
- for(i=0;i<6;i++)
- {
- newrxfreq[i]=IapRead(i+6+k*32);
- newtxfreq[i]=IapRead(i+k*32);
- }
- }
- void setchannelinf(char k)//setting new trx freq information display on OLED from EEPROM in MCU
- {
-
- int i;
-
- for(i=0;i<6;i++)
- {
- newtxfreqinf[i]=IapRead(i+16+k*32);
- }
- }
- void main()
- {
- unsigned char i,f;// i do for 'for',f do for store channel No.
- unsigned char k=0;//k is do for trx
- //Start
- test=1;
- Delay50ms();
- OLED_Init(); //OLED初始化
- for(i=0; i<8; i++)//通過點整顯示漢字 -- i表示字表數(shù)組的位置
- {
- OLED_P16x16Ch(i*16,0,i);//In the name of the Moon ,I will punish you.
- OLED_P16x16Ch(i*16,2,i+8); //Moon promise power, make up!
- }
- OLED_P8x16Str(0,6,"BG7QKU");
- delay(10000);
- OLED_CLS();//清屏
- test=0;
- OLED_P8x16Str(0,0,"BG7QKU");
- for(i=0; i<8; i++)
- {
- OLED_P16x16Ch(i*16,6,i);
- }
- writing(0x90,23,0xa8,0XD0);//Init rx reg23.
- if(P11==0)//if default or not?
- {
- for(i=4;i<=22;i++)
- {
- writing(0x90,i,HIGHBYTE(rxreg[i-4]),LOWBYTE(rxreg[i-4]));//init default reg. ro rx
- }
- for(i=5;i>2;i--)
- {
- writing(0x90,i-3,HIGHBYTE(rxfreq[i-3]),LOWBYTE(rxfreq[i-3]));//init default reg. to rx freq
- }
- OLED_P8x16Str(0,4,"439.725");
- OLED_P8x16Str(0,2,rxinf);
- }
-
- else
- {
- f=IapRead(0x0200);//read store channel No.
- if (f>3)
- f=0;
- setchannel(f);
- setchannelinf(f);
- OLED_P8x16Str(0,4,newtxfreqinf);
- k=1;
- }
-
- test=1;
- while(1)
- {
- if(set==1)//teat channel change key
- {
- Delay30ms();//kill swim
- if(set==1)
- {
- Delay30ms();//down to LOW to set channel
- if(set==0)
- {
- f++;
- if(f>3)
- f=0;
- IapErase(0x0200);//erase EEPROM before write
- IapProgram(0x0200,f);//write EEPORM
- setchannel(f);
- setchannelinf(f);
- OLED_P8x16Str(0,4,newtxfreqinf);
-
- k=1;
- }
- }
- }
- //Only using default freq
- if(ppt==1&&k==0&&P11==0)//Set to TX if PTT =HIGH.
- {
- test=0;
- Delay30ms();
- if(ppt==1)
- {
- Delay30ms();
- for(i=4;i<=22;i++)
- {
- writing(0x90,i,HIGHBYTE(txreg[i-4]),LOWBYTE(txreg[i-4]));
- }
-
- for(i=5;i>2;i--)
- {
- writing(0x90,i-3,HIGHBYTE(txfreq[i-3]),LOWBYTE(txfreq[i-3]));
- }
- Delay30ms();
- OLED_P8x16Str(0,2,blankinf);
- OLED_P8x16Str(0,2,"439.725");
- test=1;
- k=1;
- }
- }
- if(ppt==0&&k==1&&P11==0)//Set to RX.
- {
- test=0;
- Delay30ms();
- if(ppt==0)
- {
- Delay30ms();
- writing(0x90,23,0xa8,0XD0);
- for(i=4;i<=22;i++)
- {
- writing(0x90,i,HIGHBYTE(rxreg[i-4]),LOWBYTE(rxreg[i-4]));
- }
-
- for(i=5;i>2;i--)
- {
- writing(0x90,i-3,HIGHBYTE(rxfreq[i-3]),LOWBYTE(rxfreq[i-3]));
- }
- Delay30ms();
- OLED_P8x16Str(0,2,blankinf);
- OLED_P8x16Str(0,2,"439.725");
- test=1;
- k=0;
- }
- }
- //Using pre-set freq
- if(ppt==1&&k==0&&P11==1)//Set to TX if PTT =HIGH.
- {
- test=0;
- Delay30ms();
- if(ppt==1)
- {
- setchannel(f);
- setchannelinf(f);
- test=0;
- OLED_P8x16Str(0,4,newtxfreqinf);
- Delay30ms();
- for(i=4;i<=22;i++)
- {
- writing(0x90,i,HIGHBYTE(txreg[i-4]),LOWBYTE(txreg[i-4]));
- }
-
- for(i=5;i>2;i--)
- {
- writing(0x90,i-3,newtxfreq[2*(i-3)],newtxfreq[2*(i-3)+1]);
- }
- Delay30ms();
- OLED_P8x16Str(0,2,blankinf);
- OLED_P8x16Str(0,2,txinf);
- test=1;
- k=1;
- }
- }
- if(ppt==0&&k==1&&P11==1)//Set to RX.
- {
- Delay30ms();
- if(ppt==0)
- {
- test=0;
- Delay30ms();
- writing(0x90,23,0xa8,0XD0);
- for(i=4;i<=22;i++)
- {
- writing(0x90,i,HIGHBYTE(rxreg[i-4]),LOWBYTE(rxreg[i-4]));
- }
-
- for(i=5;i>2;i--)
- {
- writing(0x90,i-3,newrxfreq[2*(i-3)],newrxfreq[2*(i-3)+1]);
- }
- Delay30ms();
- OLED_P8x16Str(0,2,blankinf);
- OLED_P8x16Str(0,2,rxinf);
- test=1;
- k=0;
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
第三個程序,增加到16個信道,以及顯示月野兔開機圖片.zip
(4.13 MB, 下載次數(shù): 110)
2021-1-3 16:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
BK4802_datasheet.pdf
(753.36 KB, 下載次數(shù): 114)
2021-1-3 16:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|