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

📄 复件 (2) demo2.c

📁 用SST89C58,对微型打印机和液晶的显示
💻 C
📖 第 1 页 / 共 5 页
字号:
	         }
      
             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();
                if (i == 3)
	            {  
		             save();  
		             Print_40(0, 1);
			         break;
		        }
				if (i == 5) break;
		  } while (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);
}
/***************MAX192********************/
/* i为通道号,当o_x,o_y都为0时不显示*/
void Max192(uchar i,uchar o_x,uchar o_y,bit set)
{ uchar j,k;
  uchar *p;
         if (i <= 7) k = i;       /* 通道数为0--7 */
 for (j=0; j<=3; j++)
 {       AD = k;
         io_clock = 0;
         data_in = 0;
         io_cs = 0;
         AD <<= 4;
         AD |= 0x8e;
         for (i=0; i<8; i++)
		 {
		           data_in = AD_7;_nop_();_nop_();_nop_();
                   io_clock = 1;_nop_();_nop_();_nop_();
	               io_clock = 0;_nop_();_nop_();_nop_();
                   AD <<= 1;
		 }
         _nop_();_nop_();io_cs=1;//
         AD = 0;
         for (i=0; i<=32; i++){;};
         io_cs = 0; _nop_(); _nop_(); _nop_();
         io_clock = 1;_nop_(); _nop_();
         io_clock = 0; _nop_(); _nop_(); _nop_();
         AD_1 = data_out; _nop_();
		 io_clock = 1; _nop_(); _nop_();
         io_clock = 0; _nop_(); _nop_();
         AD_0 = data_out; _nop_();
         Adend = 0;
         for (i=0; i<8; i++) 
		 {
		           Adend <<= 1;
                   io_clock = 1; _nop_(); _nop_(); _nop_();
                   io_clock = 0; _nop_(); _nop_(); _nop_();
	               Adend_0 = data_out;
		 }
         _nop_(); _nop_(); 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<25 && k==0) 
   {
            p = TXT_5; TXT_S(15, 160, 1, p); 
            DJ_run = FALSE; TR0 = FALSE; ET0 = 0; 
			TXD_c(3);TXD_c(9);TXD_c(10);while(1); 
   }
   if (set == FALSE) Adend = Adend - AD_Value;
   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 ));
      switch(i)
	  {
              case 1:
			  {      
			         sound(FALSE,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:
			  {
			         sound(FALSE,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 == 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: 
		      {
			         sound(FALSE,1);
		             TXD_c(2); 
                     do 
                     {       
                              i = RXD_c();
                     } while (i == 6);
                     TXD_c(3);
					 TXD_c(9);
			  } break;
              default:  break;
	  }
	  delay4(1);
 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;             // 块状
	  Io8155 = 0x0e;             // C为0x02入,0x0e出
      Io8155_c = 0x3f;
      SFCF = 0xc0;
      i = AD_set;
	  p = &AD_set;
	  if (i == 0xff)
	  {
         AD_Value = 0;
	     save_data(p, 0);   
         SFCF=0x00;
	  }
	     else AD_Value = i;

}
/*************************/
/*    清屏子程序函数     */
/*************************/
void CLEAR()
{     uint i, j;
      wcadd1 = 0x4c;   /* CSRDIR 代码 */
      wcadd1 = 0x46;   /* CSRW 代码 */
      wdadd1 = 0x00;   /* 设置参数光标指针低8位 */
      wdadd1 = 0x00;   /* 设置参数光标指针高8位 */
      wcadd1 = 0x42;   /* MWRITE 代码 */
      for(j=0; j<560; j++)       /*清64K的显示存储器*/
      {
            for(i=0; i<40; i++)     /*写入一行*/
            {
                   wdadd1 = 0x00;     /* 写入数据 */

⌨️ 快捷键说明

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