#include<at89x51.h>
//接口定义
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
unsigned int a;
unsigned long i;
unsigned char g,f,c,d,e,h,j,m,k;
unsigned char h1,h2,h3,h4,h5,h6,h7;
unsigned char code String0[]="F: Hz";
unsigned char code String1[]="T: . us";
//判断忙指令
void Busy()
{
RS=0;
RW=1;
do
{
P1=0xff;
E=0;
E=1;
P1&=0x80;
}
while(P1!=0);
}
//写指令程序
void Write_com( unsigned char com)
{
Busy();
RS=0;
RW=0;
E=1;
P1=com;
E=0;
}
//写数据程序
void Write_dat(unsigned char dat)
{
Busy();
RS=1;
RW=0;
E=1;
P1=dat;
E=0;
}
//清屏显示
void Clear()
{
Write_com(1);
}
//初始化
void Init()
{
Write_com(0x0c);//开显示,无光标显示
Write_com(0x06);//文字不动,光标自动右移
Write_com(0x38);//设置显示模式:8位2行5x7点阵
}
//显示一个字符子程序Dat表示显示字符的代码,a=0表示显示在第一行,a=1表示显示在第二行,i表示显示的位置i=0-15
void Display_One(bit a,unsigned char i,unsigned char Dat)
{
if(a)
Write_com(0xc0+i);
else
Write_com(0x80+i);
Write_dat(Dat+0x30);
}
//显示字符串子程序,a=0表示显示在第一行,a=1表示显示在第二行,i表示显示的起始位置i=0-15,j表示字符串的长度j=1-16,
//m=0表示选择字符串String0[],m=1表示选择字符串String1[].
void Display_String(bit a,unsigned char i,unsigned char j,bit m)
{
unsigned char k=0;
for(j;j>0;j--)
{
if(a)
Write_com(0xc0+i);
else
Write_com(0x80+i);
if(m)
Write_dat(String1[k]);
else
Write_dat(String0[k]);
k++;
i++;
}
}
//数据处理子程序
void Data_Processing()
{
if(P0_0==1)i+=16;
if(P0_1==1)i+=32;
if(P0_2==1)i+=64;
if(P0_3==1)i+=128;
if(P0_4==1)i+=256;
if(P0_5==1)i+=512;
if(P0_6==1)i+=1024;
if(P0_7==1)i+=2048;
if(P2_3==1)i+=4096;
if(P2_4==1)i+=8192;
if(P2_5==1)i+=16384;
if(P2_6==1)i+=32768;
if(P3_1==1)i+=65536;
if(P3_2==1)i+=131072;
if(P3_3==1)i+=262144;
if(P3_4==1)i+=524288;
if(P3_5==1)i+=1048576;
if(P3_6==1)i+=2097152;
if(P3_7==1)i+=4194304;
g=i/1000000;
f=i%1000000/100000;
c=i%100000/10000;
d=i%10000/1000;
e=i%1000/100;
h=i%100/10;
m=i%10;
//消除无用的0
if(g==0)
{
g=0x70;
if(f==0)
{
f=0x70;
if(c==0)
{
c=0x70;
if(d==0)
{
d=0x70;
if(e==0)
{
e=0x70;
if(h==0)
{
h=0x70;
}
}
}
}
}
}
if(i<16)h1=h2=h3=h4=h5=h6=0x70;
else
{
j=1000000%i*10/i;
k=1000000%i*10%i*10/i;
i=1000000/i;
h1=i/1000000;
h2=i%1000000/100000;
h3=i%100000/10000;
h4=i%10000/1000;
h5=i%1000/100;
h6=i%100/10;
h7=i%10;
}
//消除无用的0
if(h1==0)
{
h1=0x70;
if(h2==0)
{
h2=0x70;
if(h3==0)
{
h3=0x70;
if(h4==0)
{
h4=0x70;
if(h5==0)
{
h5=0x70;
if(h6==0)
{
h6=0x70;
}
}
}
}
}
}
}
void main()
{
Clear();
Init();
TMOD=0x20;
TL1=TH1=6;
TR1=ET1=1;
while(P3_0==1);
EA=1;
P2_7=0;
while(EA==1);
Data_Processing();
Display_String(1,0,16,1);
Display_String(0,0,16,0);
Display_One(0,7,g);
Display_One(0,8,f);
Display_One(0,9,c);
Display_One(0,10,d);
Display_One(0,11,e);
Display_One(0,12,h);
Display_One(0,13,m);
Display_One(1,4,h1);
Display_One(1,5,h2);
Display_One(1,6,h3);
Display_One(1,7,h4);
Display_One(1,8,h5);
Display_One(1,9,h6);
Display_One(1,10,h7);
Display_One(1,12,j);
Display_One(1,13,k);
while(1);
}
void t1() interrupt 3 using 0
{
a++;
if(a==4000)
{
EA=0;
P2_7=1;
}
}
pinlvji.rar_frequency meter_frequency proteus_频率计_频率计 proteus_频率
版权申诉
4 浏览量
2022-09-14
15:32:31
上传
评论
收藏 52KB RAR 举报
钱亚锋
- 粉丝: 88
- 资源: 1万+
评论0