#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define PA XBYTE[0x007c]
#define PB XBYTE[0x007d]
#define COM XBYTE[0x007f]
uchar code tab1[]="F:";
uchar code tab2[]="C:";
uchar disp1[]="0000HZ";
uchar disp2[]="0.00ms";
sbit key1=P1^6;
sbit key2=P1^7;
uchar count,i;
uchar time;
unsigned long freq;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;
void delay(uchar z) //延时函数
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void write_com(uchar com) //写命令
{
lcdrs=0;
PA=com;
delay(5);
lcden=1;
delay(2);
lcden=0;
}
void write_dat(uchar dat) //写数据
{
lcdrs=1;
PA=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd() //lcd初始化
{
lcden=0;
// lcdrs=0;
lcdrw=0;
write_com(0x38);/****工作方式设置***/
write_com(0x0c);/****显示状态设置***/
write_com(0x06);/****输入方式设置***/
write_com(0x01);/****清除屏幕显示***/
write_com(0x80);
}
void display() //显示函数
{
if(freq>0&&freq<10000)
{
disp1[0]=freq/1000+'0';
disp1[1]=freq/100%10+'0';
disp1[2]=freq/10%10+'0';
disp1[3]=freq/2%10+'0';
if(freq<1000)
{
disp2[0]=1000/freq+'0';
disp2[2]=10000/freq%10+'0';
disp2[3]=100000/freq%10+'0';
}
else
{
disp2[0]=1000/freq+'0';
disp2[2]=10000/freq+'0';
disp2[3]=100000/freq%10+'0';
}
write_com(0x82);
for(i=0;i<6;i++)
{
write_dat(disp1[i]);
delay(2);
}
write_com(0x80+0x42);
for(i=0;i<6;i++)
{
write_dat(disp2[i]);
delay(2);
}
}
}
void main()
{
COM=0x80;
init_lcd();
write_com(0x80);
for(i=0;i<2;i++)
{
write_dat(tab1[i]);
delay(5);
}
write_com(0x80+0x40);
for(i=0;i<2;i++)
{
write_dat(tab2[i]);
delay(5);
}
write_com(0x80+0x49);
TMOD=0x51; //T0定时,T1计数
TH1=0;
TL1=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
TR1=TR0=1;
}
}
else
{
display();
}
}
}
void timer0() interrupt 1 //T0中断,定时1s
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
TR1=0;TR0=0;
freq=(TH1*256+TL1);
// display();
TH1=0;TL1=0;
}
}
需要在LCD屏幕上在显示脉宽,格式为(m: )
来个大神啊
|