脉搏检测仪程序
#include<reg52.h>
#include<intrins.h>
#defineuchar unsigned char
#defineuint unsigned int
uchari=0xfe;//显示位选初值
ucharge,shi,bai;
uint count =887;//脉搏次数
uint t;
uchar disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管编码
sbitP0_0=P0^0; //黄灯
sbitP0_1=P0^1; //红灯
sbitP0_2=P0^2; //绿灯
sbitP2_4=P2^4; //按键
//sbitP3_2=P3^2;
sbitP3_6=P2^3; //蜂鸣器
bitBELL=0; //响铃标志
/**************************************/
/* /
/* 软件延时函数 /
/* /
/**************************************/
voiddelay10ms(void)
{
uchar i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
/**************************************/
/* /
/* 显示函数 /
/* /
/**************************************/
voiddisplay(uchar i,uchar number)
{
P2=i;
P1=disp[number];
}
/**************************************/
/* /
/* 定时器0中断处理函数 /
/* 用于定时一分钟 /
/**************************************/
void timer0(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
t++;
if(t==1200)
{
EA=0;
t=0;
bai=count/100;
shi=(count%100)/10;
ge= (count%100)%10;
if(count<60)//设置最低值
{
P0_0=0;
P3_6=0;
BELL=1;
}
else if(count>120) //设置最高值
{
P0_1=0;
P3_6=0;
BELL=1;
}
else
P0_2=0;
EA=1;
TR0=0; //开定时器0
ET0=0; //开定时器0中断
EX0=0; //开外部中断
}
}
/**************************************/
/* /
/* 定时器1中断处理函数 /
/* /
/**************************************/
voidtimer1_int(void) interrupt 3
{
TH1=-5000/256;
TL1=-5000%256;
bai=count/100; //提取三位数字
shi=(count%100)/10;
ge= (count%100)%10;
switch(i)//选择数码管位
{
case 0xfe: display(i,ge);break;
case0xfd: display(i,shi);break;
case0xfb: display(i,bai);break;
}
i=i<<1; //流水效果
i=i|0x01;
if(i==0xf7) //右移三位后置初值
i=0xfe;
if(BELL) //蜂鸣器响
{
P3_6=0;
}
}
/**************************************/
/* /
/* 初始化函数 /
/* /
/**************************************/
voidinit()
{
t=0;
TMOD=0x11; //定时器0,1的定时方式1都打开
TH1=-5000/256; //定时器1定时5ms
TL1=-5000%256;
TH0=0x3c; //定时器0定时50ms
TL0=0xb0;
EA=1; //开总中断
ET1=1; //开定时器1中断
TR1=1; //开定时器1
TR0=1; //开定时器0
ET0=1; //开定时器0中断
IT0=1; //下降沿促发
EX0=1; //开中断0
}
/**************************************/
/* /
/* 按键软件处理函数 /
/* /
/**************************************/
voidkey()
{
if(P2_4==0)
{
delay10ms();
delay10ms();
if(P2_4==0)
{
// TR0=1; //开定时器0
// ET0=1; //开定时器0中断
// EX0=1; //开外部中断
init();
count=0; //显示清零
BELL=0;
P0=0xff;
}
while(P2_4==0);//等待按键释放,如果键未释放则一直在此等待。不过此处开中断非计数可不写
}
}
voidmain()
{
//P3_2=0;
init();
TR0=0; //关定时器0
ET0=0; //关定时器0中断
EX0=0;
//P3_6=0;
while(1)
{
key();
}
}
voidint0(void) interrupt 0
{
count++;
}
#include<reg52.h>
sbit k0=p1^0;
sbit k1=p1^1;
sbit k2=p1^2;
sbit k3=p1^3;
sbit d0=p1^4;
sbit d1=p1^5;
sbit d2=p1^6;
sbit d3=p1^7;
sbit B0=p3^7;
sbit l0=p2^0;
sbit l1=p2^2;
sbit l2=p2^3;
sbit l3=p2^4;
sbit kz=p3^0;
unsigned char qiangdanum=0x3f;
unsigned char codetable[]={0x3f,0xxx,0x5b,0x4f,0x66,0x7d,0x07,0x7f,ox6f};
unsigned char ge=0,shi=0;
unsigned int num=0;time=0;
void display();
void display(unsigned int);
main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IT0=0;
EA=1;
ET0=1;
EX0=1;
{while(1)
{display();
if(kz==0)
TR0=1;
if(num==20)
{num=0;
time++;
if(time==60)
time=0;
}
}
}
}
void exter0() interrupt 0
{EA=0;l0=0;
if(k0==0)
{d0=0;qiangdanum=1;B0=1;
}
if(k1==0)
{d1=0;qiangdanum=2;B0=1;
}
if(k2==0)
{d2=0;qiangdanum=3;B0=1;
}
if(k3==0)
{d3=0;qiangdanum=4;B0=1;
}
}
void time0() interrupt 1
{num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void delay(unsigned int z)
{unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(void)
{shi=time/10;
ge=time%10;
p2=0xef;
p0=table[ge];
delay(5);
p2=0xf7;
p0=table[shi];
delay(5);
p2=0xFE;
p0=table[qiangdanum];
delay(5);
}
大哥,好歹给上个说明吧
同样问题
同样问题@!
学习了
大神啊,这么犀利
没有说明,没有业务方面的注释
单片机操作类的注释等于没有
求原理解释。
唉
求原理解释。
小编,有哦没有仿真图了
求原理解释。
PCB打样找华强 http://www.hqpcb.com 样板2天出货