这是另外一种写法,也不行。
#include<reg52.h>
#include <intrins.h>
#include <lcd1602.h>
#define uchar unsigned char
#define uint unsigned int
/******************ad7705 cmd*******************************************/
#define WR_REG 0x00
#define RD_REG 0x08
/******** reg adress*****************************/
#define CMD_REG 0x00
#define ST_REG 0x10
#define CLK_REG 0x20
#define DAT_REG 0x30
#define TS_REG 0x40
#define NO 0x50
#define OFFST_REG 0x60
#define GAIN_REG 0x70
/*****************************************/
sbit CS=P1^0;
sbit SCLK=P1^1;
sbit DI=P1^2;
sbit DO=P1^3;
sbit RESET=P1^4;
sbit DRDY=P1^5;
uchar data TimeNum[16]={48,48,48,48,48};
uchar data Test1[16]={" zczjxz "};
//sbit led0=P1^6;
//sbit led1=P1^7;
uint rec_data=0x0000;
uchar code seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay_ms(unsigned int x);
void ad7705_initial();
/******************************chip function*****************************/
void ad7705wr_reg(uchar reg,uchar value)
{
uchar adr,dat,i;
CS=1;
SCLK=1;
CS=0;
adr=WR_REG|reg;
for(i=0;i<8;i++)
{
SCLK=0;
DI= (adr&0x80); /**************发送高位****************/
SCLK=1;
adr<<=1;
}
CS=1;
dat=value;
CS=0;
for(i=0;i<8;i++)
{
SCLK=0;
DI=(dat&0x80); /**************发送高位****************/
SCLK=1;
dat<<=1;
}
CS=1;
}
/************************************/
uint ad7705rd_data()
{
uchar adr,i;
uint dat;
CS=1;
SCLK=1;
CS=0;
adr=0x38;
for(i=0;i<8;i++)
{
SCLK=0;
DI=(adr&0x80); /**************发送高位****************/
SCLK=1;
adr<<=1;
}
DI=1;
CS=1;
dat=0x0000;
CS=0;
for(i=0;i<16;i++)
{
SCLK=0;
dat<<=1;
//DI=0;
SCLK=1;
dat=(dat|DO); /****************低位采集数据向高位移位,移位15次将最低位从第一位移到第十六位******/
}
CS=1;
return(dat);
}
/**************************************************************/
void ad7705_initial()
{
RESET=0;
delay_ms(20);
RESET=1;
delay_ms(20); /****Active Channel is Ain1(+)/Ain1(-)****/
ad7705wr_reg(CLK_REG,0x0c); /*****master clock enabled, 4.9512MHz Clock, set output rate to 50Hz*****/
ad7705wr_reg(ST_REG,0x44);
}
/*************************************************************/
void init(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
//ES=1;
//EA=1;
}
/*************************************************************************/
void MCU_initial()
{
EX0=1;
IT0=1;
//ES=1;
EA=1;
}
/********************************************************/
void delay_ms(unsigned int x)
{
unsigned int i,j;
i=0;
for(i=0;i<x;i++)
{
j=108;
;
while(j--);
}
}
/*******************************************
void dis()
{
uchar j;
uint temp;
// EA=0;
temp=rec_data/10000;
P0=seg[temp];
P2=0xef;
for(j=0;j<10;j++)
{
_nop_();
}
temp=(rec_data%10000)/1000;
P0=seg[temp];
P2=0xf7;
for(j=0;j<10;j++)
{
_nop_();
}
temp=(rec_data%1000)/100;
P0=seg[temp];
P2=0xfb;
for(j=0;j<10;j++)
{
_nop_();
}
temp=(rec_data%100)/10;
P0=seg[temp];
P2=0xfd;
for(j=0;j<10;j++)
{
_nop_();
}
temp=rec_data%10;
P0=seg[temp];
P2=0xfe;
for(j=0;j<10;j++)
{
_nop_();
}
//EA=1;
}
/*************************************************/
void main()
{
uchar j=0;
//MCU_initial();
//init();
InitLcd();
DelayMs(15);
ad7705_initial();
ShowString(0,Test1);
//MCU_initial();
while(1)
{
//DelayMs(15);
ShowString(1,TimeNum);
if(!DRDY)
{
rec_data=ad7705rd_data();
TimeNum[0]=rec_data/10000+48;
TimeNum[1]=(rec_data%10000)/1000+48;
TimeNum[2]=(rec_data%1000)/100+48;
TimeNum[3]=(rec_data%100)/10+48;
TimeNum[4]=rec_data%10+48;
DelayMs(20);
}
}
}
/*void data_receive () interrupt 0
{
rec_data=ad7705rd_data();
TimeNum[0]=rec_data/10000+48;
TimeNum[1]=(rec_data%10000)/1000+48;
TimeNum[2]=(rec_data%1000)/100+48;
TimeNum[3]=(rec_data%100)/10+48;
TimeNum[4]=rec_data%10+48;
} */
|