|  | 
          1楼
          巨大八爪鱼
          2013-8-10 18:52
          
          
            电路图和要点:   | 
    
      |  | 
          2楼
          巨大八爪鱼
          2013-8-10 18:53
          
          
            //程序://晶振:11.0592MHz
 #include
 <AT89X52.h> unsigned char code
 seg8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
 unsigned
 int number=1970;
 unsigned int interval=0;
 unsigned char point=0;
 //小数点的位置(从左数) sbit LED1=P2^7;
 sbit LED2=P2^6;
 sbit LED3=P2^5;
 sbit
 LED4=P2^4; //延迟n毫秒
 void delay(unsigned int n)
 {
 while
 (n--)
 {
 TH2=0xfc;
 TL2=0x66; //11.0592MHz
 //TL2=0x18;
 //12MHz
 TF2=0;
 TR2=1;
 while (TF2==0);
 TF2=0;
 }
 } void
 display_seg8()
 {
 bit display_zero=0; //是否是最高位的0
 LED1=1;
 if (point!=1
 && display_zero==0 &&
 number/1000==0)
 P0=0x00;
 else
 {
 P0=~seg8[number/1000]+(point==1)*0x80;
 display_zero=1;
 }
 delay(3);
 P0=0x00;
 LED1=0;
 LED2=1;
 if (point!=2 && display_zero==0 &&
 number%1000/100==0)
 P0=0x00;
 else
 {
 P0=~seg8[number%1000/100]+(point==2)*0x80;
 display_zero=1;
 }
 delay(3);
 P0=0x00;
 LED2=0;
 LED3=1;
 if (point!=3 && display_zero==0 &&
 number%100/10==0)
 P0=0x00;
 else
 {
 P0=~seg8[number%100/10]+(point==3)*0x80;
 display_zero=1;
 }
 delay(3);
 P0=0x00;
 LED3=0;
 LED4=1;
 P0=~seg8[number%10]+(point==4)*0x80;
 //末尾的0始终显示
 delay(3);
 P0=0x00;
 LED4=0;
 } void main()
 {
 EA=1;
 //开总中断
 TMOD=0x02; //定时器0为8位自动重装工作方式
 //TL0=TH0=0x06;
 //定时0.25ms
 TL0=TH0=0x19; //11.0592MHz晶振下定时0.25ms
 ET0=1; //开定时器中断
 TR0=1;
 //开定时器 T2MOD=0x01; //定时器2工作于16位查询工作方式
 TR2=0; P2=0x00;
 while
 (1)
 display_seg8();
 } void et0() interrupt
 1
 {
 //4次为1ms,4000次为1s
 interval++;
 if
 (interval>=4000)
 {
 interval=0;
 number++;
 if
 (number>9999)
 number=0;
 }
 }
 | 
    
      |  | 
          4楼
          巨大八爪鱼
          2013-8-10 18:56
          
          
            这是我焊的C51单片机最小系统:  
 
 | 
    
      |  | 
          5楼
          巨大八爪鱼
          2013-8-10 19:02
          
          
            在程序中,单片机的位选、段选都是高电平点亮,所以都两边得加上拉电阻。 段选端上拉电阻只需要200欧姆的排阻就可以了。 但位选上拉电阻接的太小的话会使三极管始终导通,单片机无法熄灭数码管,使动态扫描出错。所以应该接5KΩ左右的电阻,本人选择了5KΩ。 | 
    
      |  | 
          6楼
          巨大八爪鱼
          2013-8-11 15:24
          
          
            我看了我买的RZ-51开发板,每个I/O口(也就是从P0到P3)都接了A103J的上拉电阻(大小为10x10^3Ω也就是10kΩ的排阻)   所以还有一个更简单的方法解决共阴数码管很暗的问题:从P0到P3全部接上10kΩ的上拉电阻。 这样上面的电路图中就可以不接任何电阻了。直接I/O口接NPN三极管基极,发射极接地,集电极接位选,段选直接连P0。然后所有的I/O口接103排阻。 | 
    
      |  | 
          7楼
          巨大八爪鱼
          2013-8-11 15:34
          
          
            所以,以后接共阴数码管,只需要先在所有I/O口上接上103上拉电阻,然后按下面的电路连接数码管。
  当然如果你愿意,只在操作数码管的I/O口上接上拉电阻也行。 注意103的上拉电阻不能用221(即220欧)的电阻替代,上拉电阻接小了会导致单片机无法输出低电平,I/O口始终为高电平。我昨天就吃了这个亏。最后在P0上接了221的排阻,P2上接了5K+200的电阻,才算解决问题。实际上P0口最好也接5K或10K的电阻。 | 
    
      |  | 
          8楼
          125.46.34.*
          2015-7-8 11:02
          
          
            这个是测量什么的? | 
    
      |  | 
          9楼
          巨大八爪鱼
          2015-7-8 14:46
          
          
            回復:8樓 这个只是51单片机连接共阴数码管的一般方法。不测什么
 |