yutianyiren 发表于 2012-10-17 15:59:00

设置数码管闲事数值,设置当前位闪烁显示

最近想做个时钟,用的动态扫描数码管显示,段码部分用的IO口直接驱动,位选端口用的595,显示正常,但是现需要设置时间,想所需设置当前位闪烁,然后可加减,不知道该怎么做,有能指点的么。

kevinstar888 发表于 2012-10-17 16:02:56

你用动态扫描的话,你只需要改下延迟时间,
其他位的延迟不变,只把你想要闪烁的那位显示延迟加长
试试吧,个人想法,没实践不知道行不行

yutianyiren 发表于 2012-10-17 16:05:44

扫描的时候是一起扫描的,如果加长了需闪烁的那位,那总体的时间不久变长了么,所有的都会闪烁了。
这是我现在的显示函数,不知道怎么修改,谢谢!
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];
}               

fulitun 发表于 2012-10-17 16:08:15

老老实实的向该位显示缓冲写0xff吧。

yutianyiren 发表于 2012-10-17 16:14:02

我现在显示为对time[]赋值后执行void    display(void),void    time_to_disbuffer(void),不知道如果想让time闪烁,而其余正常显示怎么做,能说的详细点么。

lcw_swust 发表于 2012-10-17 16:43:51

去看看我做的LED闹钟
http://www.amobbs.com/thread-5480294-1-1.html

tomy 发表于 2012-10-17 17:16:51

设定位要闪烁,就是在动态扫描的时候,就是对该位进行显示关闭个大概250ms。然后再正常显示250ms.如此就可以看到该位闪烁了。

要是想闪的慢点,就时间再改长些。

zhanan 发表于 2012-10-17 17:49:58

假设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;   // 后半周期,该位不显示

}         

在你程序基础上小改一下。实现了之后,把程序大改一下,太原始了。

yutianyiren 发表于 2012-10-18 08:58:17

回复 zhanan
按照你提供的方法修改,所有的数码管都会闪烁。

cqfeiyuxmj 发表于 2012-10-18 09:53:22

drz123321 发表于 2012-10-17 22:25 static/image/common/back.gif
去看看我做的LED闹钟

你是建筑工人?盖楼的?
页: [1]
查看完整版本: 设置数码管闲事数值,设置当前位闪烁显示