定时计数器问题(秒表实验)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
int s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit key =P2^0;
sbit key1= P2^1;
void disp(int i,int j);
void delay(int a);
uchar xianshi=0, shijian=0;
void main()
{
TMOD=0x01; //定义定时器
TH0=0xFC; //定时器初值1ms
TL0=0x66;
TR0=1;//启动定时器
EA=1; //启动中断
ET0=1; //允许开启中断
while(1)
{
disp((xianshi/10),(xianshi%10));
if(xianshi==60)
{
xianshi=0;
}
}
}
void int_0() interrupt 1
{
shijian++;
if(shijian==1000) //加到1000不就是1S吗?为何加不到1000呢?到256就不会动了!
{
xianshi++;
}
TH0=0xFC;
TL0=0x66;
}
void disp(int i,int j)
{
key=1;
key1=0;
P1=s[j];
delay(10);
key=0;
key1=1;
P1=s[i];
delay(10);
}
void delay(int a)
{
int i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);
}
[解决办法]
if(shijian==1000) //加到1000不就是1S吗?为何加不到1000呢?到256就不会动了!
你看清楚你前面的定义uchar xianshi=0, shijian=0;
char类型最大是256,当然不会到1000了,应该定义成int类型的