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

📄 复件 demo2.c

📁 用SST89C58,对微型打印机和液晶的显示
💻 C
📖 第 1 页 / 共 5 页
字号:
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 == 0)
	  {
	         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_();
    }
}
/********************/
/*发送一个指令给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 == 0) 
		   {
			       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 == 0) Bad = 0;
		      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 != 0) 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;
           
       }
    ES = 1;
    EA = 1;  
}
/*******************************/
/**********电机复位*************/
/*******************************/
void Reset(bit c)
{ 
  uchar i;
  uint O_X;
  uchar *p;
       if (c == 0) { p=&Msg[0][0]; TXT_S(16, 160, 1, p); }
       Max192(0, 0, 0);
       if (Adend < 30) { p = TXT_5; TXT_S(15, 160, 1, p); while(1); }
       TXD_c(12);
       TXD_c(4);
	   Master = 0;
       if (Back) 
	   {
	         i = 1; TXD_c(i); 
			 while (Back);
			 i = 3; TXD_c(i);
		}
             else 
			 {
			       i = 2; TXD_c(i);
	               for (O_X=0; O_X<65535; O_X++) { for (i=0;i <0x05; i++); }
			       if (Back == 0) 
				   {
				          i = 3; 
						  TXD_c(i);Disp_msg(16,160,15);
						  while(1);
				   } 
				          else { i = 1; TXD_c(i); while(Back); i = 3; TXD_c(i); }
             }
        if (c == 0) { p= TXT_3; TXT_S(16, 160, 1, p);}
        TXD_c(11); TXD_c(4);
        Master = 1;
}
/****************************************/
/*************向计算机发数据*************/
/****************************************/
bit TXD_pc(uchar i)
{ 
    EA = 0;
    ES = 0;
    if (i != 0)
	{
            SBUF = 0x80; while(!TI); TI = 0;
            SBUF = i; while(!TI); TI = 0;
            SBUF = 0xff - i; while(!TI); TI = 0;
                
   	}
	      else   
		  {    
	            SBUF = 0x90 + AD; while(!TI); TI=0;
	            SBUF = Adend; while(!TI); TI=0;
                SBUF = 0xff - AD; while(!TI); TI=0;
            } 
  
  ES=1;
  EA=1;
  delay();
  return(0);
}
/*******************************************/
/***************读时钟**********************/
/*******************************************/
void read_time(uchar o_x,uchar o_y,bit open)
{ 
  uchar i,j,k;
  uchar t[7];
  uchar *p;
  uchar xdata *addr;
             addr=&timeadd2;                       
			 t[0]=0x20;
             t[1]=timeadd2;
			 t[2]=*(addr-1);
			 t[3]=*(addr-2);
			 t[4]=*(addr-5);
			 t[5]=*(addr-7);
			 t[6]=*(addr-9);
             M_D.list[0]=0x32;
             M_D.list[1]=0x30;
			 k=0; 
 /********************************/
             for (j=1;j<=6;j++)
			 {
             i=t[j]/10;
			 i&=0x0f;
			 i=i+0x30;
			 M_D.list[j*2+k]=i;
			 i=t[j]%10;
             i&=0x0f;
			 i=i+0x30;
             M_D.list[j*2+1+k]=i;
             M_D.list[j*2+2+k]=time[j-1];
			 k++;
			 }
             p=M_D.list;
     		 if (open) CW_PR(o_x,o_y,p);
  }
/********************************************/
/*****************写时钟*********************/
/********************************************/
void write_time(uchar o_x,uchar o_y)
{ uchar xdata *p;
  uchar *d;
  uchar i;
  uchar j,k;
  uchar t[6];
  
  bit s;
             wcadd1=0x59;
			 wdadd1=0x56;

             p=&timeadd2;                       
			 t[0]=timeadd2;
			 t[1]=*(p-1);
			 t[2]=*(p-2);
			 t[3]=*(p-5);
			 t[4]=*(p-7);
			 t[5]=*(p-9);
			 o_x+=2;
             set_xy(o_x+1,o_y);

  for (i=0;i<=5;i++)
        { s=1;
		 do { //  k=1;
		       k=RXD_c();
			   if (k==1) 
			        {            if (t[i]==time_x[i][1]) t[i]=time_x[i][0]; 
						           else t[i]++;         
					           ui:    j=t[i]/10;
			                          j&=0x0f;
			                          j=j+0x30;
			                          M_D.list[0]=j;
			                          j=t[i]%10;
                                      j&=0x0f;
			                          j=j+0x30;
                                      M_D.list[1]=j;
                                      M_D.list[2]=0xff;
                                      d=M_D.list;
									  CW_PR(o_x,o_y,d);
	        		                  set_xy(o_x+1,o_y);
                                      
			         }
			    if (k==2)
                     {    if (t[i]==time_x[i][0]) t[i]=time_x[i][1];else t[i]--;
                                      
									  k=0;
									  goto ui;
 									  
			        }
				if (k==3)  {     s=0;o_x+=3

⌨️ 快捷键说明

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