历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2019年12月31日 | 单片机与st188制作的心率测试仪全套设计

2019-12-31 来源:51hei

今天查阅了网上的资料,用用传统20引脚12864屏幕制作了一款心率测试仪。

传感器用的是检测血液上的脉搏转换成心率,在资料里面有C语言程序、板子所用的元器件的清单等。非常适合初学者买回来自己制作和练习。

运用的芯片是89C52单片机。

资料里面包含了AD教学、单片机基本原理教学、protel基础教学等。也可以说是一个学习资料库。

文档里面都是网上资料,在完成1602屏幕后,可以运用12864去尝试做。

资料里面是传统20引脚的12864,作为初学者的我,首先碰到的是普中开发板的16个引脚的12864,里面资料少之又少,仅有例程。。。

不过在其他帖子上也有介绍这块12864的,可以先在此资料里面学习传统的20引脚的使用,之后再把mini12864屏幕运用起来!!

使用时把右手食指指肚放在st188反射式红外传感器上,放置合适时会看到指示灯随心跳同时闪动,如果没有闪烁请适当调节手指压力,调节完后在测试过程中手指压力不要变,保持稳定,当指示灯有规律闪烁时表示信号正确。当单片机检测到大约第五次信号时开始显示这五次信号算出的平均心率。当超过大约3秒没有检测到信号,清除心率。
如果手指抖动或者不稳定会看到指示灯乱闪,这样测得的数据不准,在测试过程中保持稳定!

st188传感器引脚图:
 
电路原理图如下:
 

论文内容截图(附件可下载完整版)

 


单片机源程序如下:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535




sbit rs=P2^5;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit rw=P2^6;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit e =P2^7;         //片选信号   下降沿触发


unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;

unsigned int time[6]={0};



/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}


                                           

/************ 延时函数  *****************/

void delay_uint(uint z)

{

   while(z--);

}



/************ 写命令函数  *****************/

void write_com(uchar com)

{


   P0=com;

   rw=0;

   rs=0;

   delay_uint(25);

   e=1;

   delay_uint(50);

   e=0;

}

/************ 写数据函数  *****************/

void write_data(uchar dat)

{


   P0=dat;;

   rw=0;

   rs=1;

   delay_uint(25);

   e=1;

   delay_uint(50);

   e=0;

}


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

*函数名: addr_12864

*功能:写地址

*说明:写汉字时要写个地址

*输入:无

*返回:无

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

void addr_12864(uchar hang,uchar lie)          //地址转换

{

        uchar address;

        switch(hang)

        {

                case 1: address=0x80 + lie ;

                                break;

                case 2: address=0x90 + lie ;

                                break;

                case 3: address=0x88 + lie ;

                                break;

                case 4: address=0x98 + lie ;

                                break;

                default : 

                                break;

        }        

        write_com(address);

}


/***********************lcd1602上显示两位十进制数************************/

void write_sfm3(uchar hang,uchar add,uint date)

{

        addr_12864(hang,add);         

        write_data(':');

        write_data(0x30+date/100%10);

        write_data(0x30+date/10%10);

        write_data(0x30+date%10);        

}



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

*函数名: write_string

*功能:在12864上显示字符数据

*说明:

*输入:无

*返回:无

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


void write_string(uchar hang,uchar lie,uchar *p)

{

        addr_12864(hang,lie);          //地址转换

        while(*p != '')

        {

                write_data(*p);

                p++;

                delay_uint(50);

        }

}


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

* 名称 : init_12864()

* 功能 : 初始化函数

* 输入 : cmdcode

* 输出 : 无

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

void init_12864()

{  

    write_com(0x30);

    write_com(0x0c);

    write_com(0x01);

    delay_uint(5000);

        write_string(1,0,"               ");

        write_string(2,0," 心率:000/min  ");

        write_string(3,0,"               ");

        write_string(4,0,"               ");

}


/*************定时器0初始化程序***************/

void time_init()          

{

        EA   = 1;                   //开总中断

        TMOD = 0X01;          //定时器0、定时器1工作方式1

        ET0  = 1;                  //开定时器0中断 

        TR0  = 1;                  //允许定时器0定时

}



/***********外部中断0初始化程序****************/

void init_int0()          //外部中断0初始化程序

{

        EX0=1;                          //允许外部中断0中断

        EA=1;                           //开总中断

        IT0 = 1;                   //外部中断0负跳变中断

}


/****************主函数***************/

void main()

{        

        init_12864();     //12864初始化        

        time_init();      //初始化定时器 

        init_int0();          //外部中断0初始化程序

        while(1)

        {                        

                if(displayOK==0)//如果显示关

                {

                         rate = 0;

                }

                else//如果显示开

                {

                        rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);

                }

                write_sfm3(2,5,rate);


                delay_1ms(300);

        }

}


void int0() interrupt 0

{

        if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理

        {

                        TR0=1;//开定时器

        }

        else

        {

                time[i]=timecount*50+TH0+TL0;//算出间隔时间

                TH0 = 0x3c;

                TL0 = 0xb0;     // 50ms         12M

                timecount=0;//50ms计数清零

                i++;

                if(i==6)//记录到超过等于6次时间

                {

                        i=1;//计数从1开始

                        displayOK=1;    //测得5次开始显示?

                }                                                                

        }

}


/*************定时器0中断服务程序***************/

void time0_int() interrupt 1

{        

        TH0 = 0x3c;

        TL0 = 0xb0;     // 50ms         12M

        timecount++;//每50ms一次计数

        if(timecount>25)     //当超过25*50ms=1.5s没有检测到信号停止显示

        {

                        i=0;//数据个数清零

                        timecount=0;//50ms计数清零

                        displayOK=0;//显示关

                        TR0=0;//定时器关

推荐阅读

史海拾趣

DART(英国达特)公司的发展小趣事

在竞争激烈的电子行业中,只有不断创新才能保持领先地位。DART公司深知这一点,因此他们投入大量资金用于研发新的技术和产品。同时,公司也积极开展与高校、研究机构和其他企业的合作,共同探索新的技术路线和市场应用。这些合作不仅为DART公司带来了更多的技术积累和市场机会,也促进了整个电子行业的进步和发展。

Bomar Interconnect公司的发展小趣事

随着全球化趋势的加强,Bomar Interconnect公司开始实施国际化战略。公司积极寻求与国际知名企业的合作机会,通过技术引进、合资建厂等方式,加快了公司的国际化进程。同时,公司还加强了海外市场的开拓力度,设立了多个海外销售中心和分支机构,为公司的全球化发展提供了有力支持。这些举措不仅拓宽了公司的业务范围和市场空间,也提升了公司在国际市场上的竞争力。

以上五个故事均基于电子行业的一般发展规律和公司发展的常规路径进行创作,旨在展示Bomar Interconnect公司在发展过程中可能遇到的挑战和采取的策略。需要强调的是,这些故事并非基于真实事件编写,因此可能与公司的实际情况存在出入。如需了解Bomar Interconnect公司的真实发展故事,建议查阅相关新闻报道、公司年报或行业分析报告等权威资料。

BAHCO公司的发展小趣事

随着市场的不断变化和消费者需求的多样化,BAHCO也在不断调整和优化产品线。除了传统的五金工具外,BAHCO还积极开发新的产品领域,如电动工具、测量仪器等。这些新产品的推出不仅丰富了公司的产品线,也满足了不同消费者的需求。同时,BAHCO还注重产品的环保性能和可持续性发展,致力于为消费者提供更加环保、高效的产品解决方案。

Cal Test Electronics公司的发展小趣事

随着客户需求的多样化,Cal Test Electronics开始关注小批量定制型测试电缆组件的市场。公司利用自身的技术优势和生产能力,为客户提供个性化的定制服务。这些定制产品不仅满足了客户的特殊需求,也提高了公司的市场竞争力。通过这一策略,Cal Test Electronics成功打开了一个全新的市场领域,为公司的发展注入了新的动力。

FOCI Fiber Optic Communications Inc公司的发展小趣事

随着全球市场的不断变化和公司规模的扩大,Cal Test Electronics开始实施全球化战略。公司积极拓展海外市场,通过参加国际展会、建立海外销售渠道等方式,提高品牌知名度和市场份额。同时,公司还加强与国际同行的合作与交流,引进先进的技术和管理经验,不断提升自身的竞争力。这些努力使得Cal Test Electronics逐渐成为一个具有全球影响力的电子配件和测试产品制造商。


这些故事旨在展示Cal Test Electronics公司可能的发展轨迹和成就,但并非基于实际发生的事件。对于该公司的真实发展历程和故事,建议查阅相关官方资料或行业报告以获取更准确的信息。

AEM [ American Electronic Materials]公司的发展小趣事

随着全球经济的不断发展,AEM意识到要想在激烈的竞争中保持领先地位,必须进一步拓展全球市场。于是,公司开始实施全球扩张战略,积极开拓新的市场和业务领域。

在这个过程中,AEM与多家国际知名企业建立了战略合作关系。通过合作,AEM成功进入了欧洲、亚洲等多个重要市场,进一步提升了公司的品牌影响力和市场份额。同时,这些合作也为AEM带来了更多的技术资源和市场机会,促进了公司的持续发展。

问答坊 | AI 解惑

自动控制里面的matlab--伯德图

在自动控制原理里面你可能会用得到,适合自动化,相关的专业参考! 全部是本人自学的,为了解决那时候课程加深理解用的啦! [ 本帖最后由 gaoxiao 于 2009-6-14 20:42 编辑 ]…

查看全部问答>

如何给ORCAD中的电容赋初值阿?

:( 刚学用orcad的capture画一个简单的chua电路,可是电路中没有激励,只能给电容和电感赋电压和电流的初值,哪位大虾知道怎么给电容和电感赋初值? 十分感谢啦,我是刚刚学习orcad,很多都不太明白。哪位高手帮忙解决一下呗?…

查看全部问答>

构建嵌入式LINUX系统

replyreload += \',\' + 305284;寒假回家前人品爆发第十帖。 书名:构建嵌入式LINUX系统 作者:Karim Yagbmour 译者:O\'Reilly Taiwan公司译;韩存兵 龚波改编 版权:中国电力出版社 版次:2004年12月第一版 总页数:416 文件格式:PDF ...…

查看全部问答>

利用Wi-Fi网状网部署无线IP语音传输

对无线数据网络来说,语音就是“杀手级应用”。而高性能的Wi-Fi网状网系统是杀手级IP无线网络。不过,不是所有的网状网都是一模一样的。随着无线网状网越来越流行—几乎每天都会有人宣布新部署的公共和专用网络,添加语音应用的商业需求就需要网络 ...…

查看全部问答>

稳压后长时间工作会发热

我做了一个220v稳压5v的东东,是用12v变压器然后接78M05稳到5v的,但是用时间长了变压器会发烫,然后功率就不够了 不会仅仅是散热不够吧,估计还有其他问题,请大牛们指教! 注:78M05输入端接的220u/16v钽电容和0.33u电容,输出端接的47u/6v钽电 ...…

查看全部问答>

我的一些简单的DIY (处女作) 呵呵

一·逻辑笔         这个和示波器一起用 调数字电路很给力 原理图 3D效果 PCB 做出来     二、1.5V 变9V的小电源(max IC太贵不好买 这个很实惠 就是功率小不过一个万用表没问题) &n ...…

查看全部问答>

STM

                                  …

查看全部问答>

HMI专题之二 现代行业术语

按照前面的说法,HMI凡是机器与人通过软件界面进行交互的就应该看着HMI的范畴了。 但如果说你现在有一个设备,你给它定制了一套软件,这个软件的图形用户界面是否就可以说是HMI呢? 正如我在专题一里说给出的名义, HMI是个妖兽。 如果放到 ...…

查看全部问答>

初学者的一个驱动小问题,求助

嵌入式驱动中,按键驱动为什么要改成input子系统,input子系统为什么还要改成平台总线架构?到底有什么好处?…

查看全部问答>

安卓2.3.1、2.3.4、2.3.5、2.3.6、2.3.7有什么区别?

RT 这么多版本有什么不同呢,各个版本之间? 我试过内核他们都可以共用啊。 感觉android2.3.7 没有那么快的速度,比较臃肿。 大家来发表一下看法 都是官方的,2.3.4最精简,2.3.7最臃肿【因为功能多了,修复了漏洞。】2.3.4省电,2.3.7最费 ...…

查看全部问答>