打印

请教各位前辈:基于51单片机收音机的程序问题

[复制链接]
1197|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
辣条42|  楼主 | 2018-5-21 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上传了一个压缩包,里面有程序和原理图,程序有挺多不会的(请原谅我是小白一个),想有哪位前辈有空帮忙看看程序,然后在程序后面注释一下,主要是主程序,然后看不懂的还希望能问你,或者有哪位仁兄有兴趣可以一起交流讨论。

基于TEA5767的调频收音机设计.rar

84.6 KB

评论
xch 2018-5-30 18:05 回复TA
@辣条42 :你用示波器测量ALE脉冲,且用它做触发扫描,同时另外一路测量电源电压波形。就知道它干扰有多大了。 
辣条42 2018-5-30 14:13 回复TA
@xch :这个怎么说呢,方便解释一下吗,谢谢呢 
xch 2018-5-23 10:45 回复TA
你这51单片机干扰巨大,几乎无法使用。 

相关帖子

沙发
dirtwillfly| | 2018-5-21 19:35 | 只看该作者
楼主有什么问题,建议直接发到论坛
大家都很忙的,能有人闲得给你注释的可能非常微小

使用特权

评论回复
评论
辣条42 2018-5-22 09:36 回复TA
好的,这是我疏忽了,谢谢你的建议 
板凳
ljc424| | 2018-5-22 17:31 | 只看该作者
毕业生写的

使用特权

评论回复
地板
辣条42|  楼主 | 2018-5-28 09:14 | 只看该作者

是呀

使用特权

评论回复
5
ljc424| | 2018-5-28 13:33 | 只看该作者

我看了下,注释还算清晰,你看不懂的地方问吧

使用特权

评论回复
6
辣条42|  楼主 | 2018-5-30 14:13 | 只看该作者
ljc424 发表于 2018-5-28 13:33
我看了下,注释还算清晰,你看不懂的地方问吧

这两天理解一些了,我有问题在请教哈,谢谢呢

使用特权

评论回复
7
辣条42|  楼主 | 2018-5-30 14:22 | 只看该作者
辣条42 发表于 2018-5-30 14:13
这两天理解一些了,我有问题在请教哈,谢谢呢

能给我说下主程序的大概步骤吗?还有TEA5767这个工作原理,大概说一下我看看能不能理解呢

使用特权

评论回复
8
辣条42|  楼主 | 2018-5-30 15:05 | 只看该作者
ljc424 发表于 2018-5-28 13:33
我看了下,注释还算清晰,你看不懂的地方问吧

我还想问一下那串口通信是用来干什么的,是给上位机检测用的吗,还是怎样呢

使用特权

评论回复
9
ljc424| | 2018-6-1 14:12 | 只看该作者
本帖最后由 ljc424 于 2018-6-1 14:23 编辑
辣条42 发表于 2018-5-30 14:22
能给我说下主程序的大概步骤吗?还有TEA5767这个工作原理,大概说一下我看看能不能理解呢 ...
我QQ是283442309
先上电延时一段时间然后LCD的初始化和串口等初始化 写TEA5767配置和串口发送初始数据"TEA5767 FM \r\n\0"
主循环里面是显示字符界面(每次循环就刷一次数据有点浪费CPU)
接着就是一次扫描S1-S4这4个按键(扫描按键采用死等的方式如有有一个按键出问题整个系统就瘫痪了)
第378到383行代码就是一个频率数据的转换给下个周期显示用的
TEA5767是通过IIC通信的,至于配置就要查他的数据手册了,去找找这个数据手册里的频率转换公式和搜台的启动和停止标志位是哪位就好了 if (hlsi)
        pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768);    //频率单位:k
    else
        pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768);    //频率单位:k

这是频率转换成要写入的数据公式

使用特权

评论回复
10
辣条42|  楼主 | 2018-6-1 16:23 | 只看该作者
ljc424 发表于 2018-6-1 14:12
我QQ是283442309
先上电延时一段时间然后LCD的初始化和串口等初始化 写TEA5767配置和串口发送初始数据"TEA5 ...

QQ答案,我不知道,你说一下呗,谢谢,或者我的qq595229138

使用特权

评论回复
11
ljc424| | 2018-6-4 09:36 | 只看该作者
辣条42 发表于 2018-6-1 16:23
QQ答案,我不知道,你说一下呗,谢谢,或者我的qq595229138

void main(void)                               这里开始进入程序
{  
        Delay400Ms();                        这是上电先延时一下,让所有器件上电正常后配置通信
          LCMInit();                              这是1602显示初始化
        UART_Init();                          这是串口初始化
        radio_write();                        这里面自带了TEA5767的配置信息
        radio_read();                         读取TEA5767的状态信息及频率等等
        comm("TEA5767 FM \r\n\0");  这是通过串口发送数据,不知道他发送给干嘛用的
          while(1)
           {              
               
                DisplayListChar(2,0,"Digital Radio");           下面所有的Display都是在1602上面显示界面

                DisplayListChar(2,1,"FRE:");
                DisplayOneChar(6,1,dis_fre1+0x30);
                DisplayOneChar(7,1,dis_fre2+0x30);
                DisplayOneChar(8,1,dis_fre3+0x30);
                DisplayOneChar(9,1,dis_fre4);
                DisplayOneChar(10,1,dis_fre5+0x30 );
                DisplayListChar(11,1,"MHZ");

                  if(s1==0)                                         这里是S1按键的扫描
                  {
                           delay_ms(1);
                           if(s1==0)
                           {
                             while(s1==0);                       死等按键释放,所有如果这个按键短路就OVER了
                             search(0);                             下面是S1按键按下后的处理
                             //send_fre(frequency);
                                 send_readdata();
                           }
                  }

                  if(s2==0)                                           这里是S2按键扫描,结构同S1一样
                  {
                           delay_ms(1);
                           if(s2==0)
                           {
                                while(s2==0);
                            search(1);
                                //send_fre(frequency);
                                send_readdata();
                           }
                  }

                  if(s3==0)                                            这里是S3按键扫描,结构同S1一样
                  {
                           delay_ms(1);
                           if(s3==0)
                           {
                                 while(s3==0);
                                 auto_search(0);
                                 send_fre(frequency);
                           }
                  }

                  if(s4==0)                                            这里是S4按键扫描,结构同S1一样
                  {
                          delay_ms(1);
                           if(s4==0)
                           {
                                while(s4==0);
                                 auto_search(1);
                                 send_fre(frequency);
                           }
                  }

                  dis_fre=frequency/100;                            下面的是把频率做个转换以便下个循环给1602显示
                  dis_fre1=dis_fre/1000;
                  dis_fre2=dis_fre/100%10;
                  dis_fre3=dis_fre/10%10;
                  dis_fre4='.';
                  dis_fre5=dis_fre%10;

        }
                
}


通过S1-S4的处理函数及他的说明来看
S1按下的功能应该是手动下调频率
S2按下的功能应该是手动上调频率
S3按下的功能应该是自动向下搜台
S3按下的功能应该是自动向上搜台

使用特权

评论回复
评论
辣条42 2018-6-4 14:39 回复TA
嗯,都基本明白了,谢谢呢,还有就是说这个串口通信可有可无是吗 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

0

粉丝