七、心得体会
此次关于“血压信号采集系统设计”的课程设计,我们从任务分配、查阅资料、最初的方案设计、数据处理到最后的画图、仿真。在这为期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
定时中断子程序