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

📄 复件 computer2.c

📁 AT89S52串口多字节接收,可以接收任意字节.
💻 C
📖 第 1 页 / 共 3 页
字号:
            io_cs = 0;   _nop_();_nop_();_nop_();
            io_clock = 1;_nop_();_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;
		    if ((o_x!=0) && (o_y!=0)) Adend = Adend - AD_Value;
		    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 > 600) Adend = 0;
		    AD = 0; AD_0 = Adend_8; AD_1 = Adend_9;
		    data_in = 1; io_clock = 1;
            if ((o_x==0) && (o_y==0)) return;
            Display(o_x, o_y, 2, 4, Adend,1);
}

//**************菜单选择******************/
uchar choose(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;
      i = O_X - 2;
	  j = O_Y + (menu*l_oy);
      i = O_X;
	  j = (O_Y /8) + (menu*(l_oy/8));
	  return(0);
}
 
/**********************/
/*   西文子程序函数   */
/**********************/

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;
      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 = 0x06;    /*A 口输入,B口输出,C口输出*/
	  Io8155_C = 0x00;
}
/*************************/
/*    清屏子程序函数     */
/*************************/
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;     /* 写入数据 */
         }
    }
}

/******/
/*画框*/
/******/
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 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%2 == 0)  send_kpa = 1;
       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;
		            }
 		                 else 
				    { 
					       Bad = 0; 
						   RS_count = 0; 
					}
			} break;
           
       }
       ES = 1;
       EA = 1;  
}
/*******************************/
/**********电机复位*************/
/*******************************/
void Reset(void)
{ 
  uchar i;
  uint O_X;

       
       Max192(0, 0, 0);
       if (Adend < 30)  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);
						  while(1);
				   } 
				          else { i = 1; TXD_c(i); while(Back); i = 3; TXD_c(i); }
             }
       
        TXD_c(10); 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 - Adend;  while (!TI); TI = 0;
          } 
  
       ES = 1;
       EA = 1;
       delay();
       return(0);
}






⌨️ 快捷键说明

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