为什么四位数码管时钟亮度不同
显示的延时有问题,最亮的那位时间太长了,查一下显示程序的第一位和第四位的延时,可能没有设定好。至于时钟走的很快的问题,是你没算好数值的原故,可以下载“单片机小精灵”来帮忙。
只有一个数码管很亮,其他三个很暗,可以首先通过更换一个数码管来查看是不是数码管本身有问题,再判断四个共阳管脚与单片机连接的电路是否一样(P0口需要加上拉电阻的)
关于时钟走的快,不知道你有没有用DS1302,如果没有用的话,那可能是单片机的定时器程序没有写好
有空可以去小店看看
shop71676727.taobao.com/shop/view_shop.htm?tracelog=twddp
解决数码管亮度不均匀的办法:将数码管扫描放在定时器中断中,并且没进入一次定时器中断只点亮一个数码管。这样就保证了每个数码管的点亮时间相同,亮度也就一样了
亮度不同的问题解决了。可是时间走的还是快,为什么跟KEIL上调试不一样呢?
STC单片机是1T单片机 理论速度是普通51的12倍 实际测试结果大约在7倍左右 另外亮度温度应该是每个数码管发光的时间不一样,这个不能只看延时程序,你得每一步程序都是需要时间的,而且有得很长
哈哈,你说的有道理。实测结果大约是7.4倍左右。
可以给我一个解决数码管亮度不均匀的案例吗?
希望研究一下。
每个数码管扫描的时间不一样啊!
也不是所有情况都是这个原因。
当然可以。在中断程序中使用移位指令,将全局变量进行移位达到扫描的效果即可。
例如一个4位数码管的显示扫描可以这样
unsigned char code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~F,低位为a,阴码,不含高位小数点
unsigned charDIS_ROME[4]={0xc0,0xf9,0xa4,0xb0};//显示缓存区,对应4个数码管
unsigned charDISP=0;//缓存区指针
unsigned charSCANF=0x01;//扫描指针
void LED_SCAN(uchar dat)//位选扫描,高位点亮,仅低4位有效,最低位为LED4
{
LED1=0x01&dat; //定义数码管1的位选引脚为LED1,下同
LED2=0x02&dat;
LED3=0x04&dat;
LED4=0x08&dat;
}
void LED_DATA(uchar dat)//段选显示。低位为A,阴码
{
LEDA=0x01&dat; //定义数码管段选引脚为LEDA,下同
LEDB=0x02&dat;
LEDC=0x04&dat;
LEDD=0x08&dat;
LEDE=0x10&dat;
LEDF=0x20&dat;
LEDG=0x40&dat;
}
void Ddis() interrupt 3 //LED扫描
{
LED_SCAN(SCANF);
LED_DATA(DIS_ROME[DISP]);//送缓存
DISP++;
SCANF=_crol_(SCANF,1);
if(DISP==4)
{
DISP=0;
SCANF=0x01;
}
TH1=0xf0;
TL1=0x00;
}
应该是显示部分的小延时不均衡引起的
一.亮度不匀:1.软件对每位数码管的延时(刷新)不一致造成;2.硬件元件或电路有故障造成;3.数码管供电不足造成.
二.时钟走时不准是软件造成.中断重装数值不对,我有精准C语言程序,需要留言