#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=,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<z;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 () //写命令函数
{
rs=0;
;
delay(5);
en=1;
delay(5);
en=0;
}
void init_lcd()//初始化液晶
{
(0x38);//显示设置模式
// delay(5);
(0x06);//数据指针加1
delay(5);
//(0x01);//清屏函数
//delay(5);
(0x0e);//显示光标
// delay(5);
(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';
(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; //打开A
测量交流信号的频率 来自淘豆网www.taodocs.com转载请标明出处.