原理很简单 血压测量
仿真 用划变电压代替传感器 电压值变化输入数模转换 然后
单片机处理输出血压值是不是程序错了 大神帮我看看 能帮我改改不 可以用大神永久的迅雷会员刷来的
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code LED_W[3] = {0x08,0x04,0x02};
uchar ssy[3],szy[3],mb[3];
uint getdata,getdata1,n,MBO;
uchar a,i,k;
sbit mb_led =P3^0;
sbit ssy_led =P3^1;
sbit szy_led =P3^3;
sbit wr=P3^6;
sbit rd=P3^7;
void delay(uint z) //延时z毫秒
{
uint t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void xinlv() //脉搏的显示函数
{
mb_led = 0;
for(a=150;a>0;a--)
{
for(i=0;i<3;i++)
{
P2= LED_W[i];
k = mb[i];
P1= table[k];
delay(5);
}
}
mb_led = 1;
}
void xueya_ssy() //收缩压的显示函数
{
ssy_led = 0;
for(a=150;a>0;a--)
{
for(i=0;i<3;i++)
{
P2= LED_W[i];
k = ssy[i];
P1= table[k];
delay(5);
}
}
ssy_led = 1;
}
void xueya_szy() //舒张压的显示函数
{
szy_led = 0;
for(a=150;a>0;a--)
{
for(i=0;i<3;i++)
{
P2= LED_W[i];
k = szy[i];
P1= table[k];
delay(5);
}
}
szy_led = 1;
}
void display() //显示子函数
{
xinlv();
xueya_ssy();
xueya_szy();
}
void adswap () //模数转换子程序
{
wr = 1; //启动转换
wr = 0;
wr = 1;
rd = 0;
//getdata = XBYTE[0xB000] ; //存放转换结果 ,看成收缩压
getdata = P0;
rd = 1;
getdata1 =(int) getdata/1.6; //设收缩压是舒张压的1.6倍,存放舒张压
ssy[0] = getdata%10; //个位
getdata = getdata/10 ;
ssy[1] = getdata%10; //十位
ssy[2] = getdata/10; //百位
szy[0] = getdata1%10; //个位
getdata1 = getdata1/10 ;
szy[1] = getdata1%10; //十位
szy[2] = getdata1/10; //百位
}
void main()
{
TMOD=0x01; //定时器T0工作于方式1
TH0=0xec;
TL0=0x78; //T0定时时间为5ms
IE=0X83; //开中断
IT0=1; //外部中断0为边沿触发方式
TR0=1; //开定时器T0
P2 = 0X00; //关所有位显示
while(1)
{
display();
}
}
external0() interrupt 0//外部中断服务程序
{
if(n==0)
MBO=0;
else
MBO=12000/n; //计算每分钟脉搏数
mb[0]=MBO%10;//取个位数
MBO=MBO/10;
mb[1]=MBO%10;//取十位数
mb[2]=MBO/10;//取百位数
n=0;
}
timer0() interrupt 1//定时中断服务程序
{
TH0=0xec;
TL0=0x78;
n = n+1;
if(n==2000)//10秒钟测不到心率,n复位
{n=0;}
adswap();
}
-
proteus里面自带信号源!
一周热门 更多>