首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

请问,很简单的定时器刷新数码管显示程序,为什么不能从0-60依次显示

2013-03-01 
请教,很简单的定时器刷新数码管显示程序,为什么不能从0-60依次显示#include reg51.h#define uintunsigne

请教,很简单的定时器刷新数码管显示程序,为什么不能从0-60依次显示
#include <reg51.h>
#define uint  unsigned int
#define uchar unsigned char
sbit P15=P1^5;
sbit P20=P2^0;
sbit P21=P2^1;
uint  Count=0,Second=0;
uchar code   TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
uchar dis[]={1,2};
 
 void T0_init()
  { 
   TMOD=0x01;
   TH0=(65536-50000);
   TL0=(65536-50000);
   IE=0x82;
   TR0=1;
   }
   
 void  delay(uint x)
  { uint i,j;
   for(i=0;i<x;i++)
    for(j=0;j<120;j++);
  }

 void Time0(  ) interrupt  1
    {
   TH0=(65536-50000);
   TL0=(65536-50000);
   if(++Count==20)
{Count=0;
 Second++;
 if(Second==60)
  Second=0;
}
}


/* 显示函数*/
void display()
{
  uchar i,temp=0x01;  

  dis[1]=Second/10;   //取计数值的整数位
  dis[0]=Second%10;   //取计数值的余数位
       
  for(i=0;i<2;i++)           
{
P1=TAB[dis[i]];  
P2=temp;                     
delay(5);                      
P1=0xff;                   
P2=0xff;
temp<<=1;                     
}
}

 main()
 {
   void T0_init();
   while(1)
   {
    Display();
   }
 }
定时器
[解决办法]
粗看代码没发现什么问题,LZ还是说一下问题症状吧
[解决办法]
中断过程中的Second和Display()过程中的Second你做下同步处理,要不就把Display();放到中断里面显示。

热点排行