电子血压计论文(51单片机版)讲解 下载本文

七、心得体会

此次关于“血压信号采集系统设计”的课程设计,我们从任务分配、查阅资料、最初的方案设计、数据处理到最后的画图、仿真。在这为期3周的过程中,我们每个组员都收获很多。对于血压计的原理有了更加深入的了解,更好地熟悉并掌握了Protel DXP的操作。针对每个过程、每个细节都有了更深入的体会。当然也让我们更加清楚地看到其中出现的不足之处。在画图仿真过程中出现了些细节上的小问题,但是通过大家不厌其烦地多次修改、调试,最终达到了实验目的。

八、参考文献

[1] 吴咏春主审.可编程控制器原理与程序设计.大连理工出版社.2009; [2] 郭冀珍.电子血压计可不可靠.高血压杂志[J].2005 [3] 席德勋.现代电子技术,高等教育出版社,1999

[4] 赵小安.MCS-51单片机原理及应用.天津大学出版社.2001

九、附录

总电路图

13

仿真总图

程序编码

#include

#define uint unsigned int #define uchar unsigned char #define ad0_7 P0 //AD数据口 sbit A=P2^0; sbit start=P2^3; //下降沿启动AD转换,上升沿寄存器清零,转换过程为低电

14

sbit clock=P2^4;

sbit EOC=P2^5; //AD转换结束输出高电平

sbit ALE=P2^6; //地址锁存允许地址输入端,高电平有效 sbit OE=P2^7; //读数据控制,高电平有效 sbit rs=P3^0; //定义液晶显示器控制端口 sbit rw=P3^1; sbit en=P3^2; sbit key=P3^3; sbit MT=P3^4;

uchar code table[17]={%uchar code table1[17]={%uchar code table2[13]={%uchar code table3[17]={%uchar data buf[9]; //用于数字显示 uint i;

int data_H,data_L,Sum,max;

void start_ad(); //启动AD转换子程序 void delay(uchar time);

void write_com(uchar com); //写指令函数 void write_data(uchar dat); //写数据函数 void match();//数据分析子程序 void display(); //显示子程序 void display1(); void main() {

TMOD=0X22; //定时器设置

TH0=0XFF; //定时器0置初值 1us 500KHz TL0=0XFF;

EA=1; //开总中断

ET0=1; //定时器0中断开启 TR0=1; //启动定时0 MT=1; while(1) {match();} }

void delay(uchar time) //延时 {

uint j;

for(;time>0;time--) for(j=0;j<125;j++); }

15

void write_com(uchar com) //写指令函数 {

en=0; rs=0; P1=com; en=1; en=0; }

void write_data(uchar dat) //写数据函数 {

en=0; rs=1; P1=dat; en=1; en=0; }

void time0(void) interrupt 1 using 1 //{

TH0=0XFF; //重赋初值 TL0=0XFF;

TR0=1; //重新启动定时器 clock=!clock; }

void start_ad() //启动AD转换子程序 {

//通道0 A=0;

ALE=1; //允许地址输入 start=0; delay(1);

start=1; //上升沿数据清零 delay(1);

start=0; //下降沿开始转换

while(!EOC) //转换结束关闭地址输入端 {}

ALE=0; //读数据

OE=1; //允许读 delay(1);

data_H=ad0_7; //把数据存到data_H中 OE=0; //停止AD读取 //通道1 A=1;

ALE=1; //允许地址输入

16

定时中断子程序