#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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)