/*******************************************************
* 程序名称:jiance.c
* 程序大旦功能:传感器检测到目标物,输出高电平
* 程序作者:
* 创建时间:
* 修改时间:
* 程序版本:V0.1
******************************************************/
/*
* 包含头文件
*/
#include "inc/hc595.h"
#include "reg51.h"
/*
* 定义引脚
*/
/* 时钟信号线引脚定义 */
sbit HC595CLK = P0^5
/* 片选信号线引脚定义 */
sbit HC595RCK = P0^6
/* 数据输入引脚定义 */
sbit HC595DATA = P0^7
/******************************************************
* 函数名称:SendData
* 函数功能:74HC595数据的发送滚薯扰
* 入口参数:unsigned int uiDataOne, unsigned int uiDataTwo
* 出口参数:void
*******************************************************/
void SendData(unsigned int uiDataOne, unsigned int uiDataTwo)
{
unsigned int i = 0
/* 将片选信号置为低电平 */
HC595RCK = 0
/* 输入第一个数据:uiDataOne */
for (i = 0i <8i++)
{
/* 给出脉冲信号,首先将CLK置为0 */
HC595CLK = 0
if (0 != (uiDataOne &0x80))
{
HC595DATA = 1
}
else
{
HC595DATA = 0
}
/* 给出脉冲信号,首先将CLK置为1 */
HC595CLK = 1
/* 准备第二个数据 */
uiDataOne = uiDataOne <<1
}
/* 输入第二个数据:uiDataTwo */
for (i = 0i <8i++)
{
/* 给出脉冲信号,首先将CLK置为0 */
HC595CLK = 0
if (0 != (uiDataTwo &0x80))
{
HC595DATA = 1
}
else
{
HC595DATA = 0
}
/* 给出脉冲信号,首先将CLK置为1 */
HC595CLK = 1
/* 准备第二个数据 */
uiDataTwo = uiDataTwo <<1
}
/* 将片选信号置为高手历电平 */
HC595RCK = 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
objectMainextendsApp{varreverse_pairs = 0//逆巧耐慧序数
defmsort[T](cmp:(T, T) =>Boolean)(l:List[T]):List[T] = {
defmerge(l1:List[T], l2:List[T]):List[T]=(l1, l2)match{
case(Nil, _) =>孝答 l2
case(_, Nil) =>l1
case(x::left1, y::left2) =>
if(cmp(x, y))
x::merge(left1, l2)
else{
reverse_pairs += l1.length
y::merge(l1, left2)
}
}
valn = l.length /亩基 2
if(n == 0)
return l
else{
val(l1, l2) = l.splitAt(n)
merge(msort(cmp)(l1), msort(cmp)(l2))
}
}
println(msort((x:Int, y:Int) =>x<y)(List(5, 4, 3, 2, 7,6 )))
println(reverse_pairs)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)