搜索
bottom↓
回复: 3

动态扫描数码管亮度不够

[复制链接]

出0入0汤圆

发表于 2009-2-26 08:44:40 | 显示全部楼层 |阅读模式
如电路图接法:
采用共阴极接法驱动8位数码管,软件延时(1-3ms)动态扫描,但是亮度不够
增加延时亮度也不够,并且闪烁
请教可以用什么方法驱动?

出0入0汤圆

发表于 2009-2-26 15:05:53 | 显示全部楼层
减小数码管限流电阻的阻值,保证流过LED的电流大于5MA。

出0入0汤圆

发表于 2009-3-1 21:12:57 | 显示全部楼层
//A口为显示位输出,D口为断输出,B口为键盘输出。TEMO为20M秒中断显示兼扫描键盘
//C0为行程开光到为检测。C1为吸盘输出,C2为料电机输出。C3为报警音。C4为主电机
//C5为步进电机输出。C6为步进电机方向。C7待用。
//原理为复位后等待执行键。快速到达C0行程开光
#include<pic.h>
#include <pic1687x.h>
__CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

const char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};
char LED[6]={0,0,0,0,0,0,};    //显示BCD码
const  char jian[]=

{0X77,0Xb7,0Xd7,0Xe7,0X7b,0Xbb,0Xdb,0Xeb,0X7d,0Xbd,0Xdd,0Xed,0X7e,0Xbe,0Xde,0Xee};
int BCD1(int);                   //BCD吗转化程序。
void init();                   //申明I/O口初始化函数
int delay(int);                 //申明延时函数
void interrupt  ISR(void);      //中断
void jaye();                    //键盘翻译程序
char    xianshi, temp1,VA,A,B,C;         //VA为A口显示断位变量
int  temp;
//---------------------------------------

//---------------------------------------
//I/O口初始化函数
void init()
{
    ADCON1=7;              //设置A口为普通I/O口
    TRISA=0;               //设置A口为输出
    TRISD=0;               //设置D口为输出
    TRISC=0;
    TRISB=0XF0;
    OPTION=3;              //设置TMROD        定时器为1/16
    PORTC=0;                       
    PORTB=0XF0;             //B口高入低出   上拉电阻有效
    INTCON=0XA0;           //开放全局。TMR0,B口中断。
    TMR0=0XE;              //启动TMR0
    PORTD=0XFF;
    PORTA=0XFF;
    VA=1;  
}  

//--------------------------------------中断子程序
void interrupt  ISR(void)
{
   T0IF=0;       //清中断标志
   PORTD=0XFF;
   PORTA=~VA;
   PORTD=TABLE[LED[temp1]];
   VA=VA<<1;
   temp1++;
   if(VA==0X40) VA=1 ,temp1=0;
   if(PORTB==0XF0) xianshi=0,RC4=0;    // 检测B口有键按下否。
   else  xianshi++,RC4=1;
   TMR0=0X10;                 //启动TMR0
    }
//*******************************
//延时函数
int delay(int j)
{
   int i;
   for(i=0;i<j;i++);
}
//========================BCD吗转化程序

int  BCD1(int j)
  {   
      LED[1]=j/10000;
      LED[2]=(j/1000)%10;
      LED[3]=(j/100)%10;
      LED[4]=(j/10)%10;
      LED[5]=j%10;
   }
void jaye()   //==============键盘翻译函数
{  char j,i;
   i=(PORTB&0XF0);
   TRISB=0X0F;
   PORTB=0X0F;
   delay(5);
   i=(i|(PORTB&0XF));
   for(j=0;(j<16)&&(i!=jian[j]);j++);
   temp=j;
   TRISB=0XF0;
   PORTB=0XF0;
}
//主函数====================
main(void)
{  init();                //调用I/O口初始化函数
    while(RC2==0)
      {
       PORTC ^= (1<<RC7);
       delay(6000);
       if(xianshi>3) jaye();
       BCD1(temp);
      }
}
看看我的程序肯定够亮。看的我眼睛吃不消

出0入0汤圆

发表于 2009-3-4 20:19:24 | 显示全部楼层
如果电路没错的话,那可能就是动态扫描输出数据时原来的数据应清'0',这样就能解决闪烁.我一开始也碰到这个问题.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 15:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表