打印

扫描太快,看不清楚

[复制链接]
2074|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大师,我最近在学动态显示,用的是两位的数码管写了一个0到99的程序,可是仿真起来,数字变化太快,请问应该怎么解决,是直接定时一秒吗?程序如下:#include<at89x52.h>
#include<intrins.h>
char code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};/*共阴数码管*/
unsigned char data led[]={0,0};/*用两个LED定义成一个数组,用来显示个位和十位*/
char code num1[]={0xfd,0xfe};
#define uint unsigned int
#define uchar unsigned char
uint count;
bit flag;
char tt;
  void delay(uint x)
{
    uchar i;
    while(x--)
   {
     for(i=120;i>0;i--);
   }
}

  void show()
{
   uint i;
   led[1]=count/10;
   led[0]=count%10;
   if(led[1]>9)led[1]=led[1]-10;
   if(led[1]==0)
   {led[1]=0x0a;}
  
   for(i=0;i<2;i++)
  {
    P0=num1[i];
P1=num[led[i]];
delay(20);
   
  }
}
   int time0()interrupt 1/*不能用UINT*/
{
  
   char time=0;
   TH0=-100000/256;
   TL0=-100000%256;
   
   count++;
   delay(20);

}
int main()
{  
   TMOD=0X01;
   TH0=-100000/256;
   TL0=-100000%256;
   TR0=1;
   EA=1;
   ET0=1;
  /* delay(100);*/
   while(1)
   {
     
   
   show();/*必须要,不要显示不了*/
}
}

截图00.jpg (71.8 KB )

截图00.jpg

相关帖子

沙发
a89982715| | 2010-6-26 09:09 | 只看该作者
定个时间后  在在中断里加个变量  在函数外累加 到1s后在送显示

使用特权

评论回复
板凳
xhtxzxw| | 2010-6-26 09:12 | 只看该作者
中断服务函数,不应该有返回类型
int time0()    interrupt 1/*不能用UINT*/  //int 也不能用吧?

使用特权

评论回复
地板
ayb_ice| | 2010-6-26 09:21 | 只看该作者
LS
KEIL会忽略中断返回值

使用特权

评论回复
5
一棵小草| | 2010-6-26 13:07 | 只看该作者
变化太快,那就用1s的。

但是,这个程序,作为学习还可以,作为工作肯定不行的。
刷新这个显示可以10ms作为间隔,10ms可以做很多任务了。。。
软延时如果大于10ms,就太耗CPU了。如果是6个数码管的话更。。。唉,都是程序结构的问题

使用特权

评论回复
6
ghostzzj|  楼主 | 2010-6-26 13:36 | 只看该作者
5# 一棵小草


嗯,这里还有一个问题,假如晶振是12M的,我的定时100MS,定时常数是不是TH0=100000/256和TL0=-100000%256;

使用特权

评论回复
7
ayb_ice| | 2010-6-26 14:01 | 只看该作者
12M晶振,最长定时65536*1US=65.536MS

使用特权

评论回复
8
ghostzzj|  楼主 | 2010-6-26 18:37 | 只看该作者
7# ayb_ice

额,让您见笑了,谢谢你

使用特权

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

本版积分规则

5

主题

34

帖子

1

粉丝