我的定时器 怎么就启动不来(时间不走)?
好像是正常的设置所写的程序, 在PROTUSE里 数码管不变化, TR0=1怎么不能开启 错在哪里 请高手指点 谢谢
(其中的595程序 已经屏蔽, 好像不受影响的)
#include <reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1=P3^0;
sbit K2=P3^1;
sbit DS = P0^1;
//sbit STCP = P0^2;
//sbit SHCP = P0^0;
uchar unm1, h,m,second=0;
uchar code table1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳极数码表
//uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//------延时函数---------------
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*void In595(uchar num)
{
uint j;
for(j=0;j<8;j++)
{
num = num << 1;
DS = CY;
SHCP = 1;
SHCP = 0;
}
}
void Out595()
{
STCP = 0;
STCP = 1;
STCP = 0;
} */
//------初始函数--------------
void init()
{
TMOD=0x01;
TH0=(65536-38000)/256;
TL0=(65536-38000)%256;
EA=1;
ET0=1;
TR0=1;
}
//------T0中断函数-------------
void timer0() interrupt 1
{
TH0=(65536-38000)/256;
TL0=(65536-38000)%256;
unm1++;
if(unm1==16)
{
second++;
unm1=0;
if(second==60)
{
m++;
second=0;
if(m==60)
{
h++;
m=0;
if(h==24) h=0;
}
}
}
}
//-------数码管显示函数--------------
void disp_time(uchar h,uchar m)
{ P2=0xff;
P1=0xfe;
P2=table1[m%10];
delay(1);
P2=0xff;
P1=0xfd;
P2=table1[m/10];
delay(1);
P2=0xff;
P1=0xfb;
P2=table1[h%10];
delay(1);
P1=0xef;
P2=0xff;
P1=0xf7;
P2=table1[h/10];
delay(1);
}
//------ 按键调整分钟 时间函数----------------
void key()
{
if(K1==0)
{delay(2);
if(K1==0) m=m+1;
if(m==60) m=0;
delay(2);
while(!K1) ;
}
if(K2==0)
{ delay(2);
if(K2==0) h++;
if(h==24) h=0;
delay(2);
while(!K2);
}
}
//------------主函数-------------------
void main()
{
//uchar i ;
init();
m=0;
h=12;
second=0;
while(1)
{
disp_time( h, m);
key();
// for(i=0;i<8;i++)
// {
// In595(table[i]);
// delay(100);
// }
}
} |