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

📄 ha0_de.c

📁 t6963控制器 液晶显示程序
💻 C
📖 第 1 页 / 共 3 页
字号:
//----------------------------------------
   buf=bian_liang;
             buf = bian_liang/1000;
       num[ table ] = Number[ buf ]; //--------取出千位的数据
             buf = bian_liang%1000;
             buf /= 100;
       num[ table + 1 ]  =  Number[ buf ];//-------取出百位的数据
             buf=bian_liang%100;
             buf/=10;
       num[ table + 2 ] = Number[ buf ];//-------取出十位的数据
             buf = bian_liang % 10;
             buf %= 10;
       num[ table + 3 ] = Number[buf];//-------取出个位的数据

        if ( bian_liang < 10 )  num[ table + 0 ]  =  num[ table + 1 ]  =  0;

               else if ( bian_liang < 100 ) num[ table + 0 ]  =  num[ table + 1 ]  =  0;

                    else if ( bian_liang < 1000 )  num[ table + 0 ]  =  0;
}
//--------------------------------读TLC2543---------------------------
unsigned int read2543(unsigned char  port)
{
   unsigned int ad = 0,i;
   CLOCK = 0;
   CS = 0;
   port <<= 4;
   for(i = 0 ;i < 12;i++)
   {
       if(DOUT) ad |= 0x01;
       DINT = (bit)(port&0x80);
       CLOCK = 1;
       delay(1);
       CLOCK = 0;
       delay(1);
       port <<= 1;
       ad <<= 1;
   }
   CS = 1;
   ad >>= 1;
   return(ad);
}
//------------------------------------与上位机通信-----------------------------------
void send(uint weight)
{    uint shu;
   if(flag)
   {  ES = 0; RI = 0;
      FSCX( 0x23 );//#号开始
      FSCX( 0x2d );//-
      shu = weight / 1000 ;
      FSCX( shu + 0x30 );//千 位
      weight %= 1000;
      shu = weight / 100;
      FSCX( shu + 0x30 );//百位
      weight %= 100;
      shu = weight / 10;weight %= 10 ;
      FSCX( shu + 0x30 ) ;//十位
      shu = weight;
      FSCX( shu + 0x30 ) ;//个位
      ES = 1;
   }
 }
 //-----------------------------------接收数据//处理成显示数据---------------------------------
void take(void)                    //表中第八个开始为CMD显示
{
  if(data_chuan[4] == 0x23)        //**第五位是否为位止字节"#"
  {                                      //是则前面接收的是CMD命令
          cmd = (data_chuan[0] - 30) * 1000;
    num[8] = Number[data_chuan[0] - 30] ;  //显示千位的CMD
          cmd += (data_chuan[1] - 30) * 100;
    num[9] = Number[data_chuan[1] - 30] ;  //显示百位的CMD
          cmd += (data_chuan[2] - 30) * 10;
    num[10] = Number[data_chuan[2] - 30] ; //显示十位的CMD
          cmd += data_chuan[3] - 30;
    num[11] = Number[data_chuan[3] - 30] ; //显示个位的CMD
  }
}
//-----------------------------------串口发送数据--------------------------------------
void FSCX(int dat)
{

     SBUF  = dat;
 a:   if(TI == 0)goto a;
    TI  =  0;

}
//-----------------------------------延时程序-------------------------------------------
void delay(uint i)
{
   while(i--);
}
//---------------------------------水位控制----------------------------
void ctrl(void)
{
  if((cmd > weight) && flag == 1)//泵启动条件:系统开启  且  输入设定值大于重量
        pump = 1;
  else //泵关闭条件:系统关闭  或  输入设定值小于重量
            pump = 0;
}
//------------------------------------键盘输入------------------------------
void key(void)
 {
         uint kk = 0x00;  //存放键盘扫描码
    if( ( P1&0xe0 ) != 0xe0 )
    {
      kk = P1 & 0xe0 ;
        switch( kk )
            {
              case 0xc0 :    //开始键按下
                 while( a == 0 );
                 if( com != 0 )flag =! flag;TR0 =! TR0;
                 miao = shi_miao = shi_fen = fen = 0;//开始计时
                 CLEAR(); break;
              case 0xa0:    //加命令 最大1500  步进50
                 while( b == 0 ) ; cmd += 50 ; if ( cmd >= 3000 ) cmd = 30000 ; break ;
              case 0x60:    //减命令 最小50    步进50
                 while( c == 0 ) ; cmd -= 50 ; if ( cmd <= 50 ) cmd = 50 ; break ;
            }
    }
 }
//------------------------------------计时程序------------------------------------------
void time0(void) interrupt 1 using 2         /*电机定时中断*/
{
 time ++ ;
 if ( time >= 4500 )   //秒进一
 {
 time = 0 ;
    miao += 1 ;
  if( ( miao == 10 ) && ( shi_miao == 5 ) ) //秒进到十  十位进到五时  分加一  前两个清零
      { fen += 1 ; shi_miao = 0 ; miao = 0 ; }
     if ( miao == 10 )               //秒到十  十秒进一  秒清零
       {  shi_miao += 1; miao = 0; }
         if  ( fen == 10 )            //分到十  十位进一 分清零
           {  shi_fen += 1;  fen = 0;  }
         if(  shi_fen == 6  )         //分十位到六 全部都清零
        shi_fen = shi_miao = miao = fen = 0;
  }
}
//-----------------------------------串口接收中断------------------------------
void ComInINT ( void ) interrupt 4 using 1
{
    ES=0;   //关中断
    RI=0;  //清零RI
    switch (SBUF)
     {
       case 0x2f: flag = 1; CLEAR(); jie=0;break;
       case 0x2d: flag = 0; CLEAR();jie=0; break;
         default: data_chuan [ jie ]=SBUF;
             if ( ( data_chuan [ jie ] >= 30 ) && ( data_chuan [ jie ] <= 39 ) )
                     {
                     data_chuan[ jie ] -= 0x30;jie ++ ;
                     }
                 else data_chuan [ jie ] = 0;
              if(SBUF == 0x2C)
              {
    ming_ling=data_chuan[0]*1000+data_chuan[1]*100+data_chuan[2]*10+data_chuan[3];
                 switch(jie)
                 {
                   case 0:ming_ling/=1000;break;
                   case 1:ming_ling/=100;break;
                   case 2:ming_ling/=10;break;
                 }
              }
      }
     ES=1;  //开中断
    cmd=ming_ling;
}
//------------------------------------处理重量程序------------------------------------
void get_weight ( void )
{
  long int ad_temp=0,w;
      for(w=0;w<100;w++)
      {
        ad_temp += read2543(0x00);
      }
          ad_temp/=100;
            ad = ad_temp ;
            weight=ad * 2 - 350;

}
//------((((((((((((((((((((((((((((((主程序))))))))))))))))))))))))))))))))))))))))))
void main()
{
   INT_1();         // 初始化函数
   CLEAR();         // 清屏函数
   start();
   while(1)
      {
         pump=0;
         key();//扫描键盘
         get_weight();//采集重量数据
         make_data( 4 , weight );//处理重量显示数据
         play();      //显示
         take(); //向上位机传输重量数据
         while ( flag )
              {
                key();//扫描键盘
                get_weight(); //采集重量数据
                make_data( 4 , weight );//处理重量显示数据
                ctrl();    //继电器控制
                make_data( 8 ,cmd ); //处理设定值
                send(weight);   //向上位机传送重量
                play();               //显示
                take();
              }
        }

}
//----------------------------------THE END----------------------------------------

⌨️ 快捷键说明

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