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

📄 menu4.c

📁 多路数据采集 +lcd +菜单功能显示 max485通信
💻 C
📖 第 1 页 / 共 2 页
字号:

      }



}

void serial() interrupt 4   //串行中断 接收数据
{

//读回来的数据还没有保存到eeprom
    uchar ud=0;
    if(TI==1)
       ;
    else
    { if(RI==1)
       {


             switch(qi)
             {
               case 0:
                    adtemp[0][address].adh=SBUF;   //这里应该与上一个数
                    qi++;
                    se=0;
                    break;
               case 1:
                    adtemp[0][address].adl=SBUF;
                    se=0;
                     qi++;
                    break;
               case 2:
                    adtemp[0][address].adig=SBUF;
                    se=0;
                    qi++;
                    break;
               case 3:
                    ud=SBUF;
                    if(adtemp[0][address].adh+adtemp[0][address].adl+adtemp[0][address].adig==ud)
                    {
                       se=1;
                       ms6=1;
                       qi=0;
                    }
                    else
                      err++;

                      qi=0;



                    break;
             }


      RI=0;



        }



    }

}




void goback(uchar addr,uchar lcd[16])
{     uchar i;

      write(addr,0);
      for(i=0;i<16;i++)
      write(lcd[i],1);
}


void lcdwr(uchar addr,uchar lcd0[8],uchar lcdv[8])
{     uchar i;

      write(addr,0);
      for(i=0;i<16;i++)
      {
         if(i<8)
            write(lcd0[i],1);
         else
            write(lcdv[i-8],1);
      }



}


void disfill(uchar lcd_dis[8],uchar u0,uchar u1,uchar u2,uchar u3,uchar u4,uchar u5,uchar u6,uchar u7)
{

   lcd_dis[0]=u0;
   lcd_dis[1]=u1;
   lcd_dis[2]=u2;
   lcd_dis[3]=u3;
   lcd_dis[4]=u4;
   lcd_dis[5]=u5;
   lcd_dis[6]=u6;
   lcd_dis[7]=u7;
}


void main(void)
{    uchar i,j,led;
     uint n;



//***********************************************************************************//
    {     //一般的初始化
      SP=0xdd;
      con=0;         //  开液晶屏
      cs=1;          //  iic eeprom 有效
      delay6ms(50);
      disinit();
    }    //液晶显示初始化
    /*
      strcpy(dis,"系统初始化中....");
      write(0x90,0);
      for(i=0;i<16;i++)
      write(dis[i],1);
      */     // 一般的初始化结束

     //delay6ms(200);

     point2=eepread(0x7f,0xff);
     point2<<=8;
     point2=point2|eepread(0x7f,0xfe);

     //point1=(point2-0x78)%0x7fef;
     if (point2>=0x78)
       n=(point2-0x78);
     else
       n=0x7fef-(0x78-point2);



    // n=point1;

//****************************************读出数据最后一次写入的10点数据***********************************//

       for(i=0;i<=9;i++)
       for(j=0;j<4;j++)
          {

            addate[i][j].adh=eepread(n/256,n%256);
            n++;
            n=n%0x7fef;

            addate[i][j].adl=eepread(n/256,n%256);
            n++;
            n=n%0x7fef;
            addate[i][j].adig=eepread(n/256,n%256);
            n++ ;
            n=n%0x7fef;
          }

      

           maxinit();//总线485通信初始化
         



     state=0;
     while(1)
       {  //ms2=1;
          //switch(state)
          {//0 主界面
           if(state==0)
           {
            
              goback(0x80," 8: 激活状态    ");//80 qing pin 空行
              goback(0x90," 9: 睡眠模式    ");
              goback(0x88,"10: 实时监控    ");
              goback(0x98,"11: 历史浏览    ");
              


              led=key();
              if(led==0xff)
                 continue;
              else

              {
                if(led==10)
                  { led=0xff;
                    state=1;   // jin ru 实时监控界面
                    continue;
                  }
                else
                 {
                   if(led==11)
                     {
                      led=0xff;
                      state=2;//进入选择历史点数据界面
                      continue;
                     }
                     if(led==9)
                       { led=0xff;
                        //IE0=1;
                        con=1;
                        continue;
                       }


                       else
                          if(led==8)
                             {
                               led=0xff;
                               con=0;
                             }
                                else
                                   continue;
                   }
                 }
              }
            if(state==1)                   //实时监控里面的选择界面
              {  
                   goback(0x80,"                ");//80 qing pin 空行
                   goback(0x90,"9:  轮流显示    ");
                   goback(0x88,"10: 可选显示    ");
                   goback(0x98,"11: 返回上级    ");
                   
                   
                   led=key();

                   if(led==9)
                      {  led=0xff;
                         i=0;
                         state=3;  //实时监控里面的轮流显示界面
                         continue;
                      }
                    else
                      {
                        if(led==10)
                          {
                            led=0xff;
                            mulb=0;
                            state=4;//实时监控里面的固定显示界面
                            continue;
                           }
                         else
                           {
                           if(led==11)
                              {
                                 led=0xff;
                                 state=0;    //返回上级
                                 continue;
                              }
                            else

                                continue;
                            }
                     }

                 }
              if(state==2)          //选择那一点的历史数据界面
                {
                   
                   
                     goback(0x80,"请选择下面历史点");//80 qing pin 空行
                     goback(0x90,"0  1  2  3  4   ");
                     goback(0x88,"5  6  7  8  9   ");
                     goback(0x98,"11: 返回上级    ");
                    led=key();
                    if(led==0xff||led==10)    //返回
                       {
                        led=0xff;
                        continue;
                       }
                    else
                      if(led==11)      //返回上级
                      {  led=0xff;
                         state=0;
                         continue;
                      }
                      else

                        {              //把选择的数带过去
                          mulk=led;
                          

                          led=0xff;
                          state=5;// 进入另一界面来选择固定或者轮流显示



                          continue;
                        }
                        continue;
                  }
              if(state==3)
                      //实时监控轮流显示
              {

                     if(ms2==1)
                      {
                        ms2=0;

                        disfill(dis,0x30+i,0x20,0x20,0x20,0x20,0x20,0x20,0x20);

                        lcdwr(0x80,lcd15,dis);
                        disfill(dis,temp[i].adh/10+0x30,'.',temp[i].adh%10+0x30,temp[i].adl/10+0x30,temp[i].adl%10+0x30,'(','V',')');

                        lcdwr(0x90,lcd16,dis);
                        disfill(dis,0x30+temp[i].adig,0x20,0x20,0x20,0x20,0x20,0x20,0x20);
                        
                        lcdwr(0x88,lcd17,dis);
                       
                        goback(0x98,"11: 返回上级    ");




                        i++;
                        i=i%4;
                      }
                     led=key();
                     if(led==11)
                      { state=1;
                        led=0xff;
                        continue;
                       }
                       else
                         continue;
               }
               if(state==4)
                 {     if(ms2==1)
                      {
                        ms2=0;

                        disfill(dis,0x30+mulb,0x20,0x20,0x20,0x20,0x20,0x20,0x20);
                        lcdwr(0x80,lcd15,dis);

                        disfill(dis,temp[mulb].adh/10+0x30,'.',temp[mulb].adh%10+0x30,temp[mulb].adl/10+0x30,temp[mulb].adl%10+0x30,'(','V',')');


                        lcdwr(0x90,lcd16,dis);

                        disfill(dis,0x30+temp[mulb].adig,0x20,0x20,0x20,0x20,0x20,0x20,0x20);
                        lcdwr(0x88,lcd17,dis);
                      
                        goback(0x98,"号: 0~3 返回:11 ");


                      }
                     led=key();
                     if(led==11)
                      { state=1;
                        led=0xff;
                        continue;
                       }
                       else
                          if(led==0||led==1||led==2||led==3)
                           {
                             mulb=led;
                             led=0xff;
                             continue;
                           }
                           else
                              {
                                led=0xff;
                                continue;
                             }
                 }
              if(state==5)
                {
                  
                     goback(0x80,"8:更新历史数据  ");//80 qing pin 空行
                     goback(0x90,"9:  轮流显示    ");
                     goback(0x88,"10: 可选显示    ");
                     goback(0x98,"11: 返回上级    ");

                   led=key();
                   if(led==8)
                     {
                         ET0=0;
                      if (point2>=0x78)
                          n=(point2-0x78);
                      else
                          n=0x7fef-(0x78-point2);
                     for(i=0;i<=9;i++)
                            for(j=0;j<4;j++)
                        { // addate[10][4];

                        addate[i][j].adh=eepread(n/256,n%256);
                        n++;
                        n=n%0x7fef;

                        addate[i][j].adl=eepread(n/256,n%256);
                        n++;
                        n=n%0x7fef;
                        addate[i][j].adig=eepread(n/256,n%256);
                        n++ ;
                        n=n%0x7fef;
                        }

                    
                       ET0=1;

                       led=0xff;


                      
                       for(i=0;i<3;i++)
                       {

                        goback(0x80,"恭喜^_^ 成功更新");
                        delay6ms(250);
                        delay6ms(250);
                        delay6ms(250);
                      
                        goback(0x80,"                ");
                        delay6ms(250);
                        delay6ms(250);
                        delay6ms(250);
                      

                       }
                     
                       goback(0x80,"8:更新历史数据  ");
                     }
                   if(led==9)
                      {  led=0xff;
                         i=0;
                         state=6;  //历史数据里面的轮流显示界面
                         continue;
                      }
                    else
                       if(led==10)
                        { led=0xff;
                          mulb=0;
                          state=7;//历史数据里面的固定显示界面
                          continue;
                        }
                        else
                          if(led==11)
                          {
                            led=0xff;
                            state=2;
                            continue;

                          }
                  continue;
                }
               if(state==6)    //lun liu xian shi
                 {
                    if(ms2==1)
                      {
                        ms2=0;
                        
                        disfill(dis,0x30+i,0x20,0xc0,0xfa,0xca,0xb7,':',0x30+mulk);
                        lcdwr(0x80,lcd15,dis);

                        disfill(dis,addate[mulk][i].adh/10+0x30,'.',addate[mulk][i].adh%10+0x30,addate[mulk][i].adl/10+0x30,addate[mulk][i].adl%10+0x30,'(','V',')');

                        lcdwr(0x90,lcd16,dis);

                        disfill(dis,0x30+addate[mulk][i].adig,0x20,0x20,0x20,0x20,0x20,0x20,0x20);
                        lcdwr(0x88,lcd17,dis);
                        
                        goback(0x98,"11: 返回上级    ");

                        i++;
                        i=i%4;
                      }
                     led=key();
                     if(led==11)
                      { state=5;
                        led=0xff;
                        continue;
                       }
                       else
                         continue;
                    ;

                    continue;
                }
               if(state==7)
                     if(ms2==1)
                      {
                        ms2=0;

                        disfill(dis,0x30+mulb,0x20,0xc0,0xfa,0xca,0xb7,':',0x30+mulk);
                        lcdwr(0x80,lcd15,dis);

                        disfill(dis,addate[mulk][mulb].adh/10+0x30,'.',addate[mulk][mulb].adh%10+0x30,addate[mulk][mulb].adl/10+0x30,addate[mulk][mulb].adl%10+0x30,'(','V',')');

                        lcdwr(0x90,lcd16,dis);

                        disfill(dis,0x30+addate[mulk][mulb].adig,0x20,0x20,0x20,0x20,0x20,0x20,0x20);
                        lcdwr(0x88,lcd17,dis);
                       
                        goback(0x98,"号: 0~3 返回:11 ");


                      }
                     led=key();
                     if(led==11)
                      { state=5;
                        led=0xff;
                        continue;
                       }
                       else
                          if(led==0||led==1||led==2||led==3)
                           {
                             mulb=led;
                             led=0xff;
                             continue;
                           }
                           else
                              {
                                led=0xff;
                                continue;
                             }
                             continue;

           } //switch
       }  // while

}//main

⌨️ 快捷键说明

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