#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sfr16 DPTR=0x82; uint aa,qian,bai,shi,ge,bb,bai1; uchar cout; unsigned long temp; unsigned long jieguo; uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void delay(uint z); void init(); void display(uint qian,uint bai,uint shi,uint ge); void xtimer0(); void xtimer1(); void xint0(); void main() { P0=0XFF; init(); while(1) { if(aa==19) { aa=0; TR1=0; //关闭T1定时器,定时1S完成 delay(46); //延时较正误差 TR0=0;//关闭T0 DPL=TL0; //计数量的低8位 DPH=TH0;//计数量的高8位 temp=DPTR+cout*65535; jieguo=temp/1000;//把频率缩小1000倍 qian=jieguo/1000;//显示千位 bai=jieguo/100;//显示百位 bai1=jieguo%100; shi=bai1/10;//显示十位 ge=bai1%10;//显示个位 } display(qian,bai,shi,ge); }
}
void init()//初始化 { temp=0; aa=0; IE=0X8A; TMOD=0x15; TH1=0x3c; TL1=0xb0; TR1=1; TH0=0; TL0=0; TR0=1; }
void display(uint qian,uint bai,uint shi,uint ge) {
P0=0xF7; P2=table[qian];//显示千位 delay(5); P0=0xFB; P2=table[bai];//显示百位 delay(3); P0=0xFD; P2=table[shi];//显示十位 delay(3); P0=0xFE; P2=table[ge];//显示个位 delay(3);
}
void xtimer1() interrupt 3 { TH1=0x3c; TL1=0xb0; aa++; }
void xtimer0() interrupt 1 { cout++;
}
void delay(uint z) { uint i,j; for(i=0;i<z;i++) for(j=0;j<110;j++); }
请问此程序有问题吗?
为什么用仿真软件仿真正常,烧写到单片机显示不正常(显示0000) |