
#include<reg52.h>
#include <intrins.h>
#include <math.h>
#include <旦汪stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_DATA P0
sbit lcd_flag=P0^7
sbit LCD_RS=P3^0
sbit LCD_RW=P3^1
sbit LCD_E=P3^3
sbit p32=P3^2
sbit ST=P2^3
sbit OE=P2^4
sbit EOC=P2^5
static long int counter
static long float f
float Vbuf=0,xy,tmp,flag=0
void lcd_delay(int ms) //延时函数
{
uchar i
while(ms--)
{
for(i=0i<250i++)
{
_nop_()_nop_()_nop_()_nop_()
}
}
}
bit lcd_busy()//判断是否忙碌 RS=Low,RW=High,E=High:读状态
{
bit flag
LCD_RS=0/宏氏/寄存器为Low
LCD_RW=1//是否读写为High
LCD_E=1 //使能端为High
if (lcd_flag==1) flag=1
else flag=0
LCD_E=0
return flag//返回标志,判断是否LCD忙碌
}
write_command(uchar command)//写指令时序
{ while(lcd_busy())
LCD_RS=0
LCD_RW=0
LCD_E=0
LCD_DATA=command
//delay_1ms(5)
LCD_E=1
LCD_E=0
}
write_data(uchar da) //写数据时序
{ while(lcd_busy())
LCD_RS=1
LCD_RW=0
LCD_E=0
// delay_1ms(5)
LCD_DATA=da
LCD_E=1
LCD_E=0
}
void LCD_INIT(void)
{ write_command(0x38)lcd_delay(1)//LCD为2行,5×7字
write_command(0x0c)lcd_delay(1)//打开显示,显示光标,光标模绝仔不闪
write_command(0x06) lcd_delay(1)//每次右移一字符
}
void main()
{
uchar i,j,n
uchar buff[16],buf[16]
LCD_INIT()
P2 &=0xf8
while(1)
{
flag++
if(flag >= 10)
{
ST = 0
OE = 0
ST = 1
ST = 0
if(EOC == 1)
{
OE = 1
xy = P1
OE =0
if(xy >tmp)
{
tmp = xy
Vbuf = xy*1.0/50
}
}
}
if(flag <10)
{
TMOD=0X09
TH0=0
TL0=0
while(p32==1)
TR0=1
while(p32==0)
while(p32==1)
TR0=0
}
counter=TH0*256+TL0
while(counter<=500) /*判断是否分频及计算分频次数*/
{
P2++
i++
counter=counter*10
if(i==2)
{
P2 &= 0xf8
break
}
}
f=(1843200.0/(2*counter))*pow(10,i)
sprintf(buf,"V=%4.2fv",Vbuf)
//if(f<1500) f = f / 1.3123
if(f<1000)
{
sprintf(buff,"f=%4.2fHZ",f)
}
else if(f<1000000)
{
f=f/1000
sprintf(buff,"f=%4.2fkHZ",f)
}
write_command(0x80)
for( j=0j<16&&buf[j] != '\0'j++)
{
write_data(buf[j])
}
write_command(0xc0)
for(n=0n<16&&buff[n]!='\0'n++)
{
write_data(buff[n])
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)