不能下载附件的请看这里:论坛限制流量,临时解决方法
返回列表 回复 发帖

大家帮我看看,为什么LED的显示的亮度不一样.

下面程序中,六个数码管中的1,2,3,4,5位显示得较暗,唯独第6位显示得很亮.如果改动红色标示的地方,可以使亮度均匀,但是RB1口上的按键不能按得太快.否则计数不能加1.应该如何解决呢?
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int

__CONFIG(0x3B31);
uchar key;    //键值暂存
void init();    //端口初始化子函数
void scan();     //健
void delay(uint a);   //延时子函数
void disp(uchar d1,uchar d2,uchar d3,uchar d4,uchar d5,uchar d6);
void count();    //加数
const uchar num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳0-f,"·""灭"段码
uchar cou[6]={0,0,0,0,0,0};//显示初始值
void main()
{
init();
while(1)
{
scan();
}
}

void init()  //初始化
{
ADCON1=0x07;  //A口为普通IO
TRISA=0;
TRISB=0xff;
TRISC=0;
PORTA=0;
PORTC=0xff;
OPTION=0x06;//RB弱上拉启用,并置TMR0分频比为1:128
INTCON=0xa0;
TMR0=160;//装入初始值
}

void scan()   //键扫描
{
if (RB1==0)
{
  delay(8);
  if (RB1==0)
  {
   count();
   while(!RB1);  //如果RB1口上的键按下去,则总是显示不变。
  }
}
}

void count()
{
uchar c;
cou[5]++;    //最低位+1
for (c=6;c!=0;c--)  //设C为LED位数(6位),从最右边位数开始,检测每位值是否>9
{
  if (cou[c]>9)   //如果数组cou的第c个元素>9
  {
   cou[c]=0;  //则将第c个元素清0
   cou[c-1]++;  //同时第c-1个元素加1
  }
}
}

void  disp(uchar d1,uchar d2,uchar d3,uchar d4,uchar d5,uchar d6)
{
PORTC=num[cou[0]];
PORTA=0xfd;
delay (1);
PORTC=num[cou[1]];
PORTA=0xfe;
delay (1);
PORTC=num[cou[2]];
PORTA=0xf7;
delay (1);
PORTC=num[cou[3]];
PORTA=0xfb;
delay (1);
PORTC=num[cou[4]];
PORTA=0xdf;
delay (1);
PORTC=num[cou[5]];
PORTA=0xef;
delay (1);
}

void delay(uint a)
{
uint b;
for (;a!=0;a--)
  for (b=100;b!=0;b--);
}

void interrupt time0()
{
T0IF=0;  //中断标志复位
TMR0=160;//装入初始值
disp(cou[0],cou[1],cou[2],cou[3],cou[4],cou[5]);
}


社区口号:开发路上不能单打独斗,帮助需要帮助的人,是对帮助过你的人最大的感谢!
循环显示一圈,最后一位显示时间最长(包括处理其他程序),当然显得“更亮”了
社区口号:开发路上不能单打独斗,帮助需要帮助的人,是对帮助过你的人最大的感谢!
返回列表