⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heart0.c.c

📁 心电图仪源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
   { delay(50);//50ms扫一次键盘
     keyscan();
     putcom(0xcc);//显示键码
	 putchar(keycode/10+0x30);
     putchar(keycode%10+0x30);
     keyinit();
   }
   while(keycode<15);//按15号键退出
  putcom(0x00);putcom(0x80);
  putstr(str3,14);//over
  delay(800);
}
/*---------------RAM检测程序------------*/
void ram_test(void)
{uint i,a=0x0000;uchar temp;
 putcom(0x00);putcom(0x80);
 putstr(str6,16);//begin
 delay(800);
 putcom(0x00);
 putcom(0x80);
 putstr(test,13);
 delay(500);
 for(i=0;i<0x8000;i++)
  {XBYTE[a]=0x00;
   temp=XBYTE[a];
   if(temp==0x00);
   else
   {putcom(0xc1);
    putchar(i/10000+0x30);
    putchar(i%10000/1000+0x0030);
	putchar(i%1000/100+0x0030);
	putchar(i%100/10+0x0030);
	putchar(i%10+0x30);
	putchar(0x20);
    putstr(error,6);
	delay(100);
	putcom(0xc0);
	putcom(0x00);
   }
   a++;
 }
 delay(800);
 putcom(0x00);putcom(0x80);
 putstr(str7,14);//over
 delay(800);
}
/*-------------时钟检测----------------*/
void clock_test(void)
{uchar time[7],i,j;
 v_Set1302(t_init);    //时钟初始化
 putcom(0x00);putcom(0x80);
 putstr(str8,15);
 for(i=0;i<20;i++)
   {
   v_Get1302(time);
   j=time[6]; 
   putcom(0x00);
   putcom(0xc0);
   putchar(((j>>4)&0x0f)+0x30);//年
   putchar((time[6]&0x0f)+0x30); 
   putchar('/');
   j=time[4];                //月 
   putchar(((j>>4)&0x0f)+0x30); 
   putchar((time[4]&0x0f)+0x30); 
   putchar('/'); 
   j=time[3];                //日
   putchar(((j>>4)&0x0f)+0x30);  
   putchar((time[3]&0x0f)+0x30);  
   putcom(0x8c);
   putchar(time[5]+0x30);//星期
   putcom(0xc3);
   j=time[2];      //时
   putchar(((j>>4)&0x0f)+0x30);
   putchar((time[2]&0x0f)+0x30);
   putchar(':');
   j=time[1];      //分 
   putchar(((j>>4)&0x0f)+0x30);
   putchar((time[1]&0x0f)+0x30);
   putchar(':');
   j=time[0];      //秒
   putchar(((j>>4)&0x0f)+0x30);
   putchar((time[0]&0x0f)+0x30); 
   delay(250);
   }
 putcom(0x00);putcom(0x80);
 putstr(str9,16);
 delay(800);
}


/******************************键盘服务程序区***********************************/
void disp0(void) //system test
{putcom(0x01);putcom(0x80);
 putchar(0x7e);
 putstr(str12,11);
}
void disp1(void)//single 1
{putcom(0x01);putcom(0x80);
 putchar(0x7e);
 putstr(str13,8);

}
void disp2(void)//single 2
{putcom(0x01);putcom(0x80);
 putchar(0x7e);
 putstr(str14,8);

}
void disp3(void)//chop
{putcom(0x01);putcom(0x80);
 putchar(0x7e);
 putstr(str15,4);

}
void disp4(void)//回放
{putcom(0x01);putcom(0x80);
 putchar(0x7e);
 putstr(str16,6);

}

/*-------------检测程序------------*/
void testall(void)
  { lcd_test();//液晶检测(1602)
   keyboard_test();//键盘检测
   ram_test();//62256检测
    clock_test();//时钟检测
  }
/*------------显示键控程序-----------------------*/
void key_switch2(void)
{if((PC8255&0x0f)==0x0f);//无键按下
 else
   {delay(30);
    if((PC8255&0x0f)==0x0f);
	else
	{keyscan();
	 delay(50);
     switch(keycode)
     {case 1:if(Ax<255){ Ax=Ax+1;XCON=Ax;} //x加
      break;
      case 5:if(Ax>2)  { Ax=Ax-1;XCON=Ax;} //x减
      break;
      case 2:if(Ay<255){Ay=Ay+1;YCON=Ay;}  //y加
      break;
      case 6:if(Ay>2)  {Ay=Ay-1;YCON=Ay;}  //y减
      break;
      default:
      break;
     }
	}
   }
}
/*--------数据转换以实现存储地址循环------------*/ 
uint dp(uint x,uint i)
{if((i+x-256)>0x4000)
  return(i+x-256);
 else
  return(i+x+0x4000-256);
}
/*------------第一路信号存储输出---------------*/
void single1(void)
 {uint i=0x4000,x;
  putcom(0xc0);
  putstr(str17,11);
  do
  {A0=0;
   START=1;START=0;//启动转换
   while(EOC==0);
   OE=1;
   XBYTE[i-0x4000]=P0;   //存取数据
   OE=0; 
   for(x=0;x<256;x++)//输出一屏 (256点)
   {XOUT=x;
    YOUT=XBYTE[dp(x,i)-0x4000];
   }
   i=(i++)%0x8000+0x4000;
   key_switch2();
  }
  while(keycode!=3);// 是否返回
 }


/*------------第二路信号存储输出---------------*/ 
void single2(void)
 {uint i=0x4000,x;
  putcom(0xc0);
  putstr(str17,11);
  do
  {A0=1;
   START=1;START=0;//启动转换
   while(EOC==0);
   OE=1;
   XBYTE[i]=P0;   //存取数据
   OE=0;
   for(x=0;x<256;x++)//输出一屏 (256点)
   {XOUT=x;
    YOUT=XBYTE[dp(x,i)];
   }
   i=(i++)%0x8000+0x4000;
   key_switch2();
  }
  while(keycode!=3);// 是否返回
 }

 /*----------两路信号同时输出------------------*/ 
 void chop(void)
 {uint i=0x4000,x;
  putcom(0xc0);
  putstr(str17,11);
  do
  {A0=0;//采集第一路
   START=1;START=0;//启动转换
   while(EOC==0);
   OE=1;
   XBYTE[i-0x4000]=P0;   //存取数据
   OE=0;
   A0=1;//采集第二路信号
   START=1;START=0;//启动转换
   while(EOC==0);
   OE=1;
   XBYTE[i]=P0;   //存取数据
   OE=0;
   for(x=0;x<256;x++)//输出一屏 (256点)
   {XOUT=x;
    YOUT=(uchar)(XBYTE[dp(x,i)]/2);
	YOUT=(uchar)(XBYTE[dp(x,i)-0x4000]/2+128);
   }
   i=(i++)%0x8000+0x4000;
   key_switch2();
  }
  while(keycode!=3);// 是否返回
 }
 /*----------------回放----------------------*/  
 void review(void)
 {uint i=0x4000,x;
  putcom(0xc0);
  putstr(str17,11);
  do
  {for(x=0;x<256;x++)//输出一屏 (256点)
   {XOUT=x;
    YOUT=(uchar)(XBYTE[dp(x,i)]/2);
	YOUT=(uchar)(XBYTE[dp(x,i)-0x4000]/2+128);
   }
   i=(i++)%0x8000+0x4000;
   key_switch2();
  }
  while(keycode!=3);// 是否返回
 }
  

/*******************************按键控制区***********************************/

/*-------------键状态数组--------*/

  KeyTabStruct code KeyTab[SIZE_MENU]=
{
  
  {0,1,4,5,0,disp0},
  {1,2,0,6,1,disp1},
  {2,3,1,7,2,disp2},
  {3,4,2,8,3,disp3},
  {4,0,3,9,4,disp4},

  {5,0,0,0,0,testall},
  {6,1,1,1,1,single1},
  {7,2,2,2,2,single2},
  {8,3,3,3,3,chop},
  {9,4,4,4,4,review},
};

/*----------键盘散转程序-------------------*/
void key_switch(void)
{delay(10);
 switch(keycode)
 {
   case 0:
   KeyFuncIndex=KeyTab[KeyFuncIndex].Keyupstate;
   break;
   case 4:
   KeyFuncIndex=KeyTab[KeyFuncIndex].Keydnstate;
   break;
   case 7:
   KeyFuncIndex=KeyTab[KeyFuncIndex].Keycrstate;
   break;
   case 3:
   KeyFuncIndex=KeyTab[KeyFuncIndex].Keybkstate;
   break;
   default:
   break;
 }
 keyinit();
 KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperation;

}
/*************************主程序***************************/


main()
{  COM8255=0x81;
   delay(800);
   COM8255=0x81;
   putcom(0x80);
   putcom(0x01);
   putir(ir,5);
   putstr(str,8); 
   delay(800);
   XCON=Ax;YCON=Ay;     //送幅度控制字
   keyinit();           //键盘初始化   
   disp0();             //进入菜单
   while (1)
   { while((PC8255&0x0f)==0x0f);// 等待按键
     delay(30);
	 while((PC8255&0x0f)==0x0f);// 去抖
     keyscan();	
	 delay(50);
     key_switch();
    (*KeyFuncPtr)();//执行当前按键的操作
   }

}
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -