基于单片机心率计程序.doc

上传人:灯火****19 文档编号:136887836 上传时间:2020-07-03 格式:DOC 页数:16 大小:33KB
返回 下载 相关 举报
基于单片机心率计程序.doc_第1页
第1页 / 共16页
基于单片机心率计程序.doc_第2页
第2页 / 共16页
基于单片机心率计程序.doc_第3页
第3页 / 共16页
基于单片机心率计程序.doc_第4页
第4页 / 共16页
基于单片机心率计程序.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于单片机心率计程序.doc》由会员分享,可在线阅读,更多相关《基于单片机心率计程序.doc(16页珍藏版)》请在金锄头文库上搜索。

1、#include #include / 包含头文件#define uint unsigned int#define uchar unsigned char#define ulong unsigned long /宏定义#define LCD_DATA P0 /定义P0口为LCD_DATAsbit LCD_RS =P25;sbit LCD_RW =P26;sbit LCD_E =P27; /定义LCD控制引脚sbit Xintiao =P32 ; /脉搏检测输入端定义sbit speaker =P24; /蜂鸣器引脚定义void delay5ms(void); /误差 0usvoid LCD_W

2、riteData(uchar LCD_1602_DATA); /*LCD1602数据写入*/void LCD_WriteCom(uchar LCD_1602_COM); /*LCD1602命令写入*/void lcd_1602_word(uchar Adress_Com,uchar Num_Adat,uchar *Adress_Data); /*1602字符显示函数,变量依次为字符显示首地址,显示字符长度,所显示的字符*/void InitLcd();/液晶初始化函数void Tim_Init();uchar Xintiao_Change=0; /uint Xintiao_Jishu;ucha

3、r stop;uchar View_Data3;uchar View_L3;uchar View_H3;uchar Xintiao_H=100;/脉搏上限uchar Xintiao_L=40;/脉搏下限uchar Key_Change;uchar Key_Value;/按键键值uchar View_Con;/设置的位(0正常工作,1设置上限,2设置下限)uchar View_Change;void main() /主函数InitLcd();Tim_Init();lcd_1602_word(0x80,16,Heart Rate: ); /初始化显示TR0=1;TR1=1; /打开定时器while

4、(1) /进入循环if(Key_Change) /有按键按下并已经得出键值Key_Change=0; /将按键使能变量清零,等待下次按键按下View_Change=1;switch(Key_Value)/判断键值case 1:/设置键按下View_Con+;/设置的位加if(View_Con=3)/都设置好后将此变量清零View_Con=0;break;/跳出,下同case 2:/加键按下if(View_Con=2)/判断是设置上限if(Xintiao_H150)/上限数值小于150Xintiao_H+;/上限+if(View_Con=1)/如果是设置下限if(Xintiao_LXintiao

5、_L+1)/上限数据大于下限+1(同样上限值不能小于下限)Xintiao_H-;/上限数据减if(View_Con=1)/设置下限if(Xintiao_L30)/下限数据大于30时Xintiao_L-;/下限数据减break; if(View_Change)/显示变量View_Change=0;/变量清零if(stop=0) /心率正常时if(View_Data0=0x30) /最高位为0时不显示View_Data0= ;else /心率不正常(计数超过5000,也就是两次信号时间超过5s)不显示数据View_Data0= ;View_Data1= ;View_Data2= ;switch(V

6、iew_Con)case 0: /正常显示lcd_1602_word(0x80,16,Heart Rate: );/显示一行数据lcd_1602_word(0xc0,16, );/显示第二行数据lcd_1602_word(0xcd,3,View_Data); /第二行显示心率break;case 1: /设置下限时显示lcd_1602_word(0x80,16,Heart Rate: );/第一行显示心率lcd_1602_word(0x8d,3,View_Data);View_L0=Xintiao_L/100+0x30;/将下限数据拆字View_L1=Xintiao_L%100/10+0x30

7、;View_L2=Xintiao_L%10+0x30;if(View_L0=0x30)/最高位为0时,不显示View_L0= ;lcd_1602_word(0xC0,16,Warning L : );/第二行显示下限数据lcd_1602_word(0xCd,3,View_L);break;case 2: /设置上限时显示(同上)lcd_1602_word(0x80,16,Heart Rate: );lcd_1602_word(0x8d,3,View_Data);View_H0=Xintiao_H/100+0x30;View_H1=Xintiao_H%100/10+0x30;View_H2=Xi

8、ntiao_H%10+0x30;if(View_H0=0x30)View_H0= ;lcd_1602_word(0xC0,16,Warning H : );lcd_1602_word(0xCd,3,View_H);break;void Time1() interrupt 3/定时器1服务函数static uchar Key_Con,Xintiao_Con;TH1=0xd8; /10msTL1=0xf0; /重新赋初值switch(Key_Con) /无按键按下时此值为0case 0: /每10ms扫描此处if(P1&0x07)!=0x07)/扫描按键是否有按下Key_Con+; /有按下此值加

9、1,值为1break;case 1: /10ms后二次进入中断后扫描此处(Key_Con为1)if(P1&0x07)!=0x07)/第二次进入中断时,按键仍然是按下(起到按键延时去抖的作用)Key_Con+; /变量加1,值为2switch(P1&0x07) /判断是哪个按键按下case 0x06:Key_Value=1;break; /判断好按键后将键值赋值给变量Key_Valuecase 0x05:Key_Value=2;break;case 0x03:Key_Value=3;break;else /如果10ms时没有检测到按键按下(按下时间过短)Key_Con=0; /变量清零,重新检测

10、按键break;case 2: /20ms后检测按键if(P1&0x07)=0x07) /检测按键是否还是按下状态Key_Change=1; /有按键按下使能变量,(此变量为1时才会处理键值数据)Key_Con=0;/变量清零,等待下次有按键按下break;switch (Xintiao_Con)/此处与上面按键的检测类似case 0: /默认Xintiao_Con是为0的if(!Xintiao)/每10ms(上面的定时器)检测一次脉搏是否有信号Xintiao_Con+;/如果有信号,变量加一,程序就会往下走了break;case 1:if(!Xintiao) /每过10ms检测一下信号是否还存在Xintiao_Con+;/存在就加一elseXintiao_Con=0;/如果不存在了,检测时间很短,说明检测到的不是脉搏信号,可能是其他干扰,将变量清零,跳出此次检测 break;case 2:if(!Xintiao)Xintiao_Con+;/存在就加一elseXintiao_Con=0;/如果不存在了,检测时间很短,说明检测到的不是脉搏信号,可能是其他干扰,将变量清零,跳出此次检测 break;case 3:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号