您的位置 首页 嵌入式

51单片机教程ADC0809模数转化

MCU:AT89S51晶振:12M采用查询方式读AD转换后的值includereg52h>includemathhincludeintrinshunsignedcharcode

//MCU:AT89S51

//晶振:12M

//选用查询方法读AD转化后的值

#include

#include “math.h”

#include “intrins.h”

unsigned charcode numcode[]={ 0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,

0xC1,0XB7,0xFF

};//数字0~9及”U=””“共阳数码管代码

unsigned charcode dot_numcode[]={0X40,0X79,0X24,0X30,0X19,

0X12,0X02,0X78,0X00,0X10

};//带数点的0~9共阳数码管代码

unsigned charcode bitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};//数码管位选代码

unsigned chardispbuff[8]={0,0,0,11,10,12,12,12};

unsigned chardisp_count;

unsigned charflag=1;

unsigned charflag_count;

unsigned long intgetdata;

sbit START=P3^0;

sbit EOC=P3^2;

sbit OE=P3^1;

sbit AD_ALE=P3^3;

voidmain(void)

{

TMOD=0x01;//挑选守时器T0,方法为1(16位守时器)

TH0=(65536-3000)/256;//守时3MS初值

TL0=(65536-3000)%6;

TR0=1;

ET0=1;

EA=1;

AD_ALE=0;

START=0;

OE=0;

while(1)

{

if(flag==1)//每隔40ms发动一次AD采样

{

flag=0;

AD_ALE=1;//锁存输入通道

START=0;//驱动AD转化

START=1;

AD_ALE=0;

START=0;//坚持低电平

while(EOC==0);//等候AD转化完毕

TR0=0;//AD转化完毕时先中止T0

P0=0XFF;//封闭数码管显现,呵呵,其实人眼是感觉不到数码管平息的

P1=0XFF;// 这个很重要

OE=1;//转化完毕,答应AD值输出

getdata=P1;//读出AD值,假如硬件连接上改成P2口来读AD值,这句就改成”getdata=P2;”

OE=0;//制止输出

getdata=(unsigned long int)((unsigned long int)(getdata*500)/255);//转化成电压

dispbuff[2]=getdata/100;

dispbuff[1]=(getdata0)/10;

dispbuff[0]=getdata;

TR0=1;//重新发动T0

}

}

}

voidt0(void) interrupt 1

{

TH0=(65536-3000)/256;

TL0=(65536-3000)%6;

if(disp_count==2)

P0=dot_numcode[dispbuff[disp_count]];

else

P0=numcode[dispbuff[disp_count]];

P1=bitcode[disp_count];

disp_count++;

flag_count++;

if(disp_count==8)

{

disp_count=0;

}

if(flag_count==100)

{

flag=1;

flag_count=0;

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/255818.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部