仪器社区

【求指点】关于51系列单片机类似频率计的问题。见补充

玩心的爱啊 2011-03-22
【求指点】下面的程序目的是实现从P3.4口输入一个频率信号,然后从数码管上显示500ms内累计的脉冲数。但我下载到单片机后,数码管总显示8.8.8.8. 我的硬件是没问题的,因为用其他简单的程序测试过。求方外高人指点。 #include #define uint unsi... 【求指点】下面的程序目的是实现从P3.4口输入一个频率信号,然后从数码管上显示500ms内累计的脉冲数。但我下载到单片机后,数码管总显示8.8.8.8. 我的硬件是没问题的,因为用其他简单的程序测试过。求方外高人指点。 #include #define uint unsigned int #define uchar unsigned char uint count,opt; uchar aa,qian,bai,shi,ge,flag; sbit dula=P2^4; sbit wela=P2^5; uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; uchar code table1[]={ 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x78, 0x00,0x10,0x08,0x03, 0x46,0x21,0x06,0x0e}; void display(uchar qian,uchar bai,uchar shi,uchar ge); void measure(); void delay(uint z); void main() { while(1) { measure(); opt=count; display(qian,bai,shi,ge); qian=table[opt/1000]; bai=table1[opt%1000/100]; shi=table[opt%100/10]; ge=table[opt%10]; flag=0; } } void measure() { IE=0x8a;//开中断 TMOD=0x51;//T1计数,T0定时 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0,TL1=0; TR0=1,TR1=1; } void Timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(flag!=1) { if(++aa==10) {aa=0;
flag=1;
TR1=0,TR0=0;
DPL=TL1;
DPH=TH1;
count=DPH*256+DPL;
} } } void display(uchar qian,uchar bai,uchar shi,uchar ge) { dula=1; P1=table[qian]; dula=0; P1=0x00; wela=1; P1=0x01; wela=0; delay(1); dula=1; P1=table1[bai]; dula=0; P1=0x00; wela=1; P1=0x02; wela=0; delay(1); dula=1; P1=table[shi]; dula=0; P1=0x00; wela=1; P1=0x04; wela=0; delay(1); dula=1; P1=table[ge]; dula=0; P1=0x00; wela=1; P1=0x08; wela=0; delay(1); } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
评论
全部评论
PBFDWDC
老大T1计数应该从P3_5输入,另外不要来回初始化,在主函数里把显示部分做完了就再次启动TR0\TR1.................
另外看不出你程序什么问题。

可以先给你的qian\shi\bai\ge赋值测试一下你的显示函数有什么问题没~
18 0 2011-03-23 0条评论 回复
xxorockxxo
你难道没有发现,你的程序一遍又一遍地对定时器进行初始化?
16 0 2011-03-23 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论