能给我个51单片机控制ADS1255的程序吗 谢谢

能给我个51单片机控制ADS1255的程序吗 谢谢,第1张

#include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

sbit DIO=P3^0

sbit SCLK=P3^1

/*从SPI总线上读入一个字节*/

uchar read(void)

{

uchar data i,inData

for(i=0i<8i++) // 移告蔽8次

{

SCLK = 0 // 拉低时钟线

inData <<= 1// Most Significant Bit First

inData |= DIO // 从SPI总线的数据输出线SO上读入一位

SCLK = 1 //腔友猜 拉高时钟线

}

return(inData)

}

/*输出一个字节到SPI总线伍型上*/

void write(uchar outData)

{

uchar data i

for(i=0i<8i++) // 移8次

{

SCLK = 0

outData <<= 1

DIO = CY // 移出一位,送出至SPI总线的数据输入线SI上

SCLK = 1

}

}

void do_n_byte(uint length,uint* pSend)

{

while(length--)

{

write(*pSend)

pSend++

}

// PORTB |= (1<<ADS1255_CS)

}

long int read_data(void)

{

uchar i,send[]={0x01,0xff,0xff,0xff}

long int date

do_n_byte(sizeof(send),send)

// strncpy((uchar*)&data,send+1,3)

for(i=0i<24i++)

{

SCLK = 0 // 拉低时钟线

date <<= 1 // Most Significant Bit First

date |= DIO // 从SPI总线的数据输出线SO上读入一位

SCLK = 1 // 拉高时钟线

}

// _NOP()

//send[1]=read()

//send[2]=read()

//send[3]=read()

//date = send[1]*65536 + send[2]*256 +send[1]

return date

}

/*

long int read_data_c(uchar num)

{

uchar send[]={0x03,0xff,0xff,0xff}

long int date[]

long int j=0

do_n_byte(sizeof(send),send)

date[0] = send[1]*65536 + send[2]*256 +send[1]

for(j<numj++)

{

uchar send[]={0xff,0xff,0xff}

do_n_byte(sizeof(send),send)

date[j+1] = send[1]*65536 + send[2]*256 +send[1]

}

return date

}

*/

long int read_standby(void)

{

uchar send[]={0x01,0xff,0xff,0xff,0xfd}

long int date

do_n_byte(sizeof(send),send)

strncpy((uchar*)&date,send+1,3)

return date

}

void set_selfcal(void)

{

//PORTB &= ~(1<<ADS1255_CS)

write(0xf0)// lfcal command byte(in order to get the best performance)

// PORTB |= (1<<ADS1255_CS)

}

void set_wakeup(void)

{

//PORTB &= ~(1<<ADS1255_CS)

write(0x00)//wakeup command byte(0xff can too)

//PORTB |= (1<<ADS1255_CS)

}

void set_standby(void)

{

//PORTB &= ~(1<<ADS1255_CS)

write(0xfd)//standby command byte

//PORTB |= (1<<ADS1255_CS)

}

void set_sync(void)

{

//PORTB &= ~(1<<ADS1255_CS)

write(0xfc)//sync command byte

//PORTB |= (1<<ADS1255_CS)

}

void write_register(uchar addr,uchar date)

{

uchar send[] = {0x50,0x00,0x00}//write 1 register(as used 0x00)

send[0] |= addr//starting from register addr(as used 0101 "addr"b)

send[2] |= date//data writed

do_n_byte(sizeof(send),send)

}

uchar read_register(uchar addr)

{

uchar send[] = {0x10,0x00,0xff}//read 1 register(as used 0x00)

send[0] |= addr//starting from register addr(as used 0001 "addr"b)

do_n_byte(sizeof(send),send)

send[2]=read()

return send[2]//content saved in the send[2]

}

void init_spi(void)

{

}

void main()

{

while(1)

}

AD0809的采集程序

//---A/D转换---

//-----头文件引用------

#include <Reg51.h>

#include <absacc.h>

#include <intrins.h>

typedef unsigned char BYTE/*自定义字节类型*/

#define Set_Bit(BIT) (BIT = 1) /*定义置1函数*/

#define Clear_Bit(BIT) (BIT = 0) /*定义清0函数*/

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

void Write_Hd7279(BYTE,BYTE)/*定义HD7279写函数*/

BYTE Read_Hd7279(BYTE)/*定义HD7279读函数*/

void Send_Byte(BYTE)/*定义HD7279发送字节函数*/

BYTE Receive_Byte(void)/清冲*定义HD7279接收字节函数*/

void Short_Delay(void)/*定义短延时函数*/

void Long_Delay(void)/*定义长延时函数*/

void Mcu_Init(void)/*定义MCU初始化函数*/

void Delay_200_mS(void)/*定义200ms延时函数*/

sbit Hd7279_Clk=P1^6/*定义HD7279时钟硬件连接*/

sbit Hd7279_Data=P1^5/*定义HD7279数据硬件连接携则*/

sbit cs=P1^7

void Short_Delay(void) /*短延时函数*/

{

BYTE i

for(i=0i<0x08i++)

}

/************************************************************************************/辩正棚

void Long_Delay(void) /*长延时函数*/

{

BYTE i

for(i=0i<0x30i++)

}

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

void Write_Hd7279(BYTE Command,BYTE Data) /*HD7279写函数*/

{

Send_Byte(Command)

Send_Byte(Data)

}

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

void Send_Byte(BYTE Data_Out) /*HD7279发送字节函数*/

{

BYTE i

cs=0

Long_Delay()

for(i=0i<8i++)

{

if(Data_Out&0x80) Set_Bit(Hd7279_Data)

else Clear_Bit(Hd7279_Data)

Set_Bit(Hd7279_Clk)

Short_Delay()

Clear_Bit(Hd7279_Clk)

Short_Delay()

Data_Out=Data_Out<<1

}

Clear_Bit(Hd7279_Data)

}

//-----宏声明-----

#define A_DPORT XBYTE[0xFef3]//0809通道0地址

#define uchar unsigned char

//-----变量定义-----

bit bdata bz=0//定义标志

uchar val

//-----初始化-----

void first(void)

{

P1=0xff

P2=0xff

P3=0xff

P0=0xff

Send_Byte(0xa4)

IT1=1

EX1=1

EA=1//INT0 允许

}

//-----中断-----

void int_0(void) interrupt 2

{

val=A_DPORT//读 A_D 数据

bz=1//置读数标志

}

//-----主程序-----

main()

{

first()//初始化

while(1)

{

A_DPORT=val//启动 A_D

while(bz==0)//等待 A_D 转换结束

// val=~A_DPORT

//P1=val//数据输出

Write_Hd7279(0xc8,val&0x0f)

Write_Hd7279(0xc9,val>>4)

Write_Hd7279(0x92,0x00)

Write_Hd7279(0x93,0x00)

Write_Hd7279(0x94,0x00)

Write_Hd7279(0x95,0x00)

Write_Hd7279(0xce,0x0d)

Write_Hd7279(0xcf,0x0a)

bz=0//清读数标志

}

}

这就是C的程序

http://hi.baidu.com/dzkfw/blog/item/4a188216fd986b12c83d6d05.html

不平凡的单片机学习资料,很好的单片机教程,超好用,一个不占内存的教程,有案例。

1、最新版单片机编程宝典下载地址,学习单片机编程必备手册

2、单片机c语言运用例子

3、十天学会单片机c语言和单片机制作,最好的单片机资料

/sendtimebetweenbeatswitha/在LCD12864上显示BPM

}

delay(138)9Set/发送并处理原始脉搏传感器数据

if(QS==true){//fadeRateVariableto255tofadeLEDwithpulse

sendDataToProcessing(BQi++){

delay(1000)}

if(Pressure<100){

beep=0}}

if(BPM<60|BPM>100){

for(i=0i<显示信息4

while(1)

{

sendDataToProcessing(}

}

}

//AD转换结果result

ADC_CONTR&=0xf8/依次执行写入 *** 作

{

putchar(ucStr3[i])

}

for(i=0

_nop_()/延时19.6ms

LCD_disp_list_char(4,DisBuff2)设置ADCCONTR控制寄存器后/S确定发现一个心跳

fadeRate=255,0/voidledFadeToBeat(){

//,BPM)///analogWrite(fadePin,fadeRate)/:GetADCResult

函数功能:获取AD转换结果函数

入口参数,Signal)

sys_init()

beep=1

LCD12864_DisplayOneLine(0x80,ucStr1)//,255)//prefix

QS=false/,IBI),4/resettheQuantifiedSelfflagfornexttime

LCD_disp_list_char(2:BYTEch(通道选择)

返回值:result(枣大A///依次执行写入 *** 作

{

putchar(ucStr2[i])

}

for(i=0、CHS1、CHS0(清除通道选择乎岩搜)

_nop_()//显示信息1

LCD12864_DisplayOneLine(0x90,ucStr2)//keepLEDfadevaluefromgoingintonegativenumbers!

/B}

for(i=0i<3i++)

{

putchar(DisBuff[i])/清除ADC控制寄存器ADCCONTR的CHS2,DisBuff)/16i++)/和心率

sendDataToProcessing(setLEDfadevalue

//,要加4个空 *** 作延时才可以正确读到ADCCONTR寄存器的值

_nop_()4i++)//,4i++){

delay(1000)}

if(BPM<60|BPM>100){

beep=0i<16/i++)//8

}

for(i=0Q/}

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

函数名称岁历显示信息2

LCD12864_DisplayOneLine(0x88,ucStr3)//ledFadeToBeat()显示信息3

LCD12864_DisplayOneLine(0x98,ucStr4)//i<16}

for(i=0i<

unsignedintGetADCResult(BYTEch)

{unsignedintresult//依次执行写入 *** 作

{

putchar(ucStr1[i])/fadeLED

/i<16fadeRate=constrain(fadeRatei++)///发送一个fadeRate-=15//D转换结果)

备注:无

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

_nop_()

ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START//开ADC电源,选择AD转换速率,并选择AD通道,开始AD转换

_nop_()//设置ADCCONTR控制寄存器后,要加4个空 *** 作延时才可以正确读到ADCCONTR寄存器的值

_nop_()

_nop_()

_nop_()

while(!(ADC_CONTR&ADC_FLAG))//等待AD转换结束

ADC_CONTR&=~ADC_FLAG//关闭ADC

result=ADC_RES//将AD转换结果的高两位赋给result

result=result<<8//将result循环左移8位

result+=ADC_RESL//将AD转换结果的底8位加高两位共10位给result

returnresult//返回10位AD转换结果

}

voidsendDataToProcessing(charsymbol,intdat){

putchar(symbol)//symbolprefixtellsProcessingwhattypeofdataiscoming

printf(\"%drn


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8257280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存