#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) |