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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5609|回復: 7
收起左側

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

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

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

FM8000模塊(GS1615)制作FM發射機源程序中的SETCH()函數的講解:

根據頻率計算公式:freq=CH*0.05+76
模塊可發射的頻率范圍為76MHz-108MHz,對應CH的范圍為000-640
按二進制則為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(分別對應值0、256、512),存入寄存器00h中。上面藍色的要存入寄存器01h中, 你該理解為什么程序中有count-256、 count-512 語句了。

思考與改進
按鍵長按時頻率變化的能否更快?并且仍可以區別是長按或是短按。
按鍵長按時數碼管顯示的能否更穩定?
增加一個記憶功能,開機時自動調整到上次關機時的頻率,加24C01等,程序怎改

單片機源程序:
  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;   //小數點
  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.                 共陰數碼管段碼表 (按圖接法的編碼)**/
  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.                  共陰數碼管段碼表 (按圖接法的編碼)**/

  26. //----- 函數聲明-------------
  27. void FM8000_init(); //初始化函數
  28. void start();      //開始函數
  29. void stop();       //終止函數
  30. void respon();    //應答信號
  31. void write_byte(uchar);   //寫字節函數
  32. uchar read_byte();        //讀字節函數
  33. void write_add(uchar,uchar); //指定地址寫一字節數據
  34. uchar read_add(uchar);        //指定地址讀一字節數據
  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() //初始化函數
  56. {
  57. scl=1;
  58. delay();
  59. sda=1;
  60. delay();
  61. }

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

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

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

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

  83. void respon() //應答
  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)    //寫字節
  94. {
  95. uchar i,temp;
  96. temp=dat;
  97. for(i=0;i<8;i++)
  98. {
  99.    temp=temp<<1;    //循環右移
  100.    scl=0;
  101.    delay();
  102.    sda=CY;      //CY為進位標志
  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()            //讀字節
  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. //-----指定地址寫入一字節數據-------
  133. void write_add(uchar add,uchar dat)
  134. {
  135. start();                //開始
  136. write_byte(0x58);       //寫 器件地址及寫信號
  137. respon();     
  138. write_byte(add);        //寫字地址
  139. respon();
  140. write_byte(dat);        //寫數據
  141. respon();
  142. stop();                 //終止
  143. }
  144. //---------------------------------

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


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

  168. void delay10ms(void) //延時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對應76.0MHz,count=640對應108.0MHz,
  186.                                         {
  187.                                            count=0;
  188.                                         }
  189.                   }
  190.                   P0=0;     //寫入時關閉LED,使LED顯示亮度一樣
  191.                     SetCH();
  192.           do {display();}
  193.                   while(K2==0);   //等松手,此時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;     //寫入時關閉LED,使LED顯示亮度一樣
  211.                     SetCH();
  212.           do {display();}
  213.                    while(K1==0);   //等松手,此時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;     //寫入時關閉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;     //寫入時關閉LED,使LED顯示亮度一樣
  252.                     SetCH();
  253.                  //          while(K3==0);   //等松手
  254.            }
  255. }  


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

  257.                       顯示函數
  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;  //加小數點
  279.                                     }
  280.                                 else
  281.                                    {P0=table2[freq[7-i]];                               
  282.                                    if (i==6) DIN=1;  //加小數點
  283.                                    }
  284.                                 temp=temp+1;
  285.                                 if (i==4)P0=0;        //第5位不顯
  286.                                 for(a=10;a>0;a--)     //延時
  287.                                 for(b=248;b>0;b--);
  288.                           }
  289.         }
  290. }

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

  292.                   設置發射頻率
  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內部晶振設為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內部晶振設為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內部晶振設為12MHz,自己決定  
  320.                         delay_i2c(100);*/
  321.                 }

  322. ………………余下程序請下載附件……

復制代碼


0.png 0.png

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

評分

參與人數 2黑幣 +105 收起 理由
韓篤銘 + 5 贊一個!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美a在线| 成人av播放| 国产精品无码久久久久 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲精品一区二区三区中文字幕 | 精品一区二区三区在线视频 | 色噜噜色综合 | 成人字幕网zmw | 日韩精品极品视频在线观看免费 | 日本一卡精品视频免费 | 成人在线一区二区 | 四色永久 | 色婷婷综合网站 | 九九在线视频 | 中文字幕亚洲一区二区三区 | 成人中文网 | 国产免费高清 | 成人在线免费视频观看 | 国产精品乱码一二三区的特点 | 日本一区二区三区四区 | 国产精品不卡一区二区三区 | www.青青草 | 超碰97av| 97偷拍视频| 色婷婷av一区二区三区软件 | www.日本国产 | 人妖一区 | 久久高潮| 欧美猛交 | 精品二三区 | 欧美激情综合五月色丁香小说 | 国产精品18hdxxxⅹ在线 | 国产精品久久久久久久久久久久久久 | 亚洲狠狠爱 | 日本精品视频 | 丁香久久 | 欧美日韩综合一区 | 视频1区 | 美女毛片免费看 | 亚州国产 | 不卡视频在线 |