#include <stdio.h>
#include "STC15F2K60S2.H"
#include "ADS1256.h"
/*端口定义*/
sbit SCK = P1^2;
sbit DIN = P1^3;
sbit DOUT = P1^4;
sbit DRDY = P1^5;
sbit CS = P1^6;
#define CS_0() CS = 0
#define CS_1() CS = 1
#define SCK_0() SCK = 0
#define SCK_1() SCK = 1
#define ADS1256_DIN_0() DIN = 0
#define ADS1256_DIN_1() DIN = 1
#define ADS1256_DRDY DRDY
#define ADS1256_DOUT DOUT
void delay_ms(u16);
/*void Init_ADS1256_GPIO(void)
{
********************************************
提示:写单片机程序配置I/O口时要注意方向,
I/O口配置输出时推荐配置为推挽模式,有些老
的51单片机没有推挽模式,推荐加 1K上拉电阻.
********************************************
P1M1 = 0;
P1M0 =0x4C; //配置 I O
CS_1();
}*/
static void ADS1256_DelaySCLK(void)
{
unsigned short i;
/*
取 5 时,实测高电平200ns, 低电平250ns <-- 不稳定
取 10 以上,可以正常工作, 低电平400ns 高定400ns <--- 稳定
*/
for (i = 0; i < 20; i++);
}
/*
*********************************************************************************************************
* 函 数 名: SPI_WriteByte
* 功能说明: 向SPI总线发送8个bit数据。 不带CS控制。
* 形 参: _data : 数据
* 返 回 值: 无
*********************************************************************************************************
*/
void SPI_WriteByte(unsigned char TxData)
{
unsigned char i;
/* ADS1256 要求 SCL高电平和低电平持续时间最小 200ns */
for(i = 0; i < 8; i++)
{
if (TxData & 0x80)
ADS1256_DIN_1();
else
ADS1256_DIN_0();
SCK_1();
//ADS1256_DelaySCLK();
TxData <<= 1;
SCK_0(); /* <---- ADS1256 是在SCK下降沿采样DIN数据, 数据必须维持 50nS */
//ADS1256_DelaySCLK();
}
}
/*
*********************************************************************************************************
* 函 数 名: SPI_ReadByte
* 功能说明: 从SPI总线接收8个bit数据。 不带CS控制。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
unsigned char SPI_ReadByte(void)
{
unsigned char i;
unsigned char read = 0;
//ADS1256_DelaySCLK();
/* ADS1256 要求 SCL高电平和低电平持续时间最小 200ns */
for (i = 0; i < 8; i++)
{
SCK_1();
ADS1256_DelaySCLK();
read = read<<1;
SCK_0();
if (ADS1256_DOUT)
{
read++;
}
ADS1256_DelaySCLK();
}
return read;
}
//-----------------------------------------------------------------//
// 功 能:ADS1256 写数据
// 入口参数: /
// 出口参数: /
// 全局变量: /
// 备 注: 向ADS1256中地址为regaddr的寄存器写入一个字节databyte
//-----------------------------------------------------------------//
void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
{
CS_0();
while(ADS1256_DRDY);//当ADS1256_DRDY为低时才能写寄存器
//向寄存器写入数据地址
SPI_WriteByte(ADS1256_CMD_WREG | (regaddr & 0x0F));
//写入数据的个数n-1
SPI_WriteByte(0x00);
//向regaddr地址指向的寄存器写入数据databyte
SPI_WriteByte(databyte);
CS_1();
}
//初始化ADS1256
void ADS1256_Init(void)
{
//*************自校准****************
while(ADS1256_DRDY);
CS_0();
SPI_WriteByte(ADS1256_CMD_SELFCAL);
while(ADS1256_DRDY);
CS_1();
//**********************************
ADS1256WREG(ADS1256_STATUS,0x06); // 高位在前、校准、使用缓冲
// ADS1256WREG(ADS1256_STATUS,0x04); // 高位在前、不使用缓冲
// ADS1256WREG(ADS1256_MUX,0x08); // 初始化端口A0为‘+’,AINCOM位‘-’
ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_1); // 放大倍数1
ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS); // 数据5sps
ADS1256WREG(ADS1256_IO,0x00);
//*************自校准****************
while(ADS1256_DRDY);
CS_0();
SPI_WriteByte(ADS1256_CMD_SELFCAL);
while(ADS1256_DRDY);
CS_1();
//**********************************
}
//读取AD值
signed long ADS1256ReadData(unsigned char channel)
{
signed long sum=0;
char i;
unsigned long r=0;
while(ADS1256_DRDY);//当ADS1256_DRDY为低时才能写寄存器
ADS1256WREG(ADS1256_MUX,channel); //设置通道
CS_0();
SPI_WriteByte(ADS1256_CMD_SYNC);//外同步AD信号,启动转换
SPI_WriteByte(ADS1256_CMD_WAKEUP);//完成同步并退出待机模式
while(ADS1256_DRDY);
SPI_WriteByte(ADS1256_CMD_RDATA);
delay_ms(1);
for(i=0;i<3;i++)
{
sum = sum << 8;
r = SPI_ReadByte();
sum |= r;
}
CS_1();
if (sum>0x7FFFFF) // if MSB=1,
{
sum -= 0x1000000; // do 2's complement
}
return sum;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
STC15F2K60S2单片机读写ADS1256并LCD1602显示驱动程序源码,可以做为你的学习设计参考。 void main() { signed long Adc; float Volts; DelayMs(50); ADS1256_Init(); //ADS1256 参数初始化 LCD_Init(); while(1) { Adc = ADS1256ReadData( ADS1256_MUXP_AIN0|ADS1256_MUXN_AINCOM); Volts = Adc*0.00059453; // 0.00000059453 为系数,ADC生产出后都有一定的偏差,在此校准。 display_num4(LINE1_COLUMN(1),Volts); delay_ms(100); Adc = ADS1256ReadData( ADS1256_MUXP_AIN1|ADS1256_MUXN_AINCOM); Volts = Adc*0.00059453; // 0.00000059453 为系数,ADC生产出后都有一定的偏差,
资源推荐
资源详情
资源评论
收起资源包目录
STC15F2K60S2单片机读写ADS1256并LCD1602显示驱动程序源码.zip (20个子文件)
51_4位1602_LCD显示程序
ADS1256-C51
C51 - ok
ADS1256
ads1256.h 3KB
ADS1256.C 5KB
user
STC15F2K60S2.H 13KB
UART.H 0B
main.c 3KB
proj
ADS1256.obj 14KB
ADS1256.hex 4KB
ADS1256.plg 285B
ADS1256 28KB
ADS1256_uvopt.bak 54KB
ADS1256.lnp 63B
ADS1256.M51 17KB
ADS1256_uvproj.bak 13KB
ADS1256.uvgui_Yizun Chen.bak 69KB
ADS1256.uvproj 13KB
ADS1256.uvopt 54KB
ADS1256.uvgui.Yizun Chen 69KB
main.lst 6KB
main.obj 16KB
ADS1256.lst 9KB
共 20 条
- 1
探索者我有我路向
- 粉丝: 283
- 资源: 1816
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页