原创 FM调频收音机模块

2010-5-18 13:39 3858 3 3 分类: MCU/ 嵌入式

使用SP3767与LM4811做了一个收音机模块


博主在自己的430F449开发板上做成了此收音机,很是欣喜。


已经实现的功能:(充分利用开发板的键盘与显示资源)


四个按键分别是:电台的选择、加、减、音量与频率微调选择


液晶显示对应的音量与频率。


如果朋友有兴趣的话还可以实现:


利用开发板上的连接在ADC引脚上的电位器实现旋钮的加与减;


利用开发板上的8只发光二极管实现音量的实时显示。


大家能猜猜模块上的空缺IC是什么器件?


SP3767资料pdf        LM4811资料pdf  


 


点击看大图


 


点击看大图点击看大图


博主自己编写的代码:430程序


void main(void)
 {
  uchar i;
      WDTCTL = WDTPW + WDTHOLD; 
      FLL_CTL0 |=  XCAP18PF;   // DCO+ set so freq = xtal x D x N+1
    P2DIR &= ~0X0F ; //键盘
    P2IE  |= 0X0F ;
    P2IES  |= 0X0F ;
  P2IFG = 0 ;
  P1DIR = 0XFF ;
  P1OUT = 0XF0 ;
  radio_write();
  P3DIR |= BIT2+BIT3+BIT4 ;
  P3OUT = 0 ;
    LCDCTL = 0XFD;
    BTCTL =  BTFRFQ1;                      // STK LCD freq
    P5SEL =  0xFC;                         // Common and Rxx all selected


    for(i=0;i<20;i++)
     LCDMEM = 0 ;


    for(i=0;i<6;i++)
     asc_dis(i,i+'a');


    _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3, enable interrupts
 
   while(1)
  {
  // radio_write_data[1] =  radio_write_data[1] + 5 ;
  // if(radio_write_data[1] >= 250 )
   // {
   //  radio_write_data[1] = 0 ;
   //  radio_write_data[0] ++ ;
   // }
   radio_write();
   radio_read();
   char x = radio_read_data[3] >> 4 ;
   x ++ ;
   P3OUT |= BIT3 ;
   P3OUT ^= BIT2 ;


   delay(10000);
   
  }
 }


void key_p20(void)
 {
  float aa ;
  uint ff = 0 ,i ;
  if(key_fun == 0 )
   {
    key_fun = 0xff ;
    asc_dis( 0, 'v');
    asc_dis( 1, 'o');
    asc_dis( 2, 'l');
    asc_dis( 3, 'u');
    asc_dis( 4, 'm');
    asc_dis( 5, 'e');
    ff = vol ;
    clrlcd();
    for(i=0;i<2;i++)
     {
      LCDMEM[2+i]= distab[ff%10];
      ff = ff / 10 ;
     }
   }
  else
   {
    key_fun = 0 ;
    asc_dis( 0, ' ');
    asc_dis( 1, 'f');
    asc_dis( 2, 'r');
    asc_dis( 3, 'e');
    asc_dis( 4, 'q');
    asc_dis( 5, ' ');
    clrlcd();
    ff = radio_write_data[0] ;
    ff = ff << 8 ;
    ff = ff + radio_write_data[1] ;
    aa = ff ;
    aa = aa * 8.192   ;
    aa = aa /10 ;
    ff = aa ;
    for(i=0;i<5;i++)
     {
      LCDMEM[1+i]= distab[ff%10];
      ff = ff / 10 ;
     }
    LCDMEM[3] = LCDMEM[3] + 0X10 ;
   }  
 }


void key_p21(void) //+
 {
  float aa ;
  uint ff;
  uchar i;
  if(key_fun == 0 )
   {
    if(radio_write_data[1] >= 254 )
     radio_write_data[0] ++ ;
    radio_write_data[1] = radio_write_data[1] +5 ;
    radio_write();
    ff = radio_write_data[0] ;
    ff = ff << 8 ;
    ff = ff + radio_write_data[1] ;
    aa = ff ;
    aa = aa * 8.192   ;
    aa = aa /10 ;
    ff = aa ;
    for(i=0;i<5;i++)
     {
      LCDMEM[1+i]= distab[ff%10];
      ff = ff / 10 ;
     }
    LCDMEM[3] = LCDMEM[3] + 0X10 ;
   }
  else
   {
    P3OUT |= BIT3 ;
    P3OUT &= ~BIT2 ;
    P3OUT |= BIT2 ;
    vol++ ;
    if(vol > 32 )
     vol = 32 ;
    ff = vol ;
    clrlcd();
    for(i=0;i<2;i++)
     {
      LCDMEM[2+i]= distab[ff%10];
      ff = ff / 10 ;
     }
   }  
 }


void key_p22(void) //-
 {
  float aa ;
  uint ff;
  uchar i;
  if(key_fun == 0 )
   {
    if(radio_write_data[1] <= 2 )
     radio_write_data[0] -- ;
    radio_write_data[1] = radio_write_data[1] -5 ;
    radio_write();
    ff = radio_write_data[0] ;
    ff = ff << 8 ;
    ff = ff + radio_write_data[1] ;
    aa = ff ;
    aa = aa * 8.192   ;
    aa = aa /10 ;
    ff = aa ;
    for(i=0;i<5;i++)
     {
      LCDMEM[1+i]= distab[ff%10];
      ff = ff / 10 ;
     }
    LCDMEM[3] = LCDMEM[3] + 0X10 ;
   }
  else
   {
    P3OUT &= ~BIT3 ;
    P3OUT &= ~BIT2 ;
    P3OUT |= BIT2 ;
    vol-- ;
    if(vol <1)
     vol = 1;
    ff = vol ;
    clrlcd();
    for(i=0;i<2;i++)
     {
      LCDMEM[2+i]= distab[ff%10];
      ff = ff / 10 ;
     }
   }  
 }


void key_p23(void)
 {
  float aa ;
  uint ff;
  uchar i;
  key_fun = 0 ;
  asc_dis( 0, ' ');
  asc_dis( 1, 'f');
  asc_dis( 2, 'r');
  asc_dis( 3, 'e');
  asc_dis( 4, 'q');
  asc_dis( 5, ' ');
  radio_write_data[0] = nj_data[ key_ch * 2 ] ;
  radio_write_data[1] = nj_data[ key_ch * 2 + 1 ] ;
  radio_write();
  ff = radio_write_data[0] ;
  ff = ff << 8 ;
  ff = ff + radio_write_data[1] ;
  aa = ff ;
  aa = aa * 8.192   ;
  aa = aa /10 ;
  ff = aa ;
  for(i=0;i<5;i++)
   {
    LCDMEM[1+i]= distab[ff%10];
    ff = ff / 10 ;
   }
  LCDMEM[3] = LCDMEM[3] + 0X10 ;
  
  key_ch ++ ;
  if(key_ch >= 8 )
   key_ch = 0 ;
 }


#pragma vector="PORT2"_VECTOR
__interrupt void port1_ISR (void)
    {
   if((P2IN & 0X0F) != 0X0F) 
    {
     delay(1000);
     if((P2IN & 0X0F) != 0X0F)
      {
       if((P2IFG&0X0F)==BIT0)
        key_p20();
       if((P2IFG&0X0F)==BIT1)
        key_p21();
       if((P2IFG&0X0F)==BIT2)
        key_p22();
       if((P2IFG&0X0F)==BIT3)
        key_p23();
      }
    }
        P2IFG = 0 ;                 // Clear flag
    }

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条