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

📄 ybmain.c

📁 某采用积分式AD的汽车衡完整单片机C程序
💻 C
📖 第 1 页 / 共 5 页
字号:

////////////////////////////////////////////////////////////////////////
// 函数名称: AT24C64_W(void *mcu_address,uint AT24C64_address,uint count)
// 入口参数: 无
// 函数功能:写24C64;
////////////////////////////////////////////////////////////////////////
void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count)
{
 //DOG_WDI=!DOG_WDI;
 //DOGTIME=0;
 while(count--)
 {
  I2C_Start();
  /*I2C_Send_Byte( 0xa0 + AT24C64_address /256 *2);*/  /* 24C16  USE */
  I2C_Send_Byte( 0xa0 );
  I2C_Send_Byte(  AT24C64_address/256 );
  I2C_Send_Byte( AT24C64_address %256 );
  I2C_Send_Byte( *(uchar*)mcu_address );
  I2C_Stop();
  Delay_N_mS(50);       /* waiting for write cycle to be completed */
  ((uchar*)mcu_address)++;
  AT24C64_address++;
 }
}

////////////////////////////////////////////////////////////////////////
// 函数名称: AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
// 入口参数: 无
// 函数功能:读24C64;
////////////////////////////////////////////////////////////////////////
void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count)
{
// DOG_WDI=!DOG_WDI;
// DOGTIME=0;
 while(count--)
 {
  I2C_Start();
  /*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/   /* 24C16 USE */
  I2C_Send_Byte( 0xa0 );
  I2C_Send_Byte( AT24C64_address/256 );
  I2C_Send_Byte( AT24C64_address % 256 );
  I2C_Start();
  /*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/
  I2C_Send_Byte( 0xa1 );
  *(uchar*)mcu_address = I2C_Receive_Byte();
  I2C_Nack();
  I2C_Stop();
  ((uchar*)mcu_address)++;
  AT24C64_address++;
 }
}

#endif


#ifdef TT
////////////////////////////////////////////////////////////////////////
// 函数名称: Init()
// 入口参数: 无
// 函数功能:初始化系统
////////////////////////////////////////////////////////////////////////
void Init()
{
    //从存储器中读入数据
    unsigned char tek;
        //读初始化标识位;
    AT24C64_R(&tek,0x00,1);
    if(tek==8) //已经初始化24c64
    {
      ReadPass(); //读密码
      ReadFenDu();//读分度
      ReadWeiShu();//读位数;
      ReadFull(); //读满量程;
      ReadFlt();  // 读滤波强度;
      ReadZeroChase();//读零点跟踪范围
      ReadStartZero();//读开机置0范围
      ReadSetZero();//读置0键置0范围
      ReadPrintType();//读打印机类型;
      ReadBuadRate();     //读波特率
      ReadZeroCode();   //读零点码;
      ReadBdRate();   //读标率
      ReadPJ();//读关机
      ReadTS();//读天数;
      ReadJLSet();//读记录设置
      ReadPrtNum();//打印联单数;
      ReadAutoPrt();           //读联单数
      ReadStartPW();           //读自动打印起点重量
      ReadRecADD();    //初始化记录地址
    //  #ifdef TSTEST
      ReadYMD();
   //   #endif      
    }
    else //初始化24c64;
    {
      tek=8;
      AT24C64_W(&tek,0x00,1);
      InitPass();            //初始化密码;
      InitFenDu();          //初始化分度;
      InitWeiShu();        //初始化位数;
      InitFull();        //初始化满量程
      InitFlt();         //初始化滤波强度;
      InitZeroChase();  //初始化零点跟踪范围
      InitStartZero(); //初始化开机置0范围;
      InitSetZero();   //初始化置0键置0范围
      InitPrintType();//初始化打印机类型;
      InitBuadRate(); //初始化波特率
      InitZeroCode();//初始化零点码;
      InitBdRate();  //初始化标率;
      InitPJ();     //初始化关机;
      InitTS();   //初始化天数
      InitJLSet();  //初始化记录设置
      InitPrtNum();//初始化联单数;
      InitAutoPrt();  //初始化联单数
      SaveStartPW();           //保存自动打印起点重量
      InitStartPW();           //初始化自动打印起点重量
      InitRecADD();    //初始化记录地址
    //  #ifdef TSTEST
      InitYMD();
    //  #endif
    }
   // ES=0;
    UART_init();//串行通信
    dtcode=(G_FenDu*100)/G_BdRate;//计算dtcode;

    //AD,中断
    T0=1;
    T1=1;
    fuhao=0;
    dot_number=0;
    zero_flag=0;
    timer_all=0;
    timer_ok=0;
    timer_number=0;
    display1=0;
    display2=0;
    display3=0;
    display4=0;
    display5=0;
    display6=0;
    dis[0]=0;
    dis[1]=0;
    dis[2]=0;
    dis[3]=0;
    dis[4]=0;
    dis[5]=0;
    T0=1;
    T1=0;

    TMOD=0x11;
    TR0=0;
    ET0=0;
  //  TR2=1;
    ET2=0;
    IT1=1;
    IT0=1;
    IE1=0;
    IE0=0;

    EX0=1;
    EX1=1;

    ET1=1;

    TL1=0x00;
    TH1=0xAC;
    T0=0;
    T1=1;
    TR1=1;
    EA=1;

    bHand=0;

  //  v_Get1302(ucCurtime);

 //   PrintCZ(&ucCurtime);

    ucCurtime[0]=0;
    ucCurtime[1]=0;
    ucCurtime[2]=0;

    //蜂鸣器;
    beep=0;

    //键盘,显示;
    COM8155=0xE3;
    PB8155=0x10;
    ptr=19;

    //显示器自检;
    DisplayCheck();
  //  #ifdef TSTEST
    DSGuangJi();
  //  #endif
    //重量处理;
     //开机置0
     if(bZl)
     {
        //計算开机置0範圍
        switch(G_StartZero)
        {
           case 1:kjzl=G_Full*0.02;
               break;
           case 2:kjzl=G_Full*0.04;
               break;
           case 3:kjzl=G_Full*0.2;
                break;
           case 4:kjzl=G_Full*0.5;
               break;
           case 5:kjzl=G_Full;
               break;
          }
     if(G_hw<kjzl)
        kjzl=G_hw;
     else
        kjzl=0;
      bZl=0;//已经置0
   }


}







////////////////////////////////////////////////////////////////////////
// 函数名称:DisplayWeight()t
// 入口参数: 无
// 函数功能:显示重量
////////////////////////////////////////////////////////////////////////
void DisplayWeight()
{
   if(IsFull==1)
   {
      dcode[5]=15;
      dcode[4]=28;
      dcode[3]=16;
      dcode[2]=16;
      dcode[1]=20;
      dcode[0]=20;
      DisplayCode(dcode,6);

   }
   else
      DisplayCode(dis,6);
}

////////////////////////////////////////////////////////////////////////
// 函数名称:DisplayWeight()t
// 入口参数: 无
// 函数功能:显示内码
////////////////////////////////////////////////////////////////////////
 void DisplayWeightCode()
{
 //  unsigned char dp[6]={1,2,3,4,5,6};
 /*  dcode[0]=display1;
   dcode[1]=display2;
   dcode[2]=display3;
   dcode[3]=display4;
   dcode[4]=display5;
   dcode[5]=display6;   */
   DisplayCode(dis,6);
}


void int0_int(void) interrupt 0
{

TR0=0;
T0=1;
T1=0;
PA8155=0;
}


void int1_int(void) interrupt 2
{
                          TR1=0;
                          TL1=0x00;        //20ms E0
                          TH1=0xAC;        //20ms B1
                          PA8155=0;
                          ET1=1;

                          T0=0;
                          T1=1;
                          TR1=1;
                          scan();
                          calculate();
                          TH0=0;
                          TL0=0;

 }

void timer1_int(void) interrupt 3
{

		  	T0=0;
                        T1=0;
                        TR0=1;
                        PA8155=0;
                        TR1=0;
			TL1=0;
                        TH1=0;
                        ET1=0;


}




////////////////////////////////////////////////////////////////////////
// 函数名称:  void scan(void)
// 入口参数: 无
// 函数功能:健盘中断扫描程序
////////////////////////////////////////////////////////////////////////
void scan(void)
{
   char  a1=0x70,i ;//,i;
   FLAG=0;
 //  Count++;


   for(i=0;i<4;i++)
   {
        PB8155=a1;
        m=PC8155;
		if(i==3) i=10;
        switch(m & 0x0F)
        {
           case 0x07: ptr=i+1;beep=1;beep=0;
                     FLAG=1;
                      break;
           case 0x0B: ptr=i+4;beep=1;beep=0;
                     FLAG=1;
                      break;
           case 0x0D: ptr=i+7;beep=1;beep=0;
                     FLAG=1;
                      break;
           case 0x0E: ptr=i+40;beep=1;beep=0;

		         if(i==1) ptr=0;
                     FLAG=1;
                     break;
              default: break;

          }
          if(FLAG==1)
		  {
			   KEYUP=0;
			   return;
		   }
         a1=a1>>1|0x80;
       }

	 // FLAG=0;
	  ptr=66;
	  KEYUP=1;
      return;
}

////////////////////////////////////////////////////////////////////////
// 函数名称:  KeyScan()
// 入口参数: 无
// 函数功能:健盘扫描程序
////////////////////////////////////////////////////////////////////////
unsigned char KeyScan()
{
 //  unsigned char key=99;
 //  Count++;
   if(KEYUP==0) //键按下
   {
        keycode=ptr;
        KEYDN=1;
        return 99;
    }
   if(KEYUP) //键抬起;
    {
       if (KEYDN==1) //此键按下
       {
          beep=1;
          KEYDN=0;
          beep=0;
          return keycode;
       }
       else //无键按下。
       return 66;
    }

}


////////////////////////////////////////////////////////////////////////
// 函数名称:calculate(void))
// 入口参数: 无
// 函数功能:得到内码
////////////////////////////////////////////////////////////////////////
void calculate(void)
{
  unsigned char t;
  timer_all+=TL0;
  timer_all+=TH0*256;
  timer_number+=1;

if(timer_number>9)
  {

    timer_number=0;
    timer_ok=(timer_ok+timer_all)>>1;
    timer_all=0;

    fuhao=0;

   //计算重量;
   if(!bBDing)
   {

      if(timer_ok>=G_ZeroCode)
      {
         G_hw=((timer_ok-G_ZeroCode)*100+dtcode/2)/dtcode;
         fuhao=0;
         G_hw=G_hw*G_FenDu;
      }
      else
      {
          fuhao=1;
         G_hw=((G_ZeroCode-timer_ok)*100+50*G_FenDu)/dtcode;
         G_hw=G_hw*G_FenDu;
      }

   //滿量程處理;
   IsFull=0;
   if(G_hw>(G_Full+9*G_FenDu))
   {
       IsFull=1;
       beep=1;
   }
   else
     beep=0;

   //开机置0;
    G_hw=G_hw-kjzl;

   //手动置0
   if(bHand)
     G_hw=G_hw-handzero;

     G_Weight=G_hw; //重量;
   if(G_hw<0)
   {
      fuhao=1;
      G_hw=0-G_hw;

   }
   }
 }

   //原始值


else if(timer_number==1)
{

⌨️ 快捷键说明

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