制作的多参数床边监护系统实物图:
资料包里面含有完整的设计论文
基于单片机的多参数床边监护系统仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
多参数床边监护系统单片机源程序如下:
- ;***********************************************************************************************************
- ; 基于AT89C51的多参数床边监护系统
- ;************************************************************************************************************
- SHIWEI EQU 32H;
- GEWEI EQU 33H;
- HUANCUN EQU 36H;
- BEATS EQU 40H ;
- XIN_BAI EQU 41H ;
- XIN_SHI EQU 42H ;
- XIN_GE EQU 43H ;
- CLOCK BIT P2.4;
- ST BIT P3.2;
- EOC BIT P3.1;
- D_A BIT P2.3;
- D_B BIT P2.2;
- D_C BIT P2.1;
- E BIT P2.7;
- RW BIT P2.5;
- RS BIT P2.6;
- XIN BIT P3.5;
- ORG 0000H;
- LJMP START;
- ORG 000BH;
- LJMP INT_T0;
- ORG 0100H;
- ;***********主程序开始******************************************************
- START: LCALL LCDINIT;调用液晶显示屏初始化程序
- LCALL TISHI1;
- LCALL TISHI2;
- ;*********************************************************************************
- ; 温度部分
- ;*******************************************************************************
- BEGIN: MOV TMOD,#02H;
- MOV TH0,#236; 定时钟频位50khz
- MOV TL0,#236;
- MOV IE,#82H; 开T0中断
- SETB TR0; 启动定时器
- CLR D_A; AD0809选择IN0通道
- CLR D_B;
- CLR D_C;
- WEN:
- CLR ST;
- SETB ST;
- CLR ST;启动AD转换
- JNB EOC,$; 等待转换结束
- LCALL DELAY1S;
- ;*********查表法得到转换值*********************************
- MOV HUANCUN,P1;
- MOV DPTR,#TAB1
- MOV A,HUANCUN
- MOVC A,@A+DPTR
- ;*********将查表得到的值转换成BCD码**********************
- MOV B,#10
- DIV AB
- MOV SHIWEI,A
- MOV GEWEI,B
- ;*********显示整数部分的温度值**************************
- XIANSHI: MOV A,#84H;
- LCALL WRC;
- NOP
- MOV R0,#32H; 显示温度的十位、个位
- WDA1: MOV A,@R0
- ADD A,#30H; 转换成ASCII码
- LCALL WRD; 写数据
- INC R0;
- CJNE R0,#34H,WDA1; 判断温度是否显示完
- ;*********显示小数点***********************************************************
- DIAN: MOV A,#86H; 显示小数点
- LCALL WRC;
- MOV A,#2EH;
- LCALL WRD;
- ;*********查表得小数部分得温度值********************************************
- MOV DPTR,#TAB2
- MOV A,HUANCUN
- MOVC A,@A+DPTR
- ;*********将小数部分的值转换成BCD码**********************************************************************
- MOV B,#10
- DIV AB
- MOV SHIWEI,A
- MOV GEWEI,B
- ;**********显示小数子程序********************
- XIANSHI1: MOV A,#87H;
- LCALL WRC;
- MOV R0,#32H; 显示温度的十位、个位
- WDA12: MOV A,@R0
- ADD A,#30H; 转换成ASCII码
- LCALL WRD; 写数据
- INC R0;
- CJNE R0,#34H,WDA12; 判断温度是否显示完
- ;*********显示温度符号*************************************************************************
- MOV A,#089H; 显示温度符号,设定显示位置
- LCALL WRC; 写入命令
- MOV A,#0DFH; “。”的 ASCII码
- LCALL WRD; 写数据
- MOV A,#43H; “C"的ASCII码
- LCALL WRD; 写数据
- ;******************************************************************************
- ; 心率部分
- ;****************************************************************************
- JISHU: MOV TMOD,#60H ;
- MOV TH1,#00H;
- MOV TL1,#00H;
- SETB XIN;
- SETB TR1;
- MOV R3,#10;
- REPPS:
- CALL DELAY1S;
- DJNZ R3,REPPS;
- MOV BEATS,TL1;
- CLR TR1;
- CLR TF1;
- MOV A,BEATS;
- CJNE A,#00H,DOWNSX1;
- AJMP DOWNSX;
- DOWNSX1:
- CLR C;
- SUBB A,#08H;
- JNC DOWNSU;
- AJMP DOWNSX;
- DOWNSU:
- MOV A,BEATS;
- ADD A,BEATS;
- ADD A,BEATS;
- ADD A,BEATS;
- ADD A,BEATS;
- ADD A,BEATS;
- MOV BEATS,A;
- DOWNSX:
- ;转换成BCD
- MOV B,#100;
- DIV AB;
- MOV XIN_BAI,A;
- MOV A,B;
- MOV B,#10;
- DIV AB;
- MOV XIN_SHI,A;
- MOV XIN_GE,B;
- ;*******心率显示子程序******************************************************
- XIN_XIAN:
- MOV A,#0C4H;
- LCALL WRC;
- MOV R0,#41H;
- WDA2: MOV A,@R0; 心率值显示
- ADD A,#30H;
- LCALL WRD;
- INC R0;
- CJNE R0,#44H,WDA2;
- XIN_DAN: ;显示心率单位
- MOV A,#0C9H;
- LCALL WRC;
- MOV A,#54H;
- LCALL WRD;
- MOV A,#2FH;
- LCALL WRD;
- MOV A,#6DH;
- LCALL WRD;
- MOV A,#69H;
- LCALL WRD;
- MOV A,#6EH;
- LCALL WRD;
-
- AJMP WEN
-
-
- ;*********温度提示字符显示**************************************************************
- TISHI1: MOV DPTR,#M_1; 指针指到显示消息
- LINE11: MOV A,#80H; 设置LCD的第一行地址
- LCALL WRC; 写入命令
- FILL1: CLR A; 输入字符
- MOVC A,@A+DPTR; 由消息区取出字符
- CJNE A,#0,LC11; 判断是否为结束码
- JMP RET_END1 ;子程序返回
- LC11: LCALL WRD; 写入数据
- INC DPTR; 指针加1
- JMP FILL1; 继续填入字符
- RET_END1: RET
- ;********心率提示字符显示***************************************************
- TISHI2: MOV DPTR,#M_2; 指针指到显示消息
- LINE12: MOV A,#0C0H; 设置LCD的第二行地址
- LCALL WRC; 写入命令
- FILL2: CLR A; 输入字符
- MOVC A,@A+DPTR; 由消息区取出字符
- CJNE A,#0,LC12; 判断是否为结束码
- JMP RET_END2 ;子程序返回
- LC12: LCALL WRD; 写入数据
- INC DPTR; 指针加1
- JMP FILL2; 继续填入字符
- RET_END2: RET
- M_1: DB "WEN:",0;
- M_2: DB "XIN:",0;
- ;********液晶初始化子程序***************************
- LCDINIT: MOV A,#01H; 清屏
- LCALL WRC; 调用写入命令子程序
- MOV A,#38H; 8位数据,2行,5*8点阵
- LCALL WRC;
- MOV A,#0CH; 开显示和光标,字符不闪烁
- LCALL WRC;
- MOV A,#06H; 字符不动,光标自动右移1格
- LCALL WRC;
- RET;
- ;********忙检查子程序************************
- CBUSY: PUSH ACC; 将A的值暂存于堆栈
- PUSH DPH; 将DPH的值暂存于堆栈
- PUSH DPL; 将DPL的值暂存于堆栈
- PUSH PSW; 将PSW的值暂存于堆栈
- WEIT:
- CLR RS; RS=0,选择指令寄存器
- SETB RW; RW=1,选择读模式
- CLR E; E=0,禁止读/写LCD
- SETB E; E=1,允许读/写LCD
- NOP
- MOV A,P0; 读操作
- CLR E; E=0,禁止读/写LCD
- JB ACC.7,WEIT; 忙碌循环等待
- POP PSW; 从堆栈中取回PSW的值
- POP DPL; 从堆栈中取回DPL的值
- POP DPH; 从堆栈中取回DPH的值
- POP ACC; 从堆栈中取回ACC的值
- LCALL DELAY; 延时
- RET;
- ;********写子程序**************************
- WRC: LCALL CBUSY; 写入命令子程序
- CLR E; E=0,禁止读/写LCD
- CLR RS; RS=0,选择指令寄存器
- CLR RW; RW=0,选择写模
- SETB E; E=1,允许读/写LCD
- MOV P0,A; 写操作
- CLR E; E=0,禁止读/写LCD
- LCALL DELAY; 延时
- RET
- WRD: LCALL CBUSY; 写入数据子程序
- CLR E; E=0,禁止读/写LCD
- SETB RS; RS=1,选择数据寄存器
- CLR RW; RW=0,选择写模式
- SETB E; E=1,允许读/写LCD
- MOV P0,A; 写操作
-
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
多参数床边监护仪.rar
(12.34 MB, 下载次数: 62)
|