haoDIY创好电子音响电脑科技DIY小制作发明移动版

主页 > 电子DIY > 收音 无线电 > 晶体管收音机 >

DIY数码管收音机,看全手工刀刻电路板过程(3)





收音机程序:


/////////////////////////////////////////////////////////////////////////////////////////////////////这
uchar code tab[]={0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0,0x7f};    //数码管段码表        /////些
sbit led1=P1^4;    //频率显示的数码管位选端口 100兆,P2.4端口                    /////是
sbit led2=P1^5;    //频率显示的数码管位选端口  10兆,P2.5端口                    /////端
sbit led3=P1^6;    //频率显示的数码管位选端口   1兆,P2.6端口                    /////口
sbit led4=P1^7;    //频率显示的数码管位选端口 0.1兆,P2.7端口                    /////,                                
sbit SDA=P3^2;    //接在TEA5767的数据端口                                /////可
sbit SCL=P3^1;    //接在TEA5767的时钟端口                                /////以    
sbit KEY1=P1^2;        //频率增加按键端口                            /////自
sbit KEY2=P1^1;        //频率减小按键端口                            /////行
#define duan P2    //频率显示的数码管段选P0端口                            /////修
/////////////////////////////////////////////////////////////////////////////////////////////////////改

//unsigned char radio_write_data[5]={0x33,0x8e,0x70,0x16,0x80};        //要写入TEA5767的数据,107.9M江苏旅游台
//unsigned char radio_write_data[5]={0x32,0x8e,0x70,0x16,0x80};        //要写入TEA5767的数据,105.8M 南京音乐台
//unsigned char radio_write_data[5]={0x31,0xd7,0x70,0x16,0x80};        //要写入TEA5767的数据,104.3M南京体育台
//unsigned char radio_write_data[5]={0x30,0x9a,0x70,0x16,0x80};        //要写入TEA5767的数据,101.7M南京经济台城市调频
unsigned char radio_write_data[5]={0x30,0x50,0x70,0x16,0x80};        //要写入TEA5767的数据,101.1M江苏交通广播网
//unsigned char radio_write_data[5]={0x2f,0xa5,0x70,0x16,0x80};        //要写入TEA5767的数据,99.7M江苏金色调频
//unsigned char radio_write_data[5]={0x2c,0xc9,0x70,0x16,0x80};        //要写入TEA5767的数据,97.5M江苏文艺台
//unsigned char radio_write_data[5]={0x2c,0xc9,0x70,0x16,0x80};        //要写入TEA5767的数据,93.7M江苏经济台居家广播
//unsigned char radio_write_data[5]={0x2b,0xb0,0x70,0x16,0x80};        //要写入TEA5767的数据,91.4M江苏广播
//unsigned char radio_write_data[5]={0x2a,0xe1,0x70,0x16,0x80};        //要写入TEA5767的数据,89.7M江苏音乐台


unsigned long frequency=101100;    //开机初始化的电台频率为101.1MHz
unsigned int pll=101100;        //计算频率合成时用的变量





void Delayus(unsigned char x)
{
for(;x>0;x--);
}

void iic_start()
{
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
SDA=0;
Delayus(4);
SCL=0;
Delayus(4);
}

void iic_stop()
{
SCL=0;
Delayus(4);
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SDA=1;
Delayus(4);
}

void iic_ack()
{
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
SDA=1;
Delayus(4);
}


bit iic_testack()
{
bit ErrorBit;
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
ErrorBit=SDA;
Delayus(4);
SCL=0;
return ErrorBit;
}

void iic_write8bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp>0;temp--)
{
  SDA=(bit)(input&0x80);
  Delayus(4);
  SCL=1;
  Delayus(4);
  SCL=0;
  Delayus(4);
  input=input<<1;
}
}


void delays (unsigned char b)    //按键消抖用的延时程序
{
  unsigned char i;
  for(b;b>0;b--)
  for(i=0;i<250;i++);
}

void radio_write(void)
{
    unsigned char i;
    iic_start();
    iic_write8bit(0xc0);        //TEA5767写地址
    if(!iic_testack())
    {
        for(i=0;i<5;i++)
        {
            iic_write8bit(radio_write_data);
            iic_ack();
        }
    }
    iic_stop();    
}


//将显示的频率算好后写到TEA5767芯片里面实现调节,不用考虑TEA5767用于搜台的相关位:SM,SUD
void search()
{        
    pll=(unsigned int)((float)((frequency+225))/(float)8.192);    //计算合成频率数据,频率单位:k
    radio_write_data[0]=pll/256;    //将算好的频率高位数据写入TEA5767
    radio_write_data[1]=pll%256;    //将算好的频率低位数据写入TEA5767
    radio_write_data[2]=0x70;        //这是TEA5767开立体声,关静音
    radio_write_data[3]=0x16;        //中国制式,采用32768晶振,软静音关,立体声消噪声开
    radio_write_data[4]=0x80;        //6.5M锁相环开,去加重时间75US
    radio_write();
}


void delay()
{
    uchar k;
    for(k=0;k<100;k++);
}

void desplay(uint aa)
{
    duan=tab[aa/1000]|0x80;     //关这位数码管的小数点
    led1=0;
    delay();
    led1=1;

    duan=tab[aa%1000/100]|0x80;     //关这位数码管的小数点
    led2=0;
    delay();
    led2=1;

    duan=tab[aa%100/10]&0x7f;    //点亮这位数码管的小数点
    led3=0;
    delay();
    led3=1;

    duan=tab[aa%10]|0x80;     //关这位数码管的小数点
    led4=0;
    delay();
    led4=1;
}




void main()
{
radio_write();        //写入初始化电台频率
while(1)
{
      if(!KEY1)     //手动设置频率,+0.1MHz;
      {
        delays(250); //延时消抖
        frequency+=100;
          if(frequency>108500)    //频率如果大于108.5MHz
          frequency=87500;    //频率设定为87.5MHz
      search();
    desplay(frequency/100);  //调用显示
      }

    if(!KEY2)         //手动设置频率,-0.1MHz;
    {
       delays(250); //延时消抖
       frequency-=100;
        if(frequency<87500)    //频率如果小于87.5MHz
        frequency=108500;    //频率设定为108.5MHz
    search();
    desplay(frequency/100);  //调用显示
    }
    desplay(frequency/100);  //调用显示

}


 
  (责任编辑:admin)
haoDIY创好电子 版权所有,电话微信13977534587