📄 ad0809.c
字号:
#include<AT89X52.H>
#include <intrins.h>
#define DSSJ 5000
#define uchar unsigned char
#define uint unsigned int
#define pindata P0 //AD数据口
sbit pina=P2^0; //
sbit pinb=P2^1; //
sbit pinc=P2^2; //
sbit pinstart=P2^5; //启动转换信号
sbit pinoe=P2^6;//输出允许信号,高电平有效
sbit pineoc=P2^7; //A/D转换结束信号,高电平时转换结束
uchar seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//A/D转换启动程序,参数address表示通道号
void PUTOUT (float dp);
void start_ad()
{
pina=1;
pinb=0;
pinc=0;//输入通道选择
pinstart=0;
pinstart=1;
pinstart=0;
}
//读取A/D转换后的 数据
uint read_ad(void)
{
uint temp;
pinoe=1;
while(!pineoc);
temp=pindata&0xff;
pinoe=0;
//等待A/D转换结束
return(temp);
}
void put(uchar ywsz,x)//写入一个数字
{
uchar i,ch;
if(x!=128)
ch=seg[ywsz];
else ch=seg[ywsz]+x;
for(i=0;i<8;i++)
{
P1_6=ch&0x01;
P1_5=0;
P1_5=1;
ch>>=1;
}
}
void PUTOUT (float dp)//显示6位数字
{
unsigned long zh2,b[6];
uint i,point,x=0;
zh2=dp;
if(zh2==0) zh2=1;
point=0;
while(zh2)
{zh2/=10;point++;} //确定小数点在第几位。
for(i=0;i<(6-point);i++)
dp*=10;
zh2=dp+0.5;//将dp去小数点,化整。
for (i=0;i<6;i++)
{ b[i]=zh2%10;
zh2/=10;
}//将zh2中四位数存放到b[]中。
P1_7=0;
for (i=0;i<6;i++)
{ if(i==(6-point)) x=128;
else x=0;
put(b[i],x);
//小数点修正。
}
}
uint timecount=0,i=0,k=1;//i用来记录1秒钟采样次数 ,k用来跳出循环
unsigned long dy=0;
void main(void)
{
TH1=(65536-DSSJ)/256;
TL1=(65536-DSSJ)%256;
ET1=1;//T1中断允许
EA=1; //总中断允许
TR1=1;
pindata=0xff;
while(k!=0)
{
i++;
start_ad();
dy+=read_ad() ; //读AD数据并给dy
//读数据并显示
}
}
void t1() interrupt 3//3*974+78us左右 定时1秒
{
float DY=0;
timecount++;
if(timecount==200) {
DY=dy/(i*51.0);
PUTOUT(DY);
timecount=0; i=0; dy=0; }
TH1=(65536-DSSJ)/256;
TL1=(65536-DSSJ)%256;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -