老吴 发表于 2013-11-18 11:20

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

制作虽简单,工艺一样全。

先上主制板




从盒中拿出来看不同角度



此DIY有三块板合成





下面介绍手功制板步骤,一般分排、画、刻、钻、修、涂、焊几步
排是排版,先在纸上排好走线,尽量少挑线,要求美观艺术点,

画是画稿,把走线图用铅笔按纸上的图画在覆铜板上,(此过程没留图,反正也简单,就是同纸上的抄一边。这里有方法,可以把脚多的或元件位置定死的先钻眼定位。


上面是数码管,下面是按钮先定位钻孔,这样画稿就方便多了。




刻是刻线,用刀把画上的铅笔线刻掉,



钻是钻孔,先用冲子在覆铜面定位,再手钻打孔。

修是修理,把那些尖角、毛刺之类的修理整洁,并用砂纸打亮, 涂是用松香酒精液涂满两面,还有防潮的效果呵,



下楼继续

老吴 发表于 2013-11-18 11:22

以上三块覆铜板已变线路板,大家说的PCB。接下来是焊
先焊挑线





接着再焊























老吴 发表于 2013-11-18 11:24

接着再焊







最后发些DIY的副件






















http://img.mydigit.net/Mon_1311/76_781793_7951a3ba724e639.jpg?148

http://img.mydigit.net/Mon_1311/76_781793_be46646e6269cfb.jpg?128

老吴 发表于 2013-11-18 11:25

再来一张。。。。。。。



今日烧友为贴正名,谢之,为名副其实,补C 码一段。
段选P2口gfabced-dp.{0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0,0x7f}
位选:p1.2-p1.7.

#include<reg52.h>
sbit SEG1=P2^7;       //小数点显示
sbit SEG2=P1^2;         //段时十位
sbit SEG3=P1^3;         //时个
sbit SEG4=P1^4;         //分十
sbit SEG5=P1^5;         //分个
sbit SEG6=P1^6;         //秒十
sbit SEG7=P1^7;         //秒个
unsigned char code num[]={0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0,0x7f};
int s=0,m=0,h=0;//定义三个全局变量s,m,h,用于存放秒分时的数值
void timer(void) interrupt 1 using 1{
    int i;
    if(i==19)//若i=20,则是1秒,我的如果是20的话会稍慢,所以改为19
    {
      s++;   //秒数自加1
      i=0;    //对i清零   
    }   
    if(s==60)    //如果到了60秒,则对秒数清零,并同时分加一
    {
      m++;
      s=0;
    }
    if(m==60)//如果到了60分,则对分数清零,并同时时数加一
    {
      h++;   //时数自加1
      m=0;    //对分清零   
    }
    if(h==24)//如果到了24q时,则对时数清零
    {

      h=0;    //对时清零   
    }      
    i++; //每中断一次,i的值加1
    TH0=(65536-52800)/256;      //再给定时器赋初始值
    TL0=(65536-52800)%256;
}

void init(void)//定时器初始函数,对定时器初始化
{
    EA=1;                  //允许所有的中断请求
    TMOD=0x01;                //设定时器0的工作模式为方式1 即16位定时器
    ET0=1;                  //允许定时器0的中断请求
    TH0=(65536-52800)/256;    //定时时间为50ms,初始值要根据具体情况微调
    TL0=(65536-52800)%256;
    TR0=1;                  //打开定时器0,开始定时
}
void main()
{
    unsigned int i;      //定义一个变量,用于数码管延时
    init();            //调用定时器初始化函数,对定时器进行初始化
    while(1)            //死循环,让数码管不断显示
    {
//下面是只让时十位显示,其他的关闭
      i=100;                //赋值给变量
      SEG2=0;                //三极管导通,只让该位显示,其他段关闭
      P2=num;          //分离出时的十位,让数码管显示
      while(i--);            //延时一下,让眼睛视觉残留
      SEG2=1;                //关闭该位

//下面是只让钟个位显示,其他的关闭
      i=100;                //重新赋值给变量      
      SEG3=0;                //三极管导通,只让该位显示,其他段关闭
      P2=num;      //分离出时的个位,让数码管显示
      SEG1=0;             //在该位显示小数点
      while(i--);            //延时一下,让眼睛视觉残留
      SEG3=1;                //关闭该位
      SEG1=1;
    //下面是只让分十位显示,其他的关闭
      i=100;                //赋值给变量
      SEG4=0;                //三极管导通,只让该位显示,其他段关闭
      P2=num;          //分离出分的十位,让数码管显示
      while(i--);            //延时一下,让眼睛视觉残留
      SEG4=1;                //关闭该位

//下面是只让分个位显示,其他的关闭
      i=100;                //重新赋值给变量
      SEG5=0;                //三极管导通,只让该位显示,其他段关闭
      P2=num;      //分离出分的个位,让数码管的显示
      SEG1=0;             //在该位显示小数点
      while(i--);            //延时一下,让眼睛视觉残留
      SEG5=1;                //关闭该位
      SEG1=1;
//下面是只让秒十位显示,其他的关闭
      i=100;                //赋值给变量
      SEG6=0;                //三极管导通,只让秒十位显示,其他段关闭
      P2=num;          //分离出秒的十位,让数码管的显示
      while(i--);            //延时一下,让眼睛视觉残留
      SEG6=1;                //关闭该位

//下面是只让秒个位显示,其他的关闭
      i=100;                //重新赋值给变量
      SEG7=0;                //三极管导通,只让秒个位显示,其他段关闭
      P2=num;      //分离出秒的个位,让数码管显示
      while(i--);            //延时一下,让眼睛视觉残留
      SEG7=1;                //关闭该位
    }
}







收音机程序:


/////////////////////////////////////////////////////////////////////////////////////////////////////这
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={0x33,0x8e,0x70,0x16,0x80};      //要写入TEA5767的数据,107.9M江苏旅游台
//unsigned char radio_write_data={0x32,0x8e,0x70,0x16,0x80};      //要写入TEA5767的数据,105.8M 南京音乐台
//unsigned char radio_write_data={0x31,0xd7,0x70,0x16,0x80};      //要写入TEA5767的数据,104.3M南京体育台
//unsigned char radio_write_data={0x30,0x9a,0x70,0x16,0x80};      //要写入TEA5767的数据,101.7M南京经济台城市调频
unsigned char radio_write_data={0x30,0x50,0x70,0x16,0x80};      //要写入TEA5767的数据,101.1M江苏交通广播网
//unsigned char radio_write_data={0x2f,0xa5,0x70,0x16,0x80};      //要写入TEA5767的数据,99.7M江苏金色调频
//unsigned char radio_write_data={0x2c,0xc9,0x70,0x16,0x80};      //要写入TEA5767的数据,97.5M江苏文艺台
//unsigned char radio_write_data={0x2c,0xc9,0x70,0x16,0x80};      //要写入TEA5767的数据,93.7M江苏经济台居家广播
//unsigned char radio_write_data={0x2b,0xb0,0x70,0x16,0x80};      //要写入TEA5767的数据,91.4M江苏广播
//unsigned char radio_write_data={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=pll/256;    //将算好的频率高位数据写入TEA5767
    radio_write_data=pll%256;    //将算好的频率低位数据写入TEA5767
    radio_write_data=0x70;      //这是TEA5767开立体声,关静音
    radio_write_data=0x16;      //中国制式,采用32768晶振,软静音关,立体声消噪声开
    radio_write_data=0x80;      //6.5M锁相环开,去加重时间75US
    radio_write();
}


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

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

    duan=tab|0x80;   //关这位数码管的小数点
    led2=0;
    delay();
    led2=1;

    duan=tab&0x7f;    //点亮这位数码管的小数点
    led3=0;
    delay();
    led3=1;

    duan=tab|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);//调用显示
}
}

bidinghong 发表于 2013-11-18 12:00

大侠,高手,佩服

老吴 发表于 2013-11-18 12:04

回 bidinghong 的帖子

bidinghong:大侠,高手,佩服 (2013-11-18 12:00) images/back.gif

我也是转载的。不是我自己做的。

luojuan198780 发表于 2013-11-18 12:53

很好。。。。

yhsy110 发表于 2013-11-18 21:58

厉害,用刀刮得吧

sjl666518 发表于 2013-11-19 08:35

好有耐心呀

yangjing29 发表于 2013-11-19 09:08

这板子,做起来也太折腾人了,,
页: [1] 2 3
查看完整版本: DIY数码管收音机,看全手工刀刻电路板过程