This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
程序如下,我直接用LCD12864显示转换的结果
//main.c
#include "sys.h"
#include "usart.h"
#include "ads1118.h"
#include "lcd12864.h"
#include "delay.h"
int main(void)
{
ADS1118_Init();
LCD12864_Init();
delay_init(72);
while(1)
{
ADS1118_WriteBytes(0x85FB);
while(DOUT_Set);
LCD12864_Display_Integer(0,0,ADS1118_ReadBytes(),"7x8");
}
}
//ads1118.c
#include "ADS1118.h"
#include "stm32f10x.h"
#include "delay.h"
void ADS1118_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADS1118_CLOCK, ENABLE);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_ADS1118_CS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_SCLK;
GPIO_Init(GPIO_ADS1118_SCLK, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DIN;
GPIO_Init(GPIO_ADS1118_DIN, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DOUT;
GPIO_Init(GPIO_ADS1118_DOUT, &GPIO_InitStructure);
ADS1118_CS_1();
ADS1118_SCLK_1();
ADS1118_DIN_1();
}
void ADS1118_WriteBytes( u16 data)
{
u8 i = 16;
ADS1118_CS_0();
ADS1118_SCLK_1();
while(i--)
{
delay_us(10);
if(data&0x8000)
ADS1118_DIN_1();
else
ADS1118_DIN_0();
ADS1118_SCLK_0();
data <<= 1;
delay_us(10);
ADS1118_SCLK_1();
}
ADS1118_SCLK_1();
}
u16 ADS1118_ReadBytes( void )
{
u8 i = 16;
u16 data;
// if(DOUT_Set)
// return 0;
ADS1118_SCLK_0();
while(i--)
{
delay_us(10);
ADS1118_SCLK_1();
if(DOUT_Set)
data |= 1;
else data &= 0;
data <<= 1;
delay_us(10);
ADS1118_SCLK_0();
}
return data;
}
//ads1118.h
#ifndef _ADS1118_H
#define _ADS1118_H
#include "stm32f10x.h"
#define GPIO_ADS1118_CS GPIOA
#define GPIO_ADS1118_SCLK GPIOA
#define GPIO_ADS1118_DIN GPIOA
#define GPIO_ADS1118_DOUT GPIOA
#define Pin_ADS1118_CS GPIO_Pin_3
#define Pin_ADS1118_SCLK GPIO_Pin_0
#define Pin_ADS1118_DIN GPIO_Pin_1
#define Pin_ADS1118_DOUT GPIO_Pin_2
#define ADS1118_CLOCK (RCC_APB2Periph_GPIOA)
#define ADS1118_CS_1() GPIO_SetBits(GPIO_ADS1118_CS,Pin_ADS1118_CS)
#define ADS1118_CS_0() GPIO_ResetBits(GPIO_ADS1118_CS,Pin_ADS1118_CS)
#define ADS1118_SCLK_1() GPIO_SetBits(GPIO_ADS1118_SCLK,Pin_ADS1118_SCLK)
#define ADS1118_SCLK_0() GPIO_ResetBits(GPIO_ADS1118_SCLK,Pin_ADS1118_SCLK)
#define ADS1118_DIN_1() GPIO_SetBits(GPIO_ADS1118_DIN,Pin_ADS1118_DIN)
#define ADS1118_DIN_0() GPIO_ResetBits(GPIO_ADS1118_DIN,Pin_ADS1118_DIN)
#define ADS1118_DOUT_1() GPIO_SetBits(GPIO_ADS1118_DOUT,Pin_ADS1118_DOUT)
#define ADS1118_DOUT_0() GPIO_ResetBits(GPIO_ADS1118_DOUT,Pin_ADS1118_DOUT)
#define DOUT_Reset GPIO_ReadInputDataBit(GPIO_ADS1118_DOUT,Pin_ADS1118_DOUT)==RESET
#define DOUT_Set GPIO_ReadInputDataBit(GPIO_ADS1118_DOUT,Pin_ADS1118_DOUT)==SET
#define SingleSart 1<<15
#define FS_6114 0<<9
#define FS_4096 1<<9
#define FS_2048 2<<9
#define FS_1024 3<<9
#define FS_0512 4<<9
#define FS_0256 5<<9
#define ConMode 0<<8
#define SinMode 1<<8
#define Rate_8SPS 0<<5
#define Rate_16SPS 1<<5
#define Rate_32SPS 2<<5
#define Rate_64SPS 3<<5
#define Rate_128SPS 4<<5
#define Rate_250SPS 5<<5
#define Rate_475SPS 6<<5
#define Rate_860SPS 7<<5
#define TemMode 1<<4
#define ADCMode 0<<4
#define EN_Pullup 1<<3
#define Dis_Pullup 0<<3
#define Write_Config 1<<1
void ADS1118_WriteBytes( u16 data);
void ADS1118_Init(void);
u16 ADS1118_ReadBytes( void );
#endif
在main函数中
int main(void)
{
ADS1118_Init();
LCD12864_Init();
delay_init(72);
while(1)
{
ADS1118_WriteBytes(0x85FB);
while(DOUT_Set);
LCD12864_Display_Integer(0,0,ADS1118_ReadBytes(),"7x8");
}
}
加入 while(DOUT_Set); 发现直接卡住了
如果去掉 while(DOUT_Set); 用延时200ms来默认已经转换完成
发现输出结果很不稳定,是不是我软件的读写程序写错了?