|
以下程序计数到0002时显示出错显8002,请问各位大虾错在哪里呢?
#include<AT89X51.H>
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
unsigned char int_time;
unsigned char second;
unsigned char minute;
void delay(void)
{
unsigned char i;
for(i=0;i<200;i++)
;
}
void DisplaySecond(unsigned char k)
{
P2=0x01; //P2.0 引脚输出低电平, DS6 点亮
P0=table[k/1000]; //显示千位
delay();
P2=0x02; //P2.1 引脚输出低电平, DS7 点亮
P0=table[k%1000/100]; //显示百位
delay();
P2=0x04; //P2.2 引脚输出低电平, DS6 点亮
P0=table[k%100/10]; //显示十位
delay();
P2=0x08; //P2.3 引脚输出低电平, DS7 点亮
P0=table[k%10]; //显示个位
delay();
P2=0x00; //关闭所有数码管
}
void main(void) //主函数
{
TMOD=0x01; //使用定时器T0
TH0=(65536-46083)/256; //将定时器计时时间设定为46083×1.085 微//=50000 微秒=50 毫秒
TL0=(65536-46083)%256;
EA=1; //开启总中断
ET0=1; //定时器T0 中断允许
TR0=1; //启动定时器T0 开始运行
int_time=0; //中断次数初始化
second=0; //秒初始化
while(1)
{
DisplaySecond(second); //调用秒的显示子程序
}
}
void interserve(void ) interrupt 1 using 1
{
TR0=0; //关闭定时器T0
int_time ++; //每来一次中断,中断次数int_time 自加1
if(int_time==1) //够20 次中断,即1 秒钟进行一次检测结果采样
{
second++; //秒加1
int_time=0; //中断次数清0
}
if(second==9999)
{
second =0; //秒等于9999 就返回0
}
TH0=(65536-46083)/256; //重新给计数器T0 赋初值
TL0=(65536-46083)%256;
TR0=1; //启动定时器T0
}
|
|