找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3503|回复: 3
收起左侧

FM收音机+12864+TEA5767的单片机程序

[复制链接]
ID:202568 发表于 2018-12-6 11:01 | 显示全部楼层 |阅读模式
12864显示,fm收音模块文件!

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>




  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define max_freq 1080                           //最高频率
  6. #define min_freq 875                           //最低频率

  7. uchar data fm_w[5]={0x00,0x00,0x31,0x17,0x00};//这是要写入的数据
  8. uchar data fm_r[5]={0,0,0,0,0};               //这是放读出的数据


  9. //位定义说明:u:=1向上自动搜台反之。。。

  10. bit SM,SUD,RF,SystemError,u,SD,HISI=1,mode;

  11. uchar IF,ADC,STEREO,ADC1;
  12. uint fm,PLL,freq1;
  13. uint frequency=1049;

  14. //#include"FM_PLL.h"//这里包涵的是FM收音的PLL值

  15. sbit down =P1^1;  //频道下
  16. sbit up          =P1^2;  //频道上

  17. sbit menu =P1^0;
  18. sbit k3          =P1^1;
  19. sbit k4          =P1^2;

  20. sbit ok          =P1^3;



  21. sbit SDA=P2^6;
  22. sbit SCL=P2^7;

  23. sbit SDA1=P2^0;
  24. sbit SCL1=P2^1;

  25. uchar menu_bit=0;                //申请一下菜单的变量
  26. uchar ch=1;                                //申请一个频道号码变量
  27. uchar ch_max;                        //申请一个最大台号保存变量

  28. delayms(uint ms)
  29. {
  30.         uint i,j;
  31.         for(i=0;i<ms;i++)
  32.         for(j=0;j<123;j++);
  33. }



  34. void display();
  35. void key_search();
  36. void fm_xing();
  37. void search();
  38. void auto_search();
  39. void get_pll(void);
  40. void get_freq(void);



  41. void delay() //10ms定时器,晶振6M时
  42.   {  
  43.    TMOD=0x01;
  44.    TH0=0xEC;  //
  45.    TL0=0x78;
  46.    TR0=1;
  47.    do{}while(!TF0);
  48.    TF0=0;
  49.   }


  50. #include <LCD1602.h>           //包含的头文件
  51. #include"IIC.h"
  52. #include"IAP.h"
  53. #include"display.h"



  54. //由频率计算PLL
  55. void get_pll(void)
  56. {
  57.         unsigned long y=frequency;
  58.         PLL=((y*100+225)/8.192);
  59. }

  60. void get_freq(void)          //由PLL计算频率
  61. {
  62.         unsigned long y;
  63.         y=PLL;
  64.         freq1=(y*8192-225000)/100000+1;
  65. }


  66. void fm_xing()                                //FM收音芯片数据刷新一次
  67. {
  68.         write_5byte();                        //送入到5767里面
  69.         delayms(50);                        //送进PLL值后,要等50ms再去读TEA5767里面的数据
  70.         read_5byte();                        //读TEA5767的5个字节数据
  71. }

  72. //手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,
  73. //不用考虑TEA5767用于搜台的相关位:SM,SUD


  74. void search()
  75. {
  76. //给频率+/-1,
  77.       
  78.     if(mode)
  79.     {
  80.         frequency+=1;
  81.         if(frequency>max_freq)
  82.             frequency=min_freq;
  83.     }
  84.     else
  85.     {
  86.         frequency-=1;
  87.         if(frequency<min_freq)
  88.             frequency=max_freq;
  89.     }      
  90.         fm_xing();
  91.         key_display();                        //调用显示程序
  92. }

  93. //自动搜台,mode=1,频率增加搜台; mode=0:频率减小搜台
  94. void auto_search()
  95. {
  96.    do  
  97.    {

  98.     if(mode)
  99.         fm_w[2]=0xa0;                //增加频率搜索
  100.     else
  101.         fm_w[2]=0x20;                //减少频率搜索

  102.     search();                        //频率调整,+或-

  103.         fm_xing();

  104.         }

  105.         while((IF>0x3e)|(IF<0x31)|(ADC<5)|(!STEREO)|(!RF));     //搜台成功标志
  106. }

  107. /**********************************************************/

  108. void FM_init()
  109. {
  110.         uchar a1,a2;


  111.          ch=Byte_Read(0x401);          //读出上次播放时的台号
  112.          ch_max=Byte_Read(0x201); //读出保存的最高台号
  113.        
  114.        

  115.        
  116.         a1=Byte_Read(ch*3-1);
  117.     display();
  118.     a2=Byte_Read(ch*3);
  119.     display();


  120.        
  121.         PLL=a1*256+a2;                                        //
  122.        
  123.         get_freq();                                                //由PLL计算频率
  124.         frequency=freq1;

  125.         iicInit();
  126.         delayms(300);//等待电源稳定后再发数据
  127.        
  128.         if(frequency>max_freq,frequency<min_freq)
  129.         {
  130.                 frequency=min_freq;                                //防止出错
  131.         }
  132.        
  133.         fm_xing();                //给PLL写入TEA5767中,并读出其中的状态
  134.         display();                //调用显示程序
  135. }


  136. /**********************************************************/
  137. void main(void)
  138. {

  139.         init_12864();                // 初始化LCD
  140.         delayms(10);
  141.         write_code(0x0c);            //向右移动光标

  142.         write_code(0x91);
  143.         write_hz("FM载入中...");
  144.                                            //开机画面
  145.         delayms(500);                                //延时
  146.         write_code(0x01);                                //清屏
  147. ……………………

  148. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
FM收音机 12864 TEA5767.rar (8.33 KB, 下载次数: 87)


回复

使用道具 举报

ID:1 发表于 2018-12-6 16:44 | 显示全部楼层
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

ID:539878 发表于 2019-5-16 16:28 | 显示全部楼层
这个程序有问题!用不了
回复

使用道具 举报

ID:264021 发表于 2024-11-3 23:02 | 显示全部楼层
,程序不全
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表