立即注册 登录
逆天PCB论坛 返回首页

jklooo的个人空间 https://bbs.ntpcb.com/?1571 [收藏] [复制] [RSS]

日志

AD574全12位转换原理图及转换函数

已有 958 次阅读2012-6-12 12:59 |个人分类:程序

[attachment=2142]

[table=938,#ffffff,,0][tr][td][align=left][color=#625b49]AD574[/color][color=#625B49][font=宋体]全[/font][/color][color=#625b49]12[/color][color=#625B49][font=宋体]位转换原理图[/font][/color][color=#625b49]:[/color][/align][align=left][size=1][color=#625b49][img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/02/clip_image001.jpg[/img][/color][/size][/align][align=left][color=#625B49][font=宋体]转换函数[/font][/color][color=#625b49]:[/color][/align][align=left][color=#625b49]//*********************************************/
/*     AD574[/color][color=#625B49][font=宋体]全[/font][/color][color=#625b49]12[/color][color=#625B49][font=宋体]位转换读数据函数[/font][/color][color=#625b49]   */
//[/color][color=#625B49][font=宋体]参考电压为芯片内部输出的[/font][/color][color=#625b49]10[/color][color=#625B49][font=宋体]电压[/font][/color][color=#625b49]    */
//[/color][color=#625B49][font=宋体]读写操作:[/font][/color][color=#625b49]         */
//[/color][color=#625B49][font=宋体]启动[/font][/color][color=#625b49]  A0=0,CS=0;RC=0;       */
//[/color][color=#625B49][font=宋体]读低四位[/font][/color][color=#625b49]CS=0;A0=1;RC=1;       */
//[/color][color=#625B49][font=宋体]读高四位[/font][/color][color=#625b49]CS=0;A0=0;RC=1;       */
/**********************************************/
#include "absacc.h"
#include "at89x51.h"[/color][/align][align=left][color=#625b49]#define uint unsigned int
#define uchar unsigned char
#define ADCOM XBYTE[0xff7c]   //[/color][color=#625B49][font=宋体]启动[/font][/color][color=#625b49]   A0=0,CS=0;RC=0;
#define ADLO XBYTE[0xff7f]   //[/color][color=#625B49][font=宋体]读低四位[/font][/color][color=#625b49] CS=0;A0=1;RC=1;
#define ADHI XBYTE[0xff7d]   //[/color][color=#625B49][font=宋体]读高四位[/font][/color][color=#625b49] CS=0;A0=0;RC=1;[/color][/align][align=left][color=#625b49]uchar code dis1[] = { 0x28, 0x7E,0xA2,     //[/color][color=#625B49][font=宋体]数码管显示代码[/font][/color][color=#625b49]
0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};[/color][/align][align=left][color=#625b49]sbit STS=P3^5;   //[/color][color=#625B49][font=宋体]转换标志位[/font][/color][color=#625b49][/color][/align][align=left][color=#625b49]//sbit wr=P3^7;   //WR
//sbit rd=P3^6;   //RD[/color][/align][align=left][color=#625b49]sbit sw=P3^3;   //[/color][color=#625B49][font=宋体]开始转换[/font][/color][color=#625b49][/color][/align][align=left][color=#625b49]uint temp;
uchar qian,bai,shi,ge;
uchar display_buf[3];
uint addate[7];
uint ad_team;[/color][/align][align=left][color=#625b49]void display(); //[/color][color=#625B49][font=宋体]转换读出[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]数据[/font][/color][color=#625b49]
/*****************************/
void delay(uint ms)[/color][color=#625b49] [/color][color=#625b49]
// [/color][color=#625B49][font=宋体]延时[/font][/color][color=#625b49]1MS
{
uchar i;
   while(ms--)
    for(i=0;i<125;i++);
}
/*****************************/
uint ad574()
{
ADCOM=0;
while(STS==1);
return((uint)(ADHI<<4)+(ADLO&0x0f));
}
/*****************************/
/*   display     */
/*****************************/
void display()
{
qian=temp/1000;   //2
bai=(temp-qian*1000)/100;
shi=(temp-qian*1000-bai*100)/10;
ge=temp-qian*1000-bai*100-shi*10;[/color][/align][align=left][color=#625b49]display_buf[0]=dis1[qian];
display_buf[1]=dis1[bai];
display_buf[2]=dis1[shi];
display_buf[3]=dis1[ge];[/color][/align][align=left][color=#625b49]P1=display_buf[0];
P2_0=0;
delay(2);
P2_0=1;[/color][/align][align=left][color=#625b49]P1=display_buf[1];
P2_1=0;
delay(2);
P2_1=1;[/color][/align][align=left][color=#625b49]P1=display_buf[2];
P2_2=0;
delay(2);
P2_2=1;[/color][/align][align=left][color=#625b49]P1=display_buf[3];
P2_3=0;
delay(2);
P2_3=1;
}[/color][/align][align=left][color=#625b49]/***********************/
main()
//[/color][color=#625B49][font=宋体]主函数[/font][/color][color=#625b49]
{
uint idata result;
uchar s;
temp=0;
ad_team=0;
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
EA=1;   //[/color][color=#625B49][font=宋体]开总中断[/font][/color][color=#625b49]
ET0=1;
TR0=1;
P0=0xff;
while(1)
   {
    if(sw==0)   //[/color][color=#625B49][font=宋体]按钮按下,执行[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]转换[/font][/color][color=#625b49]
    {
      delay(10);
      while(!sw);
       {[/color][color=#625b49] [/color][color=#625b49]
        for(s=0;s<8;s++)  //AD[/color][color=#625B49][font=宋体]采样[/font][/color][color=#625b49]8[/color][color=#625B49][font=宋体]次[/font][/color][color=#625b49]
         {[/color][color=#625b49] [/color][color=#625b49]
          temp=0;
         result=ad574();
         addate[s]=result;   //[/color][color=#625B49][font=宋体]采样数据保存[/font][/color][color=#625b49]
          delay(1);
         }[/color][color=#625b49] [/color][color=#625b49]
        for(s=0;s<8;s++)  //8[/color][color=#625B49][font=宋体]次[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]相加后除[/font][/color][color=#625b49]8[/color][color=#625B49][font=宋体]求平均[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]值[/font][/color][color=#625b49]
         {
         ad_team=ad_team+addate[s];
         }
        temp=(uint)ad_team/8;
        ad_team=0;
       }
    }

   }
}
/**********************************/[/color][/align][align=left][color=#625b49]void timer0() interrupt 1
//[/color][color=#625B49][font=宋体]定时中断用作显示[/font][/color][color=#625b49]AD[/color][color=#625B49][font=宋体]值[/font][/color][color=#625b49]
{
TH0=0xd8;
TL0=0xf0;
display();
}[/color][/align][/td][/tr][/table]

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
返回顶部