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

📄 复件 demo2.c

📁 用SST89C58,对微型打印机和液晶的显示
💻 C
📖 第 1 页 / 共 5 页
字号:
	        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********************/
void Max192(uchar i,uchar o_x,uchar o_y)
{ uchar j,k;
  //uchar *p;
      k=i;
 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;
		 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>900) 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);
}
/**************************************/
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, n = 1;
      //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);
	       /*if (RS_input) 
           {  
		          RS_input=0; 
			      switch (RS_buf[0])
			      {
			           case 1: return(1); 
					   case 2: return(2); 
					   case 3: return(3); 
					   case 4: return(4); 
					   default: break;
				  }
           }*/
           i = RXD_c();

	  } while (!(i==1 || i==2 || i==3 || i==6 ));
      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(14); TXD_c(2); 
                     do 
                     {       
                             
                             i = RXD_c();
     
                     } while (i == 6);
                     TXD_c(13);TXD_c(3);
			  } 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;             // 块状
	  Io8155 = 0x0e;             // C为0x02入,0x0e出
      Io8155_c = 0x3f;
      p = 0xfd00;
      i = *p;
      if (i == 0xff)
      {
            i = 0x31;
			AD_Value = i;
			save_data(p, i);   
      }
	      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 */
/*********************************/

⌨️ 快捷键说明

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