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

📄 tlc1543.c

📁 用SST89C58,对微型打印机和液晶的显示
💻 C
📖 第 1 页 / 共 5 页
字号:
			 { 
				        if (DJ_back == False)
					    {
		                      if (V_ml < 1) goto KG5; 
						      DJ_back = 1; TXD_c(1);
						}
             }

KG1:         if (P_max2 < Adend) P_max2 = Adend;  
             if (C_run)
	         {
	               C_run = False;
	               if (DJ_back) 
			       { 
			             if (b >= 10)   
			             {     
						       if (Adend > P_max) goto KG5;   /* 如果后退1ML,还大于设定压力.则停止 */
				               DJ_back = 0; TXD_c(2); b += 2;
				         } 
				               else b++;
				         if (V_ml <= 1)                       /* 如果后退时总输液量小于0.1ML时,则停止 */
					     {     
						       if (Adend > P_max) goto KG5; 
					           DJ_back = 0; TXD_c(2);
						 }
			       }
                         else  {  if (b > 0) b--;  }            
	               if (DJ_back==0 && b==0) Disp_2(Adend / 3);
			       if (over == 0) Display(23, 7 , 3, 5, V_ml, 1);
                   if (V_ml >= 100)
			       {
			              DJ_run = 0; TR0 = 0; ET0 = 0; TXD_c(3); over = 1;
				          Disp_msg(16, 16, 11);
				          do { i = RXD_c(); } while (i == 0);
                          goto KG4;
			       }
	         }
      
             if (DJ_run) 
	         {    
		            if (Paus == False) 
		            { 
			               if (pause == False) {pause = True;TR0 = False;ET0 = False;TXD_c(3);Disp_msg(16, 16, 2);}
                    }
                           else 
				           {   
				                 if (pause) {pause = False;TR0 = True;ET0 = True;TXD_c(2);Disp_msg(16, 16, 1);}
				           }
	         }
             i = RXD_c();
             if (i == 4) 
	         {
	                if (DJ_run == True) 
			        { 
			                DJ_run = False;TR0 = False;ET0 = False; TXD_c(3);
			                Disp_msg(16,16,2);
					        continue;
			        }
	                DJ_run = 1; TR0 = 1; ET0 = 1; TXD_c(2);
			        Disp_msg(16, 16, 1);
	         }
             if (i == 1) { if (P_max < 500) P_max += 10; }
	         if (i == 2) { if (P_max > 260) P_max -= 10; }
      
	  } while(i != 5);
KG5:  Disp_msg(16, 16, 4); TXD_c(3); DJ_run = 0; TR0 = 0; ET0 = 0;
	  do
	  {      
	         i = RXD_c();
             if (i == 5) { TXD_c(2); Disp_msg(16, 16, 1); DJ_run = 1; TR0 = 1;ET0 = 1; goto KG1; }
		     if (i == 3) break;		  
				    
	  } while (1); 
KG4:  Disp_msg(16, 16, 6);
      P_max = P_max2;
	  do { i = RXD_c(); } while(!(i==3 || i==5));
	  if (i == 3)
      {
		      save();  
		      Print_40(0, 1);
	  }
      Disp_msg(16,16,0);
}
/***************************************/
/**************画压力曲线***************/
/***************************************/
/* ad 为显示的压力值,并把数据存在8155中 */
void Disp_2(uchar ad)
{ 
       uchar i,j;
       uchar *p;
       uchar xdata *mem;
                  j = 219-ad;
				  i = V_ml; i--;
	              mem = &M8155;
                  mem = mem + i;
				  *mem = ad;
                  if (V_ml == 1) save_y = j;
	              if (save_y > j) 
                  {
                         for (i=0; i<=save_y-j; i++) W_DOT(15+V_ml, save_y-i);
                  }
				      else 
                  {
                         for (i=0; i<=j-save_y; i++) W_DOT(15+V_ml, save_y+i);
                  }
				  save_x = 15 + V_ml;
	              W_DOT(save_x, j);
				  save_y = j;
	              p = &string5[zs][0];
				  if (zs >= 4) zs = 0;  else zs++;
}
/****************************************************/
/********************输液量显示**********************/
/****************************************************/
void Display(uchar o_x, uchar o_y, uchar id, uchar id1, uint x, bit open)
{ 
      uchar *p;
      uchar i;
      p = M_D.list;
	  if (id==4 || id==5) i = 3;
	        else i=8;
	  strcpy(p, str_3[id]);
	  p = &M_D.list[i-3];
	  sprintf(p,"%u",x);
      if (x <= 9) 
	  {
	        M_D.list[i] = M_D.list[i-3];
		    M_D.list[i-1] = 0x2e;
			M_D.list[i-2] = 0x30; 
			M_D.list[i-3] = 0x30;
			goto Disp_1;
	  }
      if (x <= 99)
	  {
	        M_D.list[i] = M_D.list[i-2];
			M_D.list[i-1] = 0x2e;
			M_D.list[i-2] = M_D.list[i-3];
			M_D.list[i-3] = 0x30;
			goto Disp_1;
	  }
            else  
			{
			    M_D.list[i] = M_D.list[i-1];
				M_D.list[i-1] = 0x2e;
			}
Disp_1:
      p = &M_D.list[i+1]; 
	  strcpy(p, str_3[id1]); 
	  M_D.list[i+4] = 0xff;
	  p = M_D.list;
	  if (open) CW_PR(o_x, o_y, p);
}
/***************************************/
void Disp_msg(uint o_x, uchar o_y, uchar n)
{ uchar *p;   
      p = &Msg[n][0];
	  TXT_S(o_x, o_y, 1, p); 
	  DOT_s(o_x*8-4, o_y-4, o_x*8+66, o_y+19, 1);
}
/***************TLC1543********************/
/* i为通道号,当o_x,o_y都为0时不显示*/
/* io_clock,io_cs,data_in,data_out */
/*****************************************/
void Max192(uchar i,uchar o_x,uchar o_y,bit set)
{ uchar j,k;
  //uchar *p;
         if (i <= 0x0f) k = i;       /* 通道数为0--7 */

 for (j=0; j<=3; j++)
 {       
         io_clock = 0;
		 io_cs= 0;
         AD = k;
		 AD <<= 4;
		 for (i=0; i<4; i++)   //把通道号打入1543
		 {
		     data_in = (bit)(AD&0x80);io_clock=1; _nop_(); io_clock=0; _nop_();
             AD <<= 1;
         }
         for (i=0; i<6; i++)  //填充6个CLOCK
		 {
              io_clock=1; _nop_(); io_clock=0; _nop_();
		 }
         io_cs = 1;
         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();
         io_cs = 0;                //等待AD转换
		 _nop_(); _nop_();_nop_();
         AD = 0;
		 for (i=0; i<2; i++) //取D9,D8
         {
               data_out=1;
               io_clock=1;
               AD <<= 1;
               if (data_out) AD|=0x01;
               io_clock=0;
         } 
         Adend = 0;
         for (i=0; i<8; i++) //取D7--D0
         {
               data_out = 1;
               io_clock = 1;
               Adend <<= 1;
               if (data_out) Adend_0 = 1;
               io_clock = 0;
         } 
		 io_cs = 1;
		 Adend_8 = AD_0; Adend_9 = AD_1;
         M_D.A_data[j] = Adend;
 }
    Adend = (M_D.A_data[0] + M_D.A_data[1] + M_D.A_data[2] + M_D.A_data[3]) / 4;
    //if (Adend > 900) Adend = 0;
    //AD = 0; AD_0 = Adend_8; AD_1 = Adend_9;
    data_in = 1; io_clock = 1;
    if (o_x != 0)  Display(o_x, o_y, 2, 4, Adend, 1);
}
/**************************************/
void disp_3(uchar O_X, uchar O_Y, uchar h_ox, uchar l_oy, uchar *p)
{   uchar i = 0,j = 0;
    i = O_X; j = O_Y;
    DOT_s(100, 62, 222, 216, 0);
    while (*p != 0xff)
    { 
	      if (*p == 0xfe) {j = j + l_oy; *p++; i = O_X; continue;}
          CCW2_PR(i, j, *p);
	      i = i+h_ox;
	      *p++;
    }
    //i = O_X - 2; j = O_Y + (menu*l_oy); CCW2_PR(i, j, 15);
    //i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8)); TXT_S(i, j, 0, p=TXT_1);
}

//**************菜单选择******************/
uchar choose(uchar O_X,uchar O_Y,uchar h_ox,uchar l_oy,uchar *p)
{     
      uchar i = 0, j = 0;
      //ZD();
      //bit ok = 0;
      i = O_X; j = O_Y;
      //O_X = 100; O_Y = 70; k = 222;
      disp_3(O_X, O_Y, h_ox, l_oy, p);
      i = O_X - 2; j = O_Y + (menu * l_oy);
	  CCW2_PR(i, j, 15);
      i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
	  TXT_S(i, j, 0, p=TXT_1);
di:	  
      do
	  {   
	       read_time(1,1,1);
	       
           i = RXD_c();

	  } while (!(i==1 || i==2 || i==3 || i==6 || i==7));
      switch(i)
	  {
              case 1:
			  {      
			         i = O_X - 2; j = O_Y + (menu * l_oy);
					 CCW2_PR(i, j, 23);
		             i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
					 TXT_S(i, j, 0, p=TXT_2);
		             if(menu == 0) menu = 5; 
					       else menu--;
			         i = O_X; j = (O_Y / 8) +( menu*(l_oy / 8));
					 TXT_S(i, j, 0, p=TXT_1);
			         i = O_X - 2; j = O_Y + (menu * l_oy);
					 CCW2_PR(i, j, 15);
			  } break;
	          case 2:
			  {
	                 i = O_X - 2; j = O_Y + (menu * l_oy);
					 CCW2_PR(i, j, 23);
		             i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
					 TXT_S(i, j, 0, p=TXT_2);
		             if(menu == 5) menu = 0;
					       else menu++;
			         i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
					 TXT_S(i, j, 0, p=TXT_1);
			         i = O_X - 2; j =O_Y + (menu * l_oy);
					 CCW2_PR(i, j, 15);
			  } break;
	          case 3:  return(menu + 1); break;
	          case 6: 
		      {
		             TXD_c(2); 
                     do 
                     {       
                              i = RXD_c();
                     } while (i == 6);
                     TXD_c(3);
			  } break;
			  case 7: temperature(); break;
              default:  break;
	  }
 goto di;
}
/**********************/
/*   西文子程序函数   */
/**********************/

void CW_PR(uint O_X, uint O_Y, uchar *p)
{     
      uchar i;
      uint j;
      i = PARA;
      j = i*O_Y + O_X;
      wcadd1 = 0x46;   /* CSRW 代码 */
      wdadd1 = j % 256;  /* 设置光标地址CSR */
      wdadd1= j / 256;
      wcadd1 = 0x4c;   /* CSRDIR 代码 */
      wcadd1 = 0x42;   /* MWRITE 代码 */
      while (*p != 0xff)
      {
            wdadd1=*p++;  /* 写入数据 */
	  }
}
void CW_PR1(uint O_X, uint O_Y, uchar p)
{ 
      uchar i;
      uint j;
      i = PARA;
      j = i*O_Y + O_X;
      wcadd1 = 0x46;   /* CSRW 代码 */
      wdadd1 = j % 256;  /* 设置光标地址CSR */
      wdadd1 = j / 256;
      wcadd1 = 0x4c;   /* CSRDIR 代码 */
      wcadd1 = 0x42;   /* MWRITE 代码 */
      wdadd1 = p;  /* 写入数据 */

}
/************************/
/*   初始化子程序函数   */
/************************/
void INT_1()
{ uchar i;
  uchar code *p;

      wcadd1=0x40;   /* SYSTEM SET代码 */
      for (i=0; i<8; i++)
      {
           wdadd1 = SYSTAB[i];  /* 写入参数 */
      }
      wcadd1=0x44;   /* SCROLL代码 */
      for(i=0; i<10; i++)
      {
           wdadd1 = SCRTAB[i];   // 写入参数 
      }
      wcadd1 = 0x5a;             // HDOT SCR 代码 
      wdadd1 = 0x00;             // 设置参数P1 
      wcadd1 = 0x5b;             // OVLAY 代码 
      wdadd1 = 0x01;             // 设置参数:显示一,三区为文本属性 
      CLEAR();                   // 调清屏子程序 
      wcadd1 = 0x59;             // 显示状态设置 
      wdadd1 = 0x54;             // 设置参数:显示一~四区开显示 
      wcadd1 = 0x5d;             // 设光标形状 
      wdadd1 = 0x05;
      wdadd1 = 0x87;             // 块状

⌨️ 快捷键说明

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