用中断 定时器什么的 为什么我测的跟我仪器发出的信号频率不一样 附上原代码
long count=0;
int i=0,x=0;
uint shu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar num;
void
time1_int(void) interrupt 3
{
TH1=TL1=0;
TR1=1;
x++;
}
void time0_int(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{
i=0;
TR1=0;
count=65536*x+TH1*256+TL1;
x=0;
TH1=TL1=0;
TR1=1;
}
}
void show()
{
// LcdWriteCom(0x83); LcdWriteData(0x66); Lcd1602_Delay1ms(5); //f
// LcdWriteCom(0x84); LcdWriteData(0x3d); Lcd1602_Delay1ms(5); //=
LcdWriteCom(0x85); LcdWriteData(shu[count/100000]); Lcd1602_Delay1ms(5);
LcdWriteCom(0x86); LcdWriteData(shu[(count/10000)%10]); Lcd1602_Delay1ms(5);
LcdWriteCom(0x87); LcdWriteData(shu[(count/1000)%10]); Lcd1602_Delay1ms(5);
LcdWriteCom(0x88); LcdWriteData(shu[(count/100)%10]); Lcd1602_Delay1ms(5);
LcdWriteCom(0x89); LcdWriteData(shu[(count/10)%10]); Lcd1602_Delay1ms(5);
LcdWriteCom(0x8a); LcdWriteData(shu[ count%10] ); Lcd1602_Delay1ms(5);
// LcdWriteCom(0x83); LcdWriteData(0x48); Lcd1602_Delay1ms(5); //H
// LcdWriteCom(0x83); LcdWriteData(0x7a); Lcd1602_Delay1ms(5); //Z
}
void main()
{
TMOD=0x51;
TH1=0X00;
TL1=0X00;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
LcdInit();
while(1)
{
show();
Lcd1602_Delay1ms(5);
}
}
1602显示没问题 大神们自动忽略 为什么显示的不对
把定时器设置为输入捕获模式,就能测频率和脉冲宽度啦!
一周热门 更多>