#include<math.h>
#include<INTRINS.h>
#define uchar unsigned char
#define uint unsigned int
sbit AD7707_DRDY=P3^3
sbit AD7707_DIN=P1^5
sbit AD7707_DOUT=P1^6
sbit AD7707_SCLK=P1^7
bdata uchar WtrByte
sbit WtrBit=WtrByte^7
void Init_AD7707(void) /*初始化AD7707*/
{
uchar i
AD7707_SCLK=1
AD7707_DIN=1
for(i=0i<100i++) /*防止接口迷失*/
{
AD7707_SCLK=0
AD7707_SCLK=1
}
}
void WriteToReg_AD7707(uchar RegByte) /*写AD7707寄存器*/
{
uchar i
WtrByte=RegByte
for(i=0i<8i++)
{
AD7707_SCLK=0
AD7707_DIN=WtrBit
AD7707_SCLK=1
WtrByte=WtrByte<<1
}
}
void AD_AINT1(void) //通道1初始化
{
WriteToReg_AD7707(0x20) /*激活通道 AIN1/LOCOM, 下一步 *** 作为写 Clock Register*/
WriteToReg_AD7707(0x18) /*启用 Master Clock, 2.4576MHz Clock, 设置 Output Rate 为 50Hz*/
WriteToReg_AD7707(0x10) /*激活通道 AIN1/LOCOM, 下一步 *** 作为写 Setup Register*/
WriteToReg_AD7707(0x44) /*Gain = 1, Unipolar 模式, Buffer 关闭, 清 FSYNC 并执行 Self Calibration*/
}
void AD_AINT2(void) //通道2初始化
{
WriteToReg_AD7707(0x21) //*激活通道 AIN2/LOCOM, 下一步 *** 作为写 Clock Register*/
WriteToReg_AD7707(0x18) /*启用 Master Clock, 2.4576MHz Clock, 设置 Output Rate 为 50Hz*/
WriteToReg_AD7707(0x11) /*激活通道 AIN2/LOCOM, 下一步 *** 作为写 Setup Register*/
WriteToReg_AD7707(0x44) /*Gain = 1, Unipolar 模式, Buffer 关闭, 清 FSYNC 并执行 Self Calibration*/
}
void AD_AINT3(void) //通道3初始化
{ WriteToReg_AD7707(0x23) /*激活通道 AIN3/HICOM, 下一步 *** 作为写 Clock Register*/
WriteToReg_AD7707(0x18) /*启用 Master Clock, 2.4576MHz Clock, 设置 Output Rate 为 50Hz*/
WriteToReg_AD7707(0x13) /*激活通道 AIN3/HICOM, 下一步 *** 作为写 Setup Register*/
WriteToReg_AD7707(0x44) /*Gain = 1, Unipolar 模式, Buffer 关闭, 清 FSYNC 并执行 Self Calibration*/
}
uint Read_AD7707(void) /*读取AD7707数据*/
{
uchar i
uint Data=0
while(AD7707_DRDY==1)
for(i=0i<16i++)
{
Data=Data<<1
AD7707_SCLK=0
Data=Data|AD7707_DOUT
AD7707_SCLK=1
}
return Data
}
供供参考:http://www.zhixinrui.com/forum.php?gid=1
/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条)