AD7705与C51程序Word下载.docx

上传人:b****1 文档编号:3764664 上传时间:2023-05-02 格式:DOCX 页数:13 大小:17.29KB
下载 相关 举报
AD7705与C51程序Word下载.docx_第1页
第1页 / 共13页
AD7705与C51程序Word下载.docx_第2页
第2页 / 共13页
AD7705与C51程序Word下载.docx_第3页
第3页 / 共13页
AD7705与C51程序Word下载.docx_第4页
第4页 / 共13页
AD7705与C51程序Word下载.docx_第5页
第5页 / 共13页
AD7705与C51程序Word下载.docx_第6页
第6页 / 共13页
AD7705与C51程序Word下载.docx_第7页
第7页 / 共13页
AD7705与C51程序Word下载.docx_第8页
第8页 / 共13页
AD7705与C51程序Word下载.docx_第9页
第9页 / 共13页
AD7705与C51程序Word下载.docx_第10页
第10页 / 共13页
AD7705与C51程序Word下载.docx_第11页
第11页 / 共13页
AD7705与C51程序Word下载.docx_第12页
第12页 / 共13页
AD7705与C51程序Word下载.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

AD7705与C51程序Word下载.docx

《AD7705与C51程序Word下载.docx》由会员分享,可在线阅读,更多相关《AD7705与C51程序Word下载.docx(13页珍藏版)》请在冰点文库上搜索。

AD7705与C51程序Word下载.docx

voidAD7705_Start();

voidAD7705_Read();

voidAD7705_Write_Reg(unsignedcharData_byte);

unsignedcharAD7705_Read_Reg();

main()

{

TMOD=0x11;

IT0=1;

PCON=0X00;

ET0=1;

TH1=0xFC;

TL1=0x17;

TR0=1;

EA=1;

P0=0xff;

P1=0xff;

P2=0xf7;

P3=0xff;

dis_digit=0x77;

dis_index=0;

Counter=0;

AD7705_Start();

while

(1)

while(AD7705_DRDY);

AD7705_Read();

Delayms(50);

}

voidDelayms(unsignedcharms)

//relayms

{unsignedchari;

while(ms--)

for(i=0;

i<

120;

i++);

voidAD7705_Start()

AD7705_Write_Reg(0x20);

AD7705_Write_Reg(0x0c);

AD7705_Write_Reg(0x10);

AD7705_Write_Reg(0x44);

/*****************************************/

voidAD7705_Read()

AD7705_Write_Reg(0x38);

MSB_Data=AD7705_Read_Reg();

LSB_Data=AD7705_Read_Reg();

T_Voltage=(unsingedint)MSB_Data;

T_Voltage=T_Voltage<

<

8;

T_Voltage=T_Voltage|(unsignedint)LSB_Data;

temp0=T_Voltage/100000;

temp1=((T_Voltage-temp0*100000)/10000);

temp2=((T_Voltage-temp0*100000-temp1*10000)/1000);

temp3=((T_Voltage-temp0*100000-temp1*10000-temp2*1000)/100);

temp4=(T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100)/10;

temp5=(T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100-temp4*10);

/*******************************************/

voidAD7705_Write_Reg(unsignedcharData_byte)

{

unsignedchari;

AD7705_CS=0;

AD7705_CLK=1;

_nop_();

for(i=0;

8;

i++)

AD7705_DATA=(bit)(Data_byte&

0x80);

AD7705_CLK=0;

AD7705_CLK=1;

Data_byte<

=1;

AD7705_CS=1;

unsignedcharAD7705_Read_Reg()

unsignedchari,Data_read;

Data_read<

Data_read|=(unsignedchar)AD7705_DATA;

_nop_();

AD7705_DRDY=1;

return(Data_read);

voidtime0(void)interrupt1

TR0=0;

P2=dis_digit;

//P2.7--DS8

P0=Display_code[dis_index];

TH0=0xFC;

TL0=0x17;

Counter++;

if(Counter==1)

dis_index=temp5;

}elseif(Counter==2)

dis_digit=0xb7;

dis_index=temp4;

}elseif(Counter==3)

dis_digit=0xd7;

dis_index=temp3;

}elseif(Counter==4)

dis_digit=0xe7;

dis_index=temp2;

、*********************************************************************************************************************************************************************************************************************************************

void 

reset_AD7705(void)

unsigned 

char 

i;

AD_DIN1;

for( 

i=0;

i<

36;

i++ 

AD_CLK0;

asm("

nop"

);

AD_CLK1;

_delay_ms

(2);

//通讯寄存器地址定义

#define 

WR_SETUP_REG 

0x10 

//选中写设置寄存器

RD_SETUP_REG 

0x18 

WR_CLOCK_REG 

0x20 

//选中写时钟寄存器

#defineRD_DATA_REG 

0x38 

//选中数据寄存器读

WR_OFFSET_REG 

0x60 

//选中写offset寄存器

RD_OFFSET_REG 

0x68 

//选中读offset寄存器

WR_FULL_REG 

0x70 

//选中写fullscale寄存器

RD_FULL_REG 

0x78 

//选中读fullscale寄存器

SYS_ZERO_CALI 

0x80 

//系统零校准模式

SYS_FULL_CALI 

0xC0 

//系统满量程校准模式

#defineZERO_CALIBRATION 

0x00//系统零校准

#defineFULL_CALIBRATION 

0x01//系统满量程校准

//CLOCK寄存器设置,无分频,50HZ输出更新速率

/88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888

ad7705.c//主程序

#include"

lcd1602.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitAD7705_DRDY=P3^2;

sbitAD7705_CS 

=P1^5;

//AD7705CS 

uintCounter="

0"

Counter1=0;

longintT_VoltageTotal=0;

uintT_Voltage=0,T_VoltageDel=0,T_VoltageQP=0,T_VoltageMax=0;

//现在值、中间处理值、去皮值,与最大值

unsignedcharMSB_Data,LSB_Data;

uchara[5]={0,0,0,0,0};

ucharb[5]={1,0,0,0,5};

//分别对应

ucharcoderow1[]={"

NOW:

*****g 

"

};

ucharcoderow2[]={"

MAX:

ucharrow1adr[16]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F};

//LCD地址

ucharrow2adr[16]={0x80+0x40,0x81+0x40,0x82+0x40,0x83+0x40,0x84+0x40,0x85+0x40,0x86+0x40,0x87+0x40,0x88+0x40,0x89+0x40,0x8A+0x40,0x8B+0x40,0x8C+0x40,0x8D+0x40,0x8E+0x40,0x8F+0x40};

uchari;

//定义变量

voidlcdscan();

//更新显示的数据

voidlcdscan1();

//初始化二行数据

//通道的初始化

//对转换数据进行处理

//对芯片写数据

//读取AD转换的数据

lcdrw=0;

//lcd写数据

lcdon();

//初始化LCD

lcdscan1();

IT1=0;

EX1=1;

P1=0xff;

P2=0xff;

P3=0xff;

Counter 

=0;

delay(200);

for(i=0;

10;

i++) 

//启动去皮

AD7705_Read();

T_VoltageTotal+=T_VoltageDel;

T_VoltageQP=(uint)(T_VoltageTotal/10);

//****************

T_VoltageTotal=0;

Counter1++;

if(Counter==8)

T_Voltage=(uint)(T_VoltageTotal/8);

T_Voltage-=T_VoltageQP;

if(T_Voltage>

63000)

T_Voltage=0;

T_VoltageMax)

T_VoltageMax=T_Voltage;

if(Counter1==160)

a[0]=(uchar)(T_Voltage/10000);

a[1]=(uchar)((T_Voltage-a[0]*10000)/1000);

a[2]=(uchar)((T_Voltage-a[0]*10000-a[1]*1000)/100);

a[3]=(uchar)((T_Voltage-a[0]*10000-a[1]*1000-a[2]*100)/10);

a[4]=(uchar)(T_Voltage-a[0]*10000-a[1]*1000-a[2]*100-a[3]*10);

b[0]=(uchar)(T_VoltageMax/10000);

b[1]=(uchar)((T_VoltageMax-b[0]*10000)/1000);

b[2]=(uchar)((T_VoltageMax-b[0]*10000-b[1]*1000)/100);

b[3]=(uchar)((T_VoltageMax-b[0]*10000-b[1]*1000-b[2]*100)/10);

b[4]=(uchar)(T_VoltageMax-b[0]*10000-b[1]*1000-b[2]*100-b[3]*10);

lcdscan();

Counter1=0;

Counter=0;

//******初始化LCD二行******//

voidlcdscan1()

//第一行

16;

i++)

lcdwrite(row1adr[i]);

lcdshuju(row1[i]);

delay(10);

//第二行

lcdwrite(row2adr[i]);

lcdshuju(row2[i]);

//***更新显示的数据***//

voidlcdscan()

//lcd写数据 

for(i=6;

11;

lcdshuju(a[i-6]+0x30);

delay

(1);

lcdshuju(b[i-6]+0x30);

AD7705_Write_Reg(0x7E);

/************对转换数据进行处理**********************/

T_VoltageDel=(uint)MSB_Data;

T_VoltageDel=T_VoltageDel<

T_VoltageDel=T_VoltageDel|LSB_Data;

voidEX0IN(void)interrupt2 

//去皮

T_VoltageMax=0;

voidtime0(void)interrupt3

TR0=1;

lcd1602//子程序

lcd_data 

P0

sbitlcdrs="

P2"

^5;

sbitlcdrw="

^6;

sbitlcden="

^7;

voiddelay(uintz)

uintx,y;

for(x=z;

x>

0;

x--)

for(y=255;

y>

y--);

}//1毫秒左右延时

//lcdwrite() 

LCD写指令

voidlcdwrite(ucharwrite)

lcdrs=0;

lcd_data=write;

lcden=1;

lcden=0;

//lcdshuju() 

LCD写数据

voidlc

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2