📄 adc.c
字号:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define IN0 XBYTE[0x9000]
#define W_C_GLCD XBYTE[0xA000]
#define W_D_GLCD XBYTE[0xA001]
#define R_B_GLCD XBYTE[0xA002]
#define R_D_GLCD XBYTE[0xA003]
//---------------------------------------------------
uchar code DHZTAB1[]={"A/D 197采样结果"};
uchar code DHZTAB2[]={"频率: HZ "};
uchar code DHZTAB3[]={"波峰: . V "};
uchar code DHZTAB4[]={"波谷: . V "};
//--------------------------------------------------
sbit bflag=ACC^7;
//--------------------------------------------------
void initial_GLCD();
void command_GLCD(uchar ord);
void chkbusy_GLCD();
void write_GLCD(uchar dat);
void delay1();
void displayF(unsigned long t);
void AD197();
void delay0();
uint idata a,b;
main()
{
uchar i=0,p,k;
uchar j,temp,firs;
uchar d0,d1,d2;
unsigned long xx,max,min,min1,count,F,x;
initial_GLCD();
//-------------------------------------------------------
temp=0x00;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB1[i]);
i++;
write_GLCD(DHZTAB1[i]);
i++;
}
i=0;
//------------------------------------------------------
temp=0x10;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB2[i]);
i++;
write_GLCD(DHZTAB2[i]);
i++;
}
i=0;
//------------------------------------------------------
temp=0x08;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB3[i]);
i++;
write_GLCD(DHZTAB3[i]);
i++;
}
i=0;
//------------------------------------------------------
temp=0x18;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB4[i]);
i++;
write_GLCD(DHZTAB4[i]);
i++;
}
i=0;
//-----------------------------------------------------
max=0;
count=0;
min1=0xFFFF;
TMOD=0x00;
TCON=0x00;
while(1)
{
AD197();
xx=a;
if(xx==0&&k==0)
{
TMOD=0x01;
TCON=0x10;
k=1;
}
if(xx<2048&&TR0==1)
{
if(k==1)
count--;
if(p==0)
count++;
p=1;
k=2;
}
if(xx>2048&&TR0==1)
{
if(p==1)
count++;
p=0;
k=2;
}
if(TF0==1)
{
TCON=0x00;
F=10000000*count/142213.12;
if(x==0)
x=F;
if(F!=x)
{
F=(x+F)/2;
displayF(F);
}
else
{
count=0;
k=0;
}
}
if(xx>=max&&xx<2048)
{
max=xx;
d0=max*5/2048;
d1=(max*50/2048)%10;
d2=(max*500/2048)%10;
temp=0x0c;
command_GLCD(temp|0x80);
firs=0x30+d0;
write_GLCD(firs);
temp=0x0d;
command_GLCD(temp|0x80);
firs=0x30+d1;
write_GLCD(firs);
firs=0x30+d2;
write_GLCD(firs);
}
if(xx<min1&&xx>=0xF800)
{
min1=xx;
min=0xFFFF-min1+1;
d0=min*5/2048;
d1=(min*50/2048)%10;
d2=(min*500/2048)%10;
temp=0x1b;
command_GLCD(temp|0x80);
firs=0x20;
write_GLCD(firs);
firs=0x2D;
write_GLCD(firs);
temp=0x1c;
command_GLCD(temp|0x80);
firs=0x30+d0;
write_GLCD(firs);
temp=0x1d;
command_GLCD(temp|0x80);
firs=0x30+d1;
write_GLCD(firs);
firs=0x30+d2;
write_GLCD(firs);
}
delay0();
}
}
//--------------------------------------
void AD197()
{
uchar xdata *ad_adr;
ad_adr=&IN0;
*ad_adr=0x4A;
delay0();
a=(uint)*ad_adr;
ad_adr++;
b=(uint)*ad_adr;
b=b*256;
a+=b;
}
//-----------------------------------
// 采样延时
//------------------------------------
void delay0()
{
uchar i;
for(i=0;i<100;i++)
{;}
}
//----------------------------------------
// LCD初始化
//----------------------------------------
void initial_GLCD()
{
command_GLCD(0x30);
delay1();
command_GLCD(0x30);
delay1();
command_GLCD(0x30);
delay1();
command_GLCD(0x06); //显示器控制:游标不显示;
delay1();
command_GLCD(0x01); //清屏幕
delay1();
command_GLCD(0x0c); //进入模式设定
delay1();
}
//--------------------------------------
// 写命令到GLCD
//--------------------------------------
void command_GLCD(uchar ord)
{
chkbusy_GLCD();
W_C_GLCD=ord;
}
//-----------------------------------
// 检查LCD忙标志
//-----------------------------------
void chkbusy_GLCD()
{
do{ACC=R_B_GLCD;}
while(bflag==1);
}
//----------------------------------
// 写数据到GLCD
//----------------------------------
void write_GLCD(uchar dat)
{
chkbusy_GLCD();
W_D_GLCD=dat;
}
//---------------------------------=
// 延时子程序
//----------------------------------
void delay1()
{
uchar i;
for(i=0;i<25;i++)
{;}
}
void displayF(unsigned long F)
{
uchar temp,firs;
uchar d0,d1,d2,d3;
d0=F/1000;
d1=(F/100)%10;
d2=(F/10)%10;
d3=F%10;
temp=0x13;
command_GLCD(temp|0x80);
firs=0x20;
write_GLCD(firs);
if(d0==0)
firs=0x20;
else
firs=0x30+d0;
write_GLCD(firs);
temp=0x14;
command_GLCD(temp|0x80);
firs=0x30+d1;
write_GLCD(firs);
firs=0x30+d2;
write_GLCD(firs);
temp=0x15;
command_GLCD(temp|0x80);
firs=0x2E;
write_GLCD(firs);
firs=0x30+d3;
write_GLCD(firs);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -