|
2芯积分
测电压频率,但这个程序只能测31Hz以上的,30Hz一下的,数码管显示是乱码。求大神帮忙,修改成可以测到30一下的,并且显示输出没乱码。
#include
unsigned char table[10]={0xc0,0xf9,0xa4
,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不带小数点
unsigned char table1[10]={0x40,0x79,0x24,
0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点
unsigned char count=0;
unsigned int s=0,flag=0,f;
float T;
bit key_f=0;
void interrupt time()
{
INT0IF = 0;//标志位清0
flag = !flag;//0,1
if(flag==1)
TMR1ON=1;//启动定时器
else
{
TMR1ON=0;//关闭定时器
T=(TMR1H*256+TMR1L)*1*0.000001;
TMR1L = 0X00;
TMR1H = 0X00;
f=1.0/T*10;
}
}
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=100;k>0;k--);
}
void init_int0()
{
INT0IF = 0; //未发生int0外部中断
INT0IE = 1;//使能中断
INTEDG0 = 1;//上升沿触发
}
void init_time1()
{
TMR1L = 0;
TMR1H = 0;
T1CON = 0X01;//定时,未启动
//TMR1IE = 1;
}
void display()
{
PORTE=0x00;
PORTD=table[f/100];
PORTE=0x01;
delay(10);
PORTE=0x00;
PORTD=table1[f%100/10];
PORTE=0x02;
delay(10);
PORTE=0x00;
PORTD=table[f%10];
PORTE=0x04;
delay(10);
}
void main()
{ TRISE = 0X00;// B口方向为输出
TRISD = 0X00;// D口方向为输出
ADCON0=0X07;
init_int0();
init_time1();
GIE = 1;//开中断总开关
PEIE=1;
PORTD=table[0];
while(1)
{
display();
}
}
|
|