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

📄 tlc1543.c

📁 用SST89C58,对微型打印机和液晶的显示
💻 C
📖 第 1 页 / 共 5 页
字号:
	  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;     /* 写入数据 */
            }
      }
}
/************************/
/*   CGRAM子程序函数    */
/************************/
void CGRAM()
{ uchar i,j;
      wcadd1 = 0x5c;  /* CGRAMADR 代码 */
      wdadd1 = 0x00;  /* 设置SAG=0x7000 */
      wdadd1 = 0x70;
      wcadd1 = 0x46;  /* CSRW 代码 */
      wdadd1 = 0x00;  /* 设置CSR=0x7400(字符代码=80H) */
      wdadd1 = 0x74;
      wcadd1 = 0x4c;  /* CSRDIR 代码 */
      wcadd1 = 0x42;  /* MWRITE 代码 */
      for(j=0; j<=2; j++)
      {
           for(i=0; i<32; i++)
           {
                 wdadd1 = CGTAB1[j][i];  /* 写入字模数据 */
           }
      }
}
/***************************/
/*  写汉字子程序(文本)函数 */
/***************************/
void TXT_S(uchar O_X, uchar O_Y, bit c, uchar *disp)
{
       while ((*disp!=0xff) && (*disp!=0xfe))
       {
              if (c) CCW2_PR(O_X, O_Y, *disp);
			         else CCW1_PR(O_X, O_Y, *disp);
	          O_X += 2;
	          *disp ++;
       }
}
/******/
/*画框*/
/******/
void DOT_s(uint o_x1, uint o_y1, uint o_x2, uint o_y2, bit c)
{ uint i;
      i = o_x1;
      while (i != o_x2) { W_DOT(i, o_y1); i++;}
      i = o_y1;
      while (i != o_y2) { W_DOT(o_x2, i); i++;}
      i = o_x2;
      while (i != o_x1) { W_DOT(i, o_y2); i--;}
      i = o_y2;
      while (i != o_y1) { W_DOT(o_x1,i ); i--;}
      if (c) return;
      i = o_x2 - 1; o_y2++; o_x1--;
      while (i != o_x1) { W_DOT(i, o_y2); i--;}
      i = o_y2;
      while (i != o_y1) { W_DOT(o_x1, i); i--;}
      i = o_x2 - 2; o_y2++; o_x1--;
      while (i != o_x1) { W_DOT(i, o_y2); i--;}
      i = o_y2; o_y1++;
      while (i != o_y1) { W_DOT(o_x1, i); i--;}
} 
/**********************/
/*文本方式显示单个汉字*/
/**********************/
void CCW1_PR(uchar O_X,uchar O_Y,uchar code_l)
{ uint i,j;
      i = PARA;
      j=i*O_Y + O_X;
      wcadd1 = 0x4f;      /* CSRDIR 代码(下移) */
      wcadd1 = 0x46;      /* CSRW 代码 */
      wdadd1 = j%256;     /* 设置光标地址 */
      wdadd1 = j / 256;
      wcadd1 =0x42;      /* MWRITE 代码 */
      wdadd1 = code_l;    /* 写入汉字代码 */
      wdadd1 = code_l + 1;  /* 写入汉字代码 */
      j++;
      wcadd1 = 0x46;      /* CSRW 代码 */
      wdadd1 = j%256;     /* 设置光标地址 */
      wdadd1 = j / 256;
      wcadd1 = 0x42;      /* MWRITE 代码 */
      wdadd1 = code_l + 2;  /* 写入汉字代码 */
      wdadd1 = code_l + 3;  /* 写入汉字代码 */
}
/***************************/
/*  写汉字子程序(图形)函数 */
/***************************/
void CCW2_PR(uchar O_X,uchar O_Y,uchar code_l)
{ uchar count1;
  uint i,j,a = 0;
      i = PARA;
	  j = i*O_Y + O_X + 0x3000;   /* 显示一区所控制的显示屏行数 如为320240屏k=j*O_Y+O_X+0x04ce*/
	  wcadd1 =0x4f;   /* CSRDIR 代码(下移) */
      for(i=0; i<2; i++)
      {
            wcadd1 = 0x46;      /* CSRW 代码 */
            wdadd1 = j % 256;     /* 设置光标地址CSR */
            wdadd1 = j / 256;
            wcadd1 = 0x42;    /* MWRITE 代码 */
            for(count1=i*16; count1<16*(i+1); count1++)
            {
                 wdadd1=CGTAB[code_l][count1]; /* 写入数据 */
            }
            j = j + 1;
      }
}
 /********************************/
/*  写汉字子程序(图形)函数 24*24 */
/*********************************/
void CCW2_PR24(uchar O_X,uchar O_Y,uchar code_l)
{ uchar count1;
  uint i,j,a = 0;
      i = PARA;
      j = i*O_Y + O_X + 0x3000;   /* 显示一区所控制的显示屏行数 如为320240屏k=j*O_Y+O_X+0x04ce*/
      wcadd1 = 0x4f;   /* CSRDIR 代码(下移) */
      for(i=0; i<3; i++)
      {
           wcadd1 = 0x46;      /* CSRW 代码 */
           wdadd1 = j%256;     /* 设置光标地址CSR */
           wdadd1 = j / 256;
           wcadd1 = 0x42;    /* MWRITE 代码 */
          for(count1=i*24; count1<24*(i+1); count1++)
          {
             wdadd1 = CGTAB24[code_l][count1]; /* 写入数据 */
          }
          j=j+1;
      }
}
/***********************/
/*      绘点函数       */
/***********************/
void W_DOT(uint O_X,uint O_Y)
{ uchar i,j,dat;
  uint k;
      j = PARA;
      i = O_X%8;
      O_X = O_X / 8;
                       	     /* 显示一区所控制的显示屏行熟 如为320240屏k=j*O_Y+O_X+0x4ce*/
      k = j*O_Y + O_X + 0x3000;    /*写入位地址的表达式*/
      wcadd1 = 0x4f;
      wcadd1 = 0x46;  /* 设置光标地址 */
      wdadd1 = k % 256; /* 计算光标地址 */
      wdadd1 = k / 256;
      i = 7-i;
      O_Y = 0x01 << i;/* 计算显示位 */      
      wcadd1 = 0x43;  /* MREAD 代码 */
      dat = rdadd1;   /* 读取当前显示数据 */
      wcadd1 = 0x46;  /* 设置光标地址 */
      wdadd1 = k % 256;  /* 计算光标地址 */
      wdadd1 = k / 256;
      wcadd1 = 0x42;  /* MWRITE 代码 */
      wdadd1 = dat | O_Y;  /* 写入合成数据 */
}
void Link(uint o_x, uint o_y, uint n, bit c)
{ uint i;
  uchar j, k;
      if (c) 
	  {
	         for (j=0; j<=4; j++) { W_DOT(o_x-j,o_y+j); W_DOT(o_x+j,o_y+j);}
	  }
      j=0;
      for (i=0; i<n; i++)
	  { 
             W_DOT(o_x, o_y);
             if (c) 
			 {
			       if (i == Dot_s10[j]) 
				   {
				           for (k=0; k<=5; k++) W_DOT(o_x-k, o_y);
					       for (k=0; k<=1 ;k++) CW_PR1(k,Dot_s2[j], string_3[j][k]);
					       j++;
				   }
				   o_y++;
			 }
				   else 
				   {
				           if (i == Dot_s11[j]) 
						   {
						           for (k=0; k<=5; k++) W_DOT(o_x,o_y+k);
					               for (k=0; k<=3 ;k++) CW_PR1(Dot_s3[j]+k, 29, string_4[j][k]);
								   j++;
					       }
					       o_x++;
					}
	  }
      if (c == False)
	  {
	         for (j=0; j<=4; j++) { W_DOT(o_x-j, o_y-j); W_DOT(o_x-j, o_y+j); }
	  }
}
//*************************************************************
void delay(void)
{ uint i;
  for (i=0; i<10000; i++)
    {
         _nop_();
    }
}
void delay_2()
{ uint i;
  for (i=0; i<35500; i++)
    {
         _nop_();
    }
}
/********定时1ms***********/
void delay3(uint Tm_count)
{
  uint i;
  while (Tm_count--)
  {
         for (i=0; i<125; i++) {};
  }
}
/********************/
/*发送一个指令给MC51*/
/********************/
void TXD_c(uchar i)
{ uchar a;
  bit FLAG_1 = 0;
      out = 0;
   	  Master =0 ;
	  FLAG_1 = 0;
      for (a=0; a<0x10; a++);
      for (a=0;a<0xff;a++)
	  { 
	       if (Second == False) 
		   {
			       i =~ i; P1 &= i; Master = 1; out = 1;
				   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); 
			       FLAG_1 = 1;P1 |= 0x3f; break;
           } 
		          else continue;
		    break;
       }
	   if (FLAG_1 == False) Bad = False;
		      else Bad = 1;
       out=1;
       P1 |= 0x3f;
       delay();
	   Master = 1;
      
} 
/******************/
/*向MC51读一个按键*/
/******************/
uchar RXD_c()
{ uchar k,i; 
      for (k=0; k<0xff; k++)
      {
             if (Second != False) continue;
             Master = 0;
             while (!Second);
	         _nop_(); _nop_();
	         i = P1; i |= 0xf0; i=~ i;
	         Master = 1;
             //SBUF=i;while(!TI);TI=0;
             return(i);
   	  }
      return(0);
}
/******************/
/*产生输液量的定时*/
/******************/
void Time_0(void) interrupt 1
{ 
  static uchar count; 
  static uchar C2;
       TR0 = 0;
       EA  = 0;
	   TH0 = TH0_T;
       TL0 = TL0_T;
       if (count >= 10)  
       {    
	         count = 0;
	         switch (Speed_V)
	         {   case 0:
			     { 
				       V_ml++; C_run = 1;
				 } break;
		         case 1:
				 { 
				       if (C2 < 1) { C2++; break; } 
					   V_ml++; C2 = 0; C_run = 1;
				 } break;
			     case 2:
				 {
				       if (C2 < 3) { C2++; break; }
				       if (DJ_back) V_ml--;
					       else V_ml++;
					   C2 = 0; C_run = 1;
				 } break;
			     default: Speed_V = 0; break;
		     }
		  
	     }
               else count++;
         EA = 1;
         TR0 = 1;
}
/*******************************/
/************串口接收***********/
/*******************************/
void RS232(void) interrupt 4
{   
    static uchar RS_count;
    uchar i;
	EA = 0;
	ES = 0;
    RI = 0;
    i  = SBUF;
    switch (RS_count)
       {
           case 0:
		   {
		        RS_buf[0] = i;
				RS_count++;
		   } break; 

           case 1:
		   {
		        if (i+RS_buf[0] == 0xff) 
				{
				     Bad = 1; RS_count = 0; RS_input = 1;
		             if (RS_buf[0] == 0x0a) send_kpa = 1;
		        }
 		             else { Bad = 0; RS_count = 0;}
	       } break;
          

⌨️ 快捷键说明

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