测量交流信号的频率
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;