打印

电子钟数码管很闪

[复制链接]
4637|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myhmz|  楼主 | 2007-8-15 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
awey| | 2007-8-15 15:58 | 只看该作者

刷新频率太低了

使用特权

评论回复
板凳
gjg191| | 2007-8-15 16:00 | 只看该作者

dd

1秒钟至少要刷50次

使用特权

评论回复
地板
myhmz|  楼主 | 2007-8-15 16:02 | 只看该作者

怎么调高啊

用软件调频率吗?怎么调高啊?晶振是实验板上自带的11.059

使用特权

评论回复
5
gjg191| | 2007-8-15 16:04 | 只看该作者

dd

改软件啊,你程序执行一遍要多久总应该估算出来吧

使用特权

评论回复
6
coldra| | 2007-8-15 16:05 | 只看该作者

用单片机了吗?程序谁写的?

不行只有改硬件频率了

使用特权

评论回复
7
myhmz|  楼主 | 2007-8-15 16:11 | 只看该作者

我自己写的程序

我自己写的程序,在实验板上验证,硬件不能改啊。。。

使用特权

评论回复
8
救火车| | 2007-8-15 16:17 | 只看该作者

每秒钟刷新40遍以上。

你算一下,或跟踪一下。运行一个周期要多长时间。

使用特权

评论回复
9
myhmz|  楼主 | 2007-8-15 16:26 | 只看该作者

怎么跟踪

怎么跟踪啊。火兄!!

使用特权

评论回复
10
ayb_ice| | 2007-8-15 16:28 | 只看该作者

刷新程序最好放在中断中完成...

使用特权

评论回复
11
myhmz|  楼主 | 2007-8-15 16:31 | 只看该作者

程序,给诊断诊断

程序在这里啊?是用的中断
#include<at89x51.h>
#include<intrins.h>
#define  unchar unsigned char
#define  unint unsigned int
#define nop _nop_()
sbit clk=P2^0  ;
sbit din=P2^1    ;
sbit en=P2^2     ;
unchar dispbuf[9];
void delay(unint value)

    while(value!=0) value--;
                      }

unsigned char second,min,hou;
unsigned char keycnt;  
unsigned int tcnt;     

unchar keyscan()
{  unchar row,col,i;
   P1=0xf0;
  row=P1&0xf0;
  row=row&0xf0;
  P1=0x0f;
  col=P1&0x0f;
  col=col&0x0f;
  i=~(col|row);     
  return  i;} 

 void tsled(void)
{ unchar ts0,i,j;
  clk=0;
  en=0;
  delay(10);
    for(j=0;j<9;j++)
       {  ts0=dispbuf[j];
         
          for(i=0;i<4;i++)
           { clk=1;
              ts0=ts0<<1;
             if(AC==1)
                 din=1;
        else din=0;
                clk=0;
                nop;
                delay(3);
         }
         }
             en=1;

           }

void main(void) 
{                 
  unsigned char key; 
  TMOD=0x2;              
  ET0=1;  
  EA=1;   
  second=0; 
  dispbuf[2]=second/10; 
  dispbuf[1]=second%10; 
  while(1) 
       {
      if(keyscan()!=0)
          {    
             if(key!=keyscan())
               { P0=0xff;}
              key=keyscan();
                           
              switch(key) 
                {           
                  case 0x18:  
                    TH0=0x47;  
                    TL0=0x47; 
                    TR0=1;       
                    break;      
                  case  0x14: 
                    TR0=0; 
                    break; 
                  case  0x12:  
                    TR0=0;
                    keycnt=0; 
                    second=0; 
                    dispbuf[6]=0x0;
                   dispbuf[5]=0x0; 
                 dispbuf[4]=0x0;
                 dispbuf[3]=0x0;
                    dispbuf[2]=0; 
                    dispbuf[1]=0; 
                    break;     
            case 0x38:
                dispbuf[1]=dispbuf[1]+1;
                    break;
                case 0x34:
                dispbuf[2]=dispbuf[2]+1;
                break;


                    
                    
                    
                    
                    }
                    }   
          dispbuf[8]=0x1; 
          dispbuf[7]=0x01;
      dispbuf[0]=0x1;
        tsled();                                    
                }            
              
            }
  

void t0(void) interrupt 1 using 0 
{            
  tcnt++; 
  if(tcnt==5000) 
    {  
      tcnt=0; 
      second++; 
      if(second==60) 
        {   second=0;
           min++;
           
           if(min==60)
            {  min=0 ;
               hou++;
               if(hou==24)
                 { hou=0;}
                 }
                        
                 }          
      dispbuf[6]=hou/10; 
      dispbuf[5]=hou%10; 
       dispbuf[4]=min/10; 
      dispbuf[3]=min%10;
       dispbuf[2]=second/10; 
      dispbuf[1]=second%10;

    } 
     }







使用特权

评论回复
12
aloner| | 2007-8-15 17:36 | 只看该作者

晕哦,自己写的程序都不知道刷新频率?!!!

晕哦,自己写的程序都不知道刷新频率?!!!
是你写的吗?
我带毕业设计也不会给学生看程序的。

使用特权

评论回复
13
ayb_ice| | 2007-8-15 18:24 | 只看该作者

你的中断频率太快(5KHZ),浪费CPU时间太多...

而且你的显示部分并不在中断中完成的...

使用特权

评论回复
14
taoest| | 2007-8-16 00:37 | 只看该作者

刷新周期不固定

这个问题是刷新周期不固定引起的。
应该在中断中刷,时间间隔要固定。否则刷新频率再高也是闪。

使用特权

评论回复
15
wangkj| | 2007-8-16 10:34 | 只看该作者

我用at91rm9200 8*8点阵刷新到了50000次!

arm9太快了。

使用特权

评论回复
16
myhmz|  楼主 | 2007-8-16 10:40 | 只看该作者

采用MODE2

我用的是MODE 2方式自动装载,0.2us中断5000次,到1s,这样做不对吗?
还有一个问题就是时间走的不准,和电脑上比慢了,难道是初值的问题?

使用特权

评论回复
17
ayb_ice| | 2007-8-16 10:41 | 只看该作者

请问15L,你的50000次,那么每次点亮多长时间...

使用特权

评论回复
18
mxh0506| | 2007-8-16 12:33 | 只看该作者

这样的电子钟不会太准

玩一下就行了

使用特权

评论回复
19
wangkj| | 2007-8-16 14:33 | 只看该作者

时间很短,是个持续的循环

很容易计算出来的,不断的在循环。
这是我的一个测试程序。测试的时候,发现并行其他几个程序,
好像没啥慢的感觉。

使用特权

评论回复
20
myhmz|  楼主 | 2007-8-16 17:39 | 只看该作者

改为mode 1

改为MODE 1方式,初值:0xc400,50ms中断20次,到1s,又调试了一下,还是走慢了 ?不知道哪里出错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

41

帖子

0

粉丝