帮我看一下这个程序有没有问题毕业生求求大佬们了

#include <reg51.h>

#include <stdio.h>

#include <1602.h>


unsigned int n,mb,Dispdata,time,moshi;

unsigned int shang=100,xia=60;


unsigned char code zifu0[]="0123456789abcdef";

unsigned char code zifu2[]="Pulse:  ci/min ";

unsigned char code zifu1[]=" Pulse Meter ";

unsigned char code zifu3[]="Max :  ci/min ";

unsigned char code zifu4[]="Min :  ci/min ";



#define INT8 char

#define UINT8 unsigned char

#define INT16 short

#define UINT16 unsigned short

#define INT32 int

#define  UINT32 unsigned int




sbit beer=P2^4;//报警引脚

sbit qiehuan=P1^0;//切换引脚

sbit jia=P1^1;//加键引脚

sbit jian=P1^2;//减键引脚




void delay(unsigned char DelayTime);



void main()     //主程序

{


beer=1;


lcd1602_init(); 


TMOD=0x01; //定时器T0工作于方式1

TH0=0x0fc;

TL0=0x18; //T0定时时间为1ms

IE=0X83; //开中断

IT0=1;   //外部中断0为边沿触发方式

TR0=1;   //开定时器T0


LCD1602_string(1,1,zifu1);

LCD1602_string(1,1,zifu1);

LCD1602_string(2,1,zifu2);




for(;;)  //脉搏指示灯控制

{

if(qiehuan==0)

{moshi=moshi+1;if(moshi==3)moshi=0;while(qiehuan==0);

if(moshi==0)

{

LCD1602_string(1,1,zifu1);

LCD1602_string(2,1,zifu2);

LCD1602_string(1,1,zifu3);

LCD1602_string(2,1,zifu4);

}

}

if(moshi==0)//显示是脉搏值和时间

{

lcd1602_adr(0x46);

lcd1602_writenumber(0x30+Dispdata/100);

lcd1602_writenumber(0x30+Dispdata%100/10);

lcd1602_writenumber(0x30+Dispdata%10);




if((Dispdata>shang)||(Dispdata<xia)) beer=0;//大于上限小于下限报警

else beer=1;


}

if(moshi==1)//设置上限值,加按下1次,加1 减按下1次减1

{

if(jia==0) {shang=shang+1;if(shang>150)shang=150;while(jia==0);}

if(jian==0){shang=shang-1;if(shang<60) shang=60; while(jian==0);}

lcd1602_adr(0x06);

lcd1602_writenumber(0x30+shang/100);

lcd1602_writenumber(0x30+shang%100/10);

lcd1602_writenumber(0x30+shang%10);

lcd1602_adr(0x46);

lcd1602_writenumber(0x30+xia/100);

lcd1602_writenumber(0x30+xia%100/10);

lcd1602_writenumber(0x30+xia%10);

lcd1602_adr(0x0f);

lcd1602_writenumber('<');

lcd1602_adr(0x4f);

lcd1602_writenumber(' ');

}

if(moshi==2)//设置下限值,加按下下限加1 减按下1次减1

{

if(jia==0) {xia=xia+1;if(xia>150)xia=150;while(jia==0);}

if(jian==0){xia=xia-1;if(xia<40)xia=40; while(jian==0);}

lcd1602_adr(0x06);

lcd1602_writenumber(0x30+shang/100);

lcd1602_writenumber(0x30+shang%100/10);

lcd1602_writenumber(0x30+shang%10);

lcd1602_adr(0x46);

lcd1602_writenumber(0x30+xia/100);

lcd1602_writenumber(0x30+xia%100/10);

lcd1602_writenumber(0x30+xia%10);

lcd1602_adr(0x0f);

lcd1602_writenumber(' ');

lcd1602_adr(0x4f);

lcd1602_writenumber('<');

}



}


}

external0() interrupt 0//外部中断服务程序

{


if(n==0)

{

mb=0;

}

else

{

time = n;    //保存间隔时间,单位毫秒

mb=60000/n;   //计算每分钟脉搏数 每分钟有60000ms,除以间隔时间则为每分钟脉搏数  

}



Dispdata=mb;  //保存数据用于显示


n=0; //清零

}


//定时时间为1ms

Timer0() interrupt 1//定时中断服务程序

{

TH0=0x0fc;

TL0=0x18;


n++;     //计数一毫秒加一次


if(n==10000)//10秒钟测不到心率,n复位

{

n=0;

}

}


emmm你不发1602.h,谁知道你1602.h里面写的啥啊

sbit RS=P2^5; //写信号

sbit RWW=P2^6; //读信号

sbit E=P2^7;  //使能信号


#define e1  E=1 

#define rd1 RWW=1  

#define rs1 RS=1  

#define e0  E=0 

#define rd0 RWW=0 

#define rs0 RS=0 

#define PP P0

//写1602控制字


void _delay_us(unsigned char t)

{

  while(t>0)t--;

}


void lcd1602_writecrtl(unsigned char dat)

{

 rd0;//读信号置0

 rs0;//写信号置0

 _delay_us(5);

 PP=dat;

 e1;//使能信号置1

 _delay_us(5);

 e0;//使能信号置0

}

//写1602数据

void lcd1602_writenumber(unsigned char dat)

{

 rd0;//读信号置0

 rs1;//写信号置1

 _delay_us(5);

 PP=dat;

 e1;//使能信号置1

 _delay_us(5);

 e0;//使能信号置0

}

//1602初始化

void lcd1602_init()  

{

 lcd1602_writecrtl(0x38); //显示模式

 lcd1602_writecrtl(0x06); //显示光标移动位置

 lcd1602_writecrtl(0x0c); //显示开及光标设置

 lcd1602_writecrtl(0x01); //显示清屏

}

//显示地址

void lcd1602_adr(unsigned char dat)  

{

 lcd1602_writecrtl(0x80 | dat);

}

//行显示-

void LCD1602_string(unsigned char hang,unsigned char lie,unsigned char const *p)

{

unsigned char a;

if(hang == 1) a = 0x00;

if(hang == 2) a = 0x40;

a = a + lie - 1;

lcd1602_adr(a);

while(1)

{

if(*p == '\0') break;

lcd1602_writenumber(*p);

p++;

}

}