设置数码管闲事数值,设置当前位闪烁显示
最近想做个时钟,用的动态扫描数码管显示,段码部分用的IO口直接驱动,位选端口用的595,显示正常,但是现需要设置时间,想所需设置当前位闪烁,然后可加减,不知道该怎么做,有能指点的么。 你用动态扫描的话,你只需要改下延迟时间,其他位的延迟不变,只把你想要闪烁的那位显示延迟加长
试试吧,个人想法,没实践不知道行不行 扫描的时候是一起扫描的,如果加长了需闪烁的那位,那总体的时间不久变长了么,所有的都会闪烁了。
这是我现在的显示函数,不知道怎么修改,谢谢!
void display(void)
{
if(posit==24)
posit=0;
else
posit++;
switch(posit)
{
case0 : HC595_disp(0xFF,0xFF,0XFE);break;
case1 : HC595_disp(0xFF,0xFF,0XFD);break;
case2 : HC595_disp(0xFF,0xFF,0XFB);break;
case3 : HC595_disp(0xFF,0xFF,0XF7);break;
case4 : HC595_disp(0xFF,0xFF,0XEF);break;
case5 : HC595_disp(0xFF,0xFF,0XDF);break;
case6 : HC595_disp(0xFF,0xFF,0XBF);break;
case7 : HC595_disp(0xFF,0xFF,0X7F);break;
case8 : HC595_disp(0xFF,0xFE,0XFF);break;
case9 : HC595_disp(0xFF,0xFD,0XFF);break;
case 10 : HC595_disp(0xFF,0xFB,0XFF);break;
case 11 : HC595_disp(0xFF,0xF7,0XFF);break;
case 12 : HC595_disp(0xFF,0xEF,0XFF);break;
case 13 : HC595_disp(0xFF,0xDF,0XFF);break;
case 14 : HC595_disp(0xFF,0xBF,0XFF);break;
case 15 : HC595_disp(0xFF,0x7F,0XFF);break;
case 16 : HC595_disp(0xFE,0xFF,0XFF);break;
case 17 : HC595_disp(0xFD,0xFF,0XFF);break;
case 18 : HC595_disp(0xFB,0xFF,0XFF);break;
case 19 : HC595_disp(0xF7,0xFF,0XFF);break;
case 20 : HC595_disp(0xEF,0xFF,0XFF);break;
case 21 : HC595_disp(0xDF,0xFF,0XFF);break;
case 22 : HC595_disp(0xBF,0xFF,0XFF);break;
case 23 : HC595_disp(0x7F,0xFF,0XFF);break;
default:HC595_disp(0xFF,0xFF,0XFF);break;
}
}
void time_to_disbuffer(void)
{
unsigned chari,pos=0;
for(i=0;i<=11;i++)
{
disbuffer=time/10;
disbuffer=time%10;
}
PORTA=0XFF;
PORTA=led_7];
} 老老实实的向该位显示缓冲写0xff吧。 我现在显示为对time[]赋值后执行void display(void),void time_to_disbuffer(void),不知道如果想让time闪烁,而其余正常显示怎么做,能说的详细点么。
去看看我做的LED闹钟
http://www.amobbs.com/thread-5480294-1-1.html 设定位要闪烁,就是在动态扫描的时候,就是对该位进行显示关闭个大概250ms。然后再正常显示250ms.如此就可以看到该位闪烁了。
要是想闪的慢点,就时间再改长些。 假设time_to_disbuffer()为2mS刷新一次
void time_to_disbuffer(void)
{
uchar sszq; //闪烁周期
unsigned chari,pos=0;
for(i=0;i<=11;i++)
{
disbuffer=time/10;
disbuffer=time%10;
}
PORTA=0XFF;
PORTA=led_7];
if(++sszq>250)sszq=0; // 周期0.5S
if(posit==闪烁位 && sszq>125) PORTA=0XFF; // 后半周期,该位不显示
}
在你程序基础上小改一下。实现了之后,把程序大改一下,太原始了。 回复 zhanan
按照你提供的方法修改,所有的数码管都会闪烁。 drz123321 发表于 2012-10-17 22:25 static/image/common/back.gif
去看看我做的LED闹钟
你是建筑工人?盖楼的?
页:
[1]