【求指点】下面的程序目的是实现从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--);
}
老大T1计数应该从P3_5输入,另外不要来回初始化,在主函数里把显示部分做完了就再次启动TR0\TR1.................
另外看不出你程序什么问题。
可以先给你的qian\shi\bai\ge赋值测试一下你的显示函数有什么问题没~