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

📄 ch375prt.c

📁 采用51核单片机+375A usb主控芯片驱动hp打印机
💻 C
📖 第 1 页 / 共 5 页
字号:
        SCL=0;
    }
     else
    {
        while(i--)
    	 {
            SCL=0;
            _nop_();
            SDA=(bit)(demand&0x01);
            demand>>=1;
            I2CWait();
            SCL=1;
            I2CWait();
    	 }
         SCL=0;
    }
}


/*********MCU从SD2200读入一字节*********/
UCHAR I2CReceiveByte(bit order)//order=1,H_L;order=0,L_H
{
    UCHAR i=8;
    UCHAR ddata=0;
    SDA=1;
    if(order)
          {
       while(i--)
         {
        ddata<<=1;          //数据从高位开始读取
        SCL=0;
        I2CWait();
        SCL=1;
        I2CWait();     //从高位开始 ddata|=SDA;ddata<<=1
        if(SDA)
    	{
            ddata|=0x01;
    	}
         }
          }
        else
          {
           while(i--)
         {
        ddata>>=1;          //数据从低位开始读取
        SCL=0;
        I2CWait();
        SCL=1;
        I2CWait();     //从低位开始 ddata|=SDA;ddata>>=1
        if(SDA)
    	{
            ddata|=0x80;
    	}
         }      
          }
    SCL=0;
    
    return ddata;
}


/******读SD2200实时数据寄存器******/
void I2CReadDate(void)
{
    UCHAR n;
    if(!I2CStart())return;
    I2CSendByte(0x65,1);//从年开始读取数据
    if(!I2CWaitAck()){I2CStop();return;}
    for(n=0;n<7;n++)
    {
        date[n]=I2CReceiveByte(0);
        if (n!=6)         //最后一个数据不应答
    	{
            I2CAck();
    	}
    }
    I2CNoAck();
    I2CStop();
    date[4]&=0x3f;
}


/*写SD2200状态寄存器命令*/
void I2CWriteStatus(void)
{   	
    if(!I2CStart())return;
    I2CSendByte(0x60,1);      //发送SD2200状态寄存器_1命令
    if(!I2CWaitAck()){I2CStop();return;}   
    I2CSendByte(0x03,0);      //IC进行复位初始化,24小时制
    I2CWaitAck();
    I2CStop();        
    I2CStart();
    I2CSendByte(0x62,1);      //发送SD2200状态寄存器_2命令
    I2CWaitAck();   
    I2CSendByte(0x00,0);      //清TEST位,禁止中断输出
    I2CWaitAck();
    I2CStop();        
}

/*写SD2200时间寄存器命令*/
void I2CWriteTime(void)
{   	
        
    UCHAR n;
    I2CStart();
    I2CSendByte(0x64,1);      //发送SD2200写时间寄存器命令,
    I2CWaitAck();   
        for(n=0;n<7;n++)
        {
        I2CSendByte(date[n],0);
        I2CWaitAck();
        }
    I2CStop();
          
}



/*********************以上是时钟操作***********************************************/



unsigned int HexToBCD(unsigned char Value)
{
  unsigned int i;
//  i=(unsigned int)(Value/10)*16+(unsigned int)(Value&0x0f);
  i=Value;
  return(i);
}

void mInitSTDIO( )
{

  t2con=0x30;   	//timer2 used for baud rate generator
  scon0=0x50;     //
  rcap2h=0x0ff;  	//bundrate 9600
  rcap2l=0xdc;//
  TMOD=0x21;        // 
  scon1=0x50;       //
  TH1=0xfd;    //bundrate 9600 
  TL1=0xfd;
  ES=1;
  TR1=1;
  tr2=1;
  PCON = 0x00;
  EA=1;///
}
/*
void SendStr()
{
  unsigned char idata i;
  TI=0;
  RI=0;
  for(i=0;i<53;i++)
  {
   SBUF=buffer[i];
   while(TI);
   TI=0;
   mDelaymS( 50 );
  }
}
*/
void SendTime()
{
  unsigned int sum=0; 
  unsigned char i;
  sum=0x40;
  TI=0;
  RI=0;
  SBUF=0x8;
  while(!TI);
  TI=0;
  mDelaymS( 2 );
  SBUF=0x40;
  while(!TI);
  TI=0;
  mDelaymS( 2 );
  for(i=0;i<7;i++)
  {
   sum+=date[i];
   SBUF=date[i];
   while(!TI);
   TI=0;
   mDelaymS( 2 );
  }
  SBUF=(sum>>8)&0x00ff;
  while(!TI);
  TI=0;
  mDelaymS( 2 );
  SBUF=sum&0x00ff;
  while(!TI);
  TI=0;
  mDelaymS( 2 );

}

void RecvStr()
{
  TI=0;
  RI=0;
  if(SBUF==0xfa){SBUF=0xfc;RecvStart=2;}//读取
  if(SBUF==0xfb)
  {RecvStart=3;RecvCount=0;}
  else if(RecvStart==3)
  {
    date[RecvCount]=SBUF;
    RecvCount++;
    if(RecvCount==7)
	{
     RecvStart=0;
	 RecvFlage=2;
    }
  }
  if(SBUF==0xfd)
  {
   RecvStart=1;
   RecvCount=70;
  }
  else
   if(RecvStart==1)
   {
    buffer[RecvCount]=SBUF;
    RecvCount++;
    if(RecvCount==123)
	{
     RecvStart=0;
	 RecvFlage=1;
    }
   }
}

void ComInt() interrupt 4
{
 TI=0;
 if(RI) RecvStr();
}

void ChangeData()
{
//编号
  buffer[0]=HexToBCD(buffer[70]);
  buffer[1]=HexToBCD(buffer[71]);
//年龄
  buffer[2]=HexToBCD(buffer[72]);
//身高
  buffer[3]=HexToBCD(buffer[73]);
  buffer[4]=HexToBCD(buffer[74]);
//腰围
  buffer[5]=HexToBCD(buffer[75]);
  buffer[6]=HexToBCD(buffer[76]);
//体重
  buffer[7]=HexToBCD(buffer[77]);
  buffer[8]=HexToBCD(buffer[78]);
//类型
  if(buffer[79])
   buffer[9]='G';// generic=1;motile=0
  else
   buffer[9]='M';// generic=1;motile=0
//性别
  if(buffer[80])

⌨️ 快捷键说明

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