久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5680|回復(fù): 7
收起左側(cè)

FM8000模塊(GS1615)制作FM發(fā)射機(jī) 單片機(jī)仿真 程序 PPT教程都有

  [復(fù)制鏈接]
ID:166767 發(fā)表于 2017-2-26 18:11 | 顯示全部樓層 |閱讀模式
FM8000B發(fā)射模塊制作FM發(fā)射機(jī),以前做的,為了換其他文件,所以貢獻(xiàn)出來,含仿真、單片機(jī)程序、PPT
FM8000模塊(GS1615)制作FM發(fā)射機(jī)的單片機(jī)仿真原理圖:
0.png 0.png

GS1615FM發(fā)射機(jī) ppt內(nèi)容預(yù)覽:
0.png
模塊工作電壓:2.4-3.6V
參考時(shí)鐘:12MHZ
工作溫度范圍:-20——85攝氏度
調(diào)頻方式:I2C總線端口選頻
0.png 0.png 0.png
至此可知:寄存器0x00的bit1 bit0是頻率參數(shù)的最高兩位,+寄存器0x01的8位,共十位為頻率參數(shù)
模塊頻率范圍76MHz-108MHz,中間為92MHz,本人想開機(jī)即為此值。根據(jù)頻率計(jì)算公式freq=CH*0.05+76可知,要求CH=01 0100 0000(即320),因?yàn)閒req = 320*0.05 + 76 = 92MHz。
在設(shè)置FM8000時(shí)應(yīng)首先使寄存器0x00設(shè)置為00100001(即0x21,第一個(gè)1是進(jìn)入發(fā)射狀態(tài),最后01是CH高位)
再設(shè)置寄存器0x01為01000000(即0x40)
此時(shí)CH=01 0100 0000(即320)。
注:計(jì)算知,76MHz-108MHz對(duì)應(yīng)CH值000-640。

FM8000模塊(GS1615)制作FM發(fā)射機(jī)源程序中的SETCH()函數(shù)的講解:

根據(jù)頻率計(jì)算公式:freq=CH*0.05+76
模塊可發(fā)射的頻率范圍為76MHz-108MHz,對(duì)應(yīng)CH的范圍為000-640
按二進(jìn)制則為00 0000 0000—10 1000 0000
可以把CH(程序中為count)按寄存器位分為三段: 00 0000 0000—00 1111 1111  (000-255) 01 0000 0000—01 1111 1111  (256-511) 10 0000 0000—10 1000 0000  (512-640)
所以,CH的高兩位只可能為00、01、10(分別對(duì)應(yīng)值0、256、512),存入寄存器00h中。上面藍(lán)色的要存入寄存器01h中, 你該理解為什么程序中有count-256、 count-512 語句了。

思考與改進(jìn)
按鍵長(zhǎng)按時(shí)頻率變化的能否更快?并且仍可以區(qū)別是長(zhǎng)按或是短按。
按鍵長(zhǎng)按時(shí)數(shù)碼管顯示的能否更穩(wěn)定?
增加一個(gè)記憶功能,開機(jī)時(shí)自動(dòng)調(diào)整到上次關(guān)機(jī)時(shí)的頻率,加24C01等,程序怎改

單片機(jī)源程序:
  1. #include<intrins.h>    //包含 _nop_()
  2. #include<reg51.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. //---------------------------
  6. //-------定義變量端口--------
  7. sbit sda=P2^1;
  8. sbit scl=P2^0;
  9. sbit DIN=P0^5;   //小數(shù)點(diǎn)
  10. sbit K1=P2^7;
  11. sbit K2=P2^6;
  12. sbit K3=P2^5;
  13. sbit K4=P2^4;
  14. unsigned long count;
  15. uchar i,j;
  16. uchar a,b;
  17. uchar temp;
  18. unsigned long freq[8];
  19. unsigned long f;
  20. unsigned char  code table1[ ]={0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f,0x9F,0xDA,0xC3,0xDC,0xCB,0x8B,0x00};
  21.                /**左邊LED四位  "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "A"  "B"  "C"  "D"  "E"  "F" "不亮"
  22.                 共陰數(shù)碼管段碼表 (按圖接法的編碼)**/
  23. unsigned char  code table2[ ]={0x5F,0x41,0x9D,0xd5,0xC3,0xD6,0xDE,0x45,0xDF,0xD7,0xCF,0xDA,0x1E,0xD9,0x9E,0x8E,0x00};
  24.                /**右邊LED四位  "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "A"  "B"  "C"  "D"  "E"  "F" "不亮"
  25.                  共陰數(shù)碼管段碼表 (按圖接法的編碼)**/

  26. //----- 函數(shù)聲明-------------
  27. void FM8000_init(); //初始化函數(shù)
  28. void start();      //開始函數(shù)
  29. void stop();       //終止函數(shù)
  30. void respon();    //應(yīng)答信號(hào)
  31. void write_byte(uchar);   //寫字節(jié)函數(shù)
  32. uchar read_byte();        //讀字節(jié)函數(shù)
  33. void write_add(uchar,uchar); //指定地址寫一字節(jié)數(shù)據(jù)
  34. uchar read_add(uchar);        //指定地址讀一字節(jié)數(shù)據(jù)
  35. void delay();
  36. void delay_i2c(uint x);
  37. void SetCH();
  38. void addfreq();
  39. void decfreq();
  40. void fastadd();
  41. void fastdec();
  42. void delay10ms();
  43. void display();   
  44. //----------------------------------------
  45. //----------------------
  46. void delay()
  47. {
  48. _nop_();
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. _nop_();
  53. }
  54. //----------------------------------------
  55. void FM8000_init() //初始化函數(shù)
  56. {
  57. scl=1;
  58. delay();
  59. sda=1;
  60. delay();
  61. }

  62. //----------------------------

  63. void start(void)     //開始函數(shù)
  64. {
  65. sda=1;
  66. scl=1;
  67. delay();
  68. sda=0;       //拉低電平
  69. delay();
  70. scl=0;
  71. }

  72. //--------------------------------
  73. void stop(void)     //終止函數(shù)
  74. {
  75. sda=0;
  76. scl=1;
  77. delay();
  78. sda=1;       //拉高電平
  79. delay();
  80. scl=0;
  81. }

  82. //---------------------------------

  83. void respon() //應(yīng)答
  84. {
  85. uchar i;
  86. scl=1;
  87. delay();
  88. while((sda==1)&&(i<250))i++;
  89. scl=0;
  90. delay();
  91. }

  92. //-------------------------------
  93. void write_byte(uchar dat)    //寫字節(jié)
  94. {
  95. uchar i,temp;
  96. temp=dat;
  97. for(i=0;i<8;i++)
  98. {
  99.    temp=temp<<1;    //循環(huán)右移
  100.    scl=0;
  101.    delay();
  102.    sda=CY;      //CY為進(jìn)位標(biāo)志
  103.    delay();
  104.    scl=1;       //拉高SCL
  105.    delay();
  106. }
  107. scl=0;
  108. delay();
  109. sda=1;
  110. delay();
  111. }

  112. //------------------------------------
  113. uchar read_byte()            //讀字節(jié)
  114. {
  115. uchar i,k;
  116. scl=0;
  117. delay();
  118. sda=1;
  119. delay();
  120. for(i=0;i<8;i++)
  121. {
  122. scl=1;
  123. delay();
  124. k=(k<<1)|sda;
  125. scl=0;
  126. delay();
  127. }
  128. return k;
  129. }

  130. //------------------------------------
  131. //------------------------------------

  132. //-----指定地址寫入一字節(jié)數(shù)據(jù)-------
  133. void write_add(uchar add,uchar dat)
  134. {
  135. start();                //開始
  136. write_byte(0x58);       //寫 器件地址及寫信號(hào)
  137. respon();     
  138. write_byte(add);        //寫字地址
  139. respon();
  140. write_byte(dat);        //寫數(shù)據(jù)
  141. respon();
  142. stop();                 //終止
  143. }
  144. //---------------------------------

  145. //------指定地址讀一字節(jié)數(shù)據(jù)-------
  146. uchar read_add(uchar add)
  147. {
  148. uchar date;
  149. start();
  150. write_byte(0x58);     //寫 器件地址
  151. respon();
  152. write_byte(add);   //字節(jié)地址
  153. respon();
  154. start();
  155. write_byte(0x59);      
  156. respon();
  157. date=read_byte();
  158. stop();
  159. return date;
  160. }


  161. //------延時(shí)函數(shù)-------
  162. void delay_i2c(uint x)//延時(shí)函數(shù)
  163. {
  164. uchar a,b;
  165. for(a=x;a>0;a--);
  166. //for(b=100;b>0;b--);   //速度較慢,去掉加快點(diǎn)
  167. }

  168. void delay10ms(void) //延時(shí)10毫秒
  169. {                 
  170.           unsigned char i,j;
  171.           for(i=20;i>0;i--)
  172.           for(j=248;j>0;j--);
  173. }


  174. /***********************************************************

  175.                       0.1增加頻率
  176.                   void addfreq()

  177. **********************************************************/
  178. void addfreq()          
  179. {
  180.       
  181.               delay10ms();
  182.                   if(K2==0)                    
  183.           {
  184.                                         count+=2;

  185.                                         if(count==642)  //count=0對(duì)應(yīng)76.0MHz,count=640對(duì)應(yīng)108.0MHz,
  186.                                         {
  187.                                            count=0;
  188.                                         }
  189.                   }
  190.                   P0=0;     //寫入時(shí)關(guān)閉LED,使LED顯示亮度一樣
  191.                     SetCH();
  192.           do {display();}
  193.                   while(K2==0);   //等松手,此時(shí)LED仍顯示
  194. }
  195. /****************************************************************

  196.                       0.1減小頻率
  197.                   void decfreq()
  198. ******************************************************************/
  199. void decfreq()               
  200. {
  201.      delay10ms();
  202.                 if(K1==0)
  203.           {
  204.                                 if(count==0)
  205.                                         {
  206.                                            count=640;
  207.                                         }       
  208.                                 
  209.                       count-=2;
  210.                   P0=0;     //寫入時(shí)關(guān)閉LED,使LED顯示亮度一樣
  211.                     SetCH();
  212.           do {display();}
  213.                    while(K1==0);   //等松手,此時(shí)LED仍顯示
  214.            }
  215. }  


  216. /***********************************************************

  217.                       快速增加頻率
  218.                   void fastadd()

  219. **********************************************************/
  220. void fastadd()          
  221. {
  222.       
  223.               delay10ms();
  224.                   if(K4==0)                    
  225.           {
  226.                                         count+=2;

  227.                                         if(count==642)
  228.                                         {
  229.                                            count=0;
  230.                                         }
  231.                   }
  232.                   P0=0;     //寫入時(shí)關(guān)閉LED,使LED顯示亮度一樣
  233.                     SetCH();
  234.                 //  while(K4==0);   //等松手
  235. }
  236. /****************************************************************

  237.                       快速減小頻率
  238.                   void fastdec()
  239. ******************************************************************/
  240. void fastdec()               
  241. {
  242.      delay10ms();
  243.                 if(K3==0)
  244.           {
  245.                                 if(count==0)
  246.                                         {
  247.                                            count=640;
  248.                                         }       
  249.                                 
  250.                       count-=2;
  251.                   P0=0;     //寫入時(shí)關(guān)閉LED,使LED顯示亮度一樣
  252.                     SetCH();
  253.                  //          while(K3==0);   //等松手
  254.            }
  255. }  


  256. /*********************************************************

  257.                       顯示函數(shù)
  258.                   void display(void)

  259. *********************************************************/
  260. void display(void)
  261. {
  262.         {
  263.          f = (count*5+7600);               
  264.                    freq[7]=f/10000;
  265.                  freq[6]=(f%10000)/1000;
  266.                  freq[5]=(f%1000)/100;
  267.                  freq[4]=(f%100)/10;
  268.                  freq[3]=f%10;
  269.                  freq[1]=11;
  270.                  freq[2]=10;
  271.                  freq[0]=12;
  272.                  temp=0;
  273.                    for(i=0;i<5;i++)      //后四位不顯
  274.                         {
  275.                                 P1=temp;
  276.                                 if (i<4)                               
  277.                                    {P0=table1[freq[7-i]];
  278.                                     if (i==2) DIN=1;  //加小數(shù)點(diǎn)
  279.                                     }
  280.                                 else
  281.                                    {P0=table2[freq[7-i]];                               
  282.                                    if (i==6) DIN=1;  //加小數(shù)點(diǎn)
  283.                                    }
  284.                                 temp=temp+1;
  285.                                 if (i==4)P0=0;        //第5位不顯
  286.                                 for(a=10;a>0;a--)     //延時(shí)
  287.                                 for(b=248;b>0;b--);
  288.                           }
  289.         }
  290. }

  291. /*************************************************************

  292.                   設(shè)置發(fā)射頻率
  293.                                   void SetCH()

  294. ************************************************************/
  295. void SetCH()
  296. {
  297.     FM8000_init();         
  298.         if(count<=255)               
  299.                         write_add(0x00,0x20);   
  300.                         delay_i2c(100);
  301.                         write_add(0x01,count);   
  302.                         delay_i2c(100);       
  303.                      /* write_add(0x04,0x32); //是否把F8000內(nèi)部晶振設(shè)為12MHz,自己決定  
  304.                         delay_i2c(100);*/
  305.          if((count>=256) && (count<=511))
  306.                 {               
  307.                         write_add(0x00,0x21);   
  308.                         delay_i2c(100);
  309.                         write_add(0x01,count-256);   
  310.                         delay_i2c(100);
  311.                      /* write_add(0x04,0x32); //是否把F8000內(nèi)部晶振設(shè)為12MHz,自己決定  
  312.                         delay_i2c(100);*/
  313.                 }
  314.         if(count>=512)               
  315.                 {        write_add(0x00,0x22);   
  316.                         delay_i2c(100);
  317.                         write_add(0x01,count-512);   
  318.                         delay_i2c(100);
  319.                      /* write_add(0x04,0x32); //是否把F8000內(nèi)部晶振設(shè)為12MHz,自己決定  
  320.                         delay_i2c(100);*/
  321.                 }

  322. ………………余下程序請(qǐng)下載附件……

復(fù)制代碼


0.png 0.png

所有資料下載:
FM8000模塊(GS1615)制作FM發(fā)射機(jī)(分享文件).rar (1.66 MB, 下載次數(shù): 55)

評(píng)分

參與人數(shù) 2黑幣 +105 收起 理由
韓篤銘 + 5 贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:185311 發(fā)表于 2017-4-1 11:14 | 顯示全部樓層
好資料
回復(fù)

使用道具 舉報(bào)

ID:79034 發(fā)表于 2017-4-8 17:28 | 顯示全部樓層
正好需要這方面的資料
回復(fù)

使用道具 舉報(bào)

ID:209954 發(fā)表于 2017-6-21 18:35 | 顯示全部樓層
感謝樓主分享,先收下了。
回復(fù)

使用道具 舉報(bào)

ID:258222 發(fā)表于 2018-6-23 10:33 | 顯示全部樓層
可以給個(gè)下載地址么?沒有黑幣無法下載
回復(fù)

使用道具 舉報(bào)

ID:375594 發(fā)表于 2018-7-20 10:40 | 顯示全部樓層
感謝樓主分享,請(qǐng)問該芯片哪有賣的嗎
回復(fù)

使用道具 舉報(bào)

ID:678298 發(fā)表于 2019-12-31 12:49 | 顯示全部樓層
不錯(cuò)哦,能發(fā)一份給我嗎?
回復(fù)

使用道具 舉報(bào)

ID:708105 發(fā)表于 2020-7-9 07:30 | 顯示全部樓層
多大發(fā)射功率
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲日本视频 | 男女羞羞免费视频 | 久久久久久久久久久久久九 | 午夜一区| av免费成人 | 欧美色综合一区二区三区 | 亚洲精品视频一区 | 超碰国产在线 | 成人精品鲁一区一区二区 | 精品一区二区三区91 | 欧美在线视频免费 | 日本久久精品视频 | 日韩免费一区二区 | 中文字幕日韩三级 | 亚洲精品91| 天天艹天天干天天 | 青青久草 | 一级在线观看 | 欧美在线综合 | 在线精品国产 | 国产美女精品视频免费观看 | 国产在线观看福利 | 夜夜操操操 | dy天堂| 国产高清一区二区三区 | www.免费看片.com| 亚洲午夜av久久乱码 | 久久久久久久一区二区三区 | 国产精久久久久久 | 亚洲欧美激情精品一区二区 | 国产精品久久久久久久久免费相片 | 免费成人高清在线视频 | 国产精品久久久久久238 | 国内自拍第一页 | 免费毛片网 | 神马久久香蕉 | 亚洲欧洲中文 | 成人aaa视频| 国产黄色大片 | 日韩成人在线看 | 一区二区视频在线观看 |