|

|
楼主
发表于 2010-2-1 13:00
| 只看该作者
大家帮我看看,为什么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]);
}
|
|
社区口号:开发路上不能单打独斗,帮助需要帮助的人,是对帮助过你的人最大的感谢! |