测量交流信号的频率

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define uint unsigned int

#define uchar unsigned char

sfr P1ASF = 0X9D; //P1口选择功能寄存器

sfr ADC_CONTR= 0XBC; //ADC控制寄存器

sfr ADC_RES = 0XBD; //ADC转换结果寄存器高sfr ADC_RESL = 0XBE; //ADC转换结果寄存器低sbit rs=P1^0;

sbit en=P1^1;

float result,max,v=5.00,result1,result2;

unsigned long q=0,fre;

uchar r[10],sta,p=0,i;

/*延时函数*/

void delay(uint z)

{

uint x,y;

for (x=0;x

for (y=0;y<140;y++);

}

void write_data(uchar shuju)

{

//rw=0;

rs=1;

P0=shuju;

delay(5);

en=1;

delay(5);

en=0;

}

void write_fre(unsigned long pin) //写入频率函数{

uchar ge ,shi,bai,qian,wan,shiwan;

ge=pin%10/1;

shi=pin%100/10;

bai=pin%1000/100;

qian=pin%10000/1000;

wan=pin%100000/10000;

shiwan=pin%1000000/100000;

write_data(shiwan+48);

delay(5);

write_data(wan+48);

delay(5);

write_data(qian+48);

delay(5);

write_data(bai+48);

delay(5);

write_data(shi+48);

delay(5);

write_data(ge+48);

delay(5);

}

void write_com(uchar com) //写命令函数{

rs=0;

P0=com;

delay(5);

en=1;

delay(5);

en=0;

}

void init_lcd()//初始化液晶

{

write_com(0x38);//显示设置模式// delay(5);

write_com(0x06);//数据指针加1

delay(5);

//write_com(0x01);//清屏函数

//delay(5);

write_com(0x0e);//显示光标

// delay(5);

write_com(0x80);

// delay(5);

}

void write_rank(float temp)

{

uint ranb;

uchar j;

temp*=10000;

ranb=(uint)temp;

r[0]='U';

r[1]='p';

r[2]=':';

r[3]=ranb/10000%10+48;

r[4]='.';

r[5]=ranb/1000%10+48;

r[6]=ranb/100%10+48;

r[7]=ranb/10%10+48;

r[8]=ranb%10+48;

r[9]='V';

write_com(0x80+0x40);

for(j=0;j<9;j++)

{

write_data(r[j]);

delay(5);

}

}

void init_timer0()

{

ET0=1; //打开定时器0中断

TMOD=0x01;; //设置为模式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256; //50MS

TF0=0;

}

void init_int0()

{

EA=1;//打开总中断

IT0=1; //设置外部中断0为边沿触发方式}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256; //50MS

++p;

}

void int0() interrupt 0

{

++q; //脉冲次数

}

/*AD设置函数*/

void ADC_init() //AD转换初始化

{

ADC_CONTR|=0X80; //打开ADC转换电源delay(5);

ADC_CONTR=0xef;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

void main()

{

init_lcd();

init_timer0();

while(1)

{

uint n=5000;

sta=0;

max=0;

while(n--)

{ //write_com(0x01);

ADC_init();

while(!(sta=ADC_CONTR&0x10));

//ADC_CONTR&=0x7f;

result1=ADC_RES;result2=ADC_RESL;

相关文档
最新文档