通讯主程序和流程图

//...............主程序...............
               void main()
               {
               InitIoput();                                   //IO端口初始化
               a=0;                                           //运行指示计数
               Set_Flag=0;                                 //0时间循环显示
               AUXR=0X80;                                  //STC系列的1T 设置
               TMOD=0X01;                                   //
               InitWarningFlag();                          //初始化报警标志
               init_lcd ();                                   //液晶初始化
               lcd_clear();                                   //清除液晶显示
               InitUart();                                   //初始化串口
               SetIn_Flag=0;                               //设置时间保存标志位 初始化0 保存置一 退出复位置零
               TimeSetFlag=0;                              //时间设置年月日时分秒个位十位选择标志 1-12 显示闪烁
               i=0;                                           //存储字符数组变量    报警台数
               MachineWarning_Num=0;                       //机器报警次数
               disp_character(6,0,1,24,1,27,tabnum);       //注塑机无线监控系统     Status
               disp_character(0,24,1,24,1,12,Status);      //机器状态
                disp_character2(12,24,1,32,1,1,xsadd[0],tabF); //      Warning
               disp_character(13,24,1,24,1,3,tabNon);      //无
               disp_character(16,24,1,24,1,6,Warning);     //报警
               Time_A();//时间显示
               disp_character(0,52,1,24,1,6,Warning);      //报警
               disp_character(6,52,1,24,1,6,WarningNum );  //台数        
               disp_character2(12,52,1,32,1,1,xsadd[0],tabF); //      Warning WarningData
               disp_character(17,52,1,24,1,6,Status);      //机器
               disp_character(23,52,1,24,1,6,WarningData); //编号        
               disp_character2(29,52,1,32,1,1,xsadd[0],tabF); //     
               disp_character2(15,48,2,32,1,1,xsadd[i],tab0); //      Warning
               disp_character(0,80,1,24,1,6,LastTime);     //上次
               disp_character(6,80,1,24,1,6,Warning);      //报警
               disp_character2(12,76,1,32,1,1,xsadd[0],tabF); //    
               disp_character(0,108,1,24,1,6,Warning);     //报警
               disp_character(6,108,1,24,1,6,TimeData);    //次数    
               disp_character2(12,108,1,32,1,1,xsadd[0],tabF); //
               DisWar_Time(MachineWarning_Num);                //
               LastWarning_Hour=0;                           //上次报警时
               LastWarning_Muniter=0;                       //上次报警分
               LastWarning_Sconde=0;                           //上次报警秒
               ShowWarningTime();                           //上次报警时分秒分离
               disp_character(4,212,1,24,1,3,tabYear);     //年
               disp_character(11,212,1,24,1,3,tabMonth);   //月
               disp_character(18,212,1,24,1,3,tabDay);     //日
               MD0=0;                                       //通讯方式
               MD1=0;                                       //通讯方式
               while(1)
               {
                get_show_date();                         //读取年月日
                get_show_time();                         //读取时分秒  00时00分00秒    报警次数归零
                Change_Dis();                            //更新报警内容显示
                delay1(50);                                 //延时刷新
                a++;                                     //
                 if(a>2)                                 //运行指示计数
                 {                                         //
                 OUT25=~OUT25;                                //取反运行指示
                 a=0;                                     //
                 }    
                 if(Receive_Flag==1)                     //串口中断Receive_Flag=1 接收到新的数据
                 {
                  Dis_ReciveData(DAT2);                     //显示接收代码    机器编号*驱动数码管
                  GetWarningTime();                         //获取报警时间
                  ShowWarningTime();                     //显示报警时间
                  WarningMemory(DAT2);    //报警从机号和报警时间写入数组    置位报警标志0X55开始报警0XAA更新报警
                  ShowTime(ni);                  //临时子程序  显示写入报警时间
                  Receive_Flag=0;                         //接收到数据标志置零
                 }                                         //                                     //
/////////////////时间显示//////////////////////////////////
                if(Set_Flag==0)                             //时间设定 报警查询 退出设置检测标志
                {
                 Dis_Time();                             //显示实时时钟
                }                                         //
/////////////////时间设定/显示存储暂停并闪烁///////////////
                else if(Set_Flag==1)                     //时间设定 报警查询 退出设置检测标志
                {
                Display_Time(TimeSetFlag);               //时间显示存储暂停并闪烁
                }                                         //
//////////////////读取报警参数/////////////////////////////////////
                else if(Set_Flag==2)                     //时间设定 报警查询 退出设置检测标志
                {
                Dis_Time();                                 //显示实时时钟
                }
////////////////////////////////////                        
               RstKey();
               if(!Key_Select)                  //检测选择键
                {
                 for(;kcounter<3;)             //按键循环5次
                 {
                  if(!Key_Select)              //按键低电平
                  {
                  LowVoltKey();                //按键计数器状态标志加一
                  }
                  else if(~!Key_Select)        //按键高电平
                  {
                  HighVoltKey();               //按键计数器加一 状态标志归零
                  }
                 }
                 if(kstatus>=3)                
                 {
                 Set_Flag++;
                 if(Set_Flag==1)
                 {
                 Time_B();//时间设置
                 TimeSetFlag=1;
                  if(SetIn_Flag==0)
                   {
                   GetSetTime();                 //读一次实时时间
                   ShowSetTime();                 //分离个位十位值
                   SetIn_Flag=1;                 //置位已读标志,(退出设置归零,允许下次读)
                   delay1(10);                     //延时
                   }
                 }
                 else  if(Set_Flag==2)
                 {                                 //读取报警历史信息
                 ReadWar_Message();                 //显示报警 查询
                 DisWar_Message(Dis_Counter);     //
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
                 }
                 if(Set_Flag>2)
                  {
                  Time_A();                      //时间显示
                  SetIn_Flag=0;                  //设置时间读一次标志 归零
                  TimeSetFlag=0;                 //设置时间年月日时分秒选择标志
                  Set_Flag=0;                     //功能标志 0时间显示1时间设置2报警查询
                  }
                 }
                }
////////////////////////////////////                        
                RstKey();                                 //
                if(!Key_On)                              //检测上按键
                  {
                   for(;kcounter<3;)                     //按键循环5次
                   {
                    if(!Key_On)                          //按键低电平
                    {
                    LowVoltKey();                        //按键计数器状态标志加一
                    }
                    else if(~!Key_On)                    //按键高电平
                    {
                    HighVoltKey();                       //按键计数器加一 状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {                                     
                    if(Set_Flag==1)                         //时间设置标志为一
                    {
                    SetDataAdd(TimeSetFlag);
                    ShowSetTime();                         //分离个位十位值
                    delay1(10);                             //延时
                    }
                    else if(Set_Flag==2)                 //查询报警记录
                    {
                    Dis_Counter+=1;
                    if(Dis_Counter>24)
                    Dis_Counter=1;
                    DisWar_Message(Dis_Counter);     //
                    }                                     //读报警记录条数加一
                   }
                  }
////////////////////////////////////                        
                RstKey();
                if(!Key_Down)                    //检测下按键
                  {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!Key_Down)                //按键低电平
                    {
                    LowVoltKey();                //按键计数器状态标志加一
                    }
                    else if(~!Key_Down)          //按键高电平
                    {
                    HighVoltKey();               //按键计数器加一 状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                    if(Set_Flag==1)                 //时间设置标志为一
                    {
                    SetDataDec(TimeSetFlag);
                    ShowSetTime();                 //分离个位十位值
                    delay1(10);                     //延时
                    }
                    else if(Set_Flag==2)             //查询报警记录
                    {
                    Dis_Counter-=1;
                    if(Dis_Counter<1)
                    Dis_Counter=24;
                    DisWar_Message(Dis_Counter); //
                    }                             //读报警记录条数减一
                   }
                  }
////////////////////////////////////                        
                RstKey();
                if(!Key_Left)                    //检测左按键
                 {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!Key_Left)                //按键低电平
                    {
                    LowVoltKey();                //按键计数器状态标志加一
                    }
                    else if(~!Key_Left)          //按键高电平
                    {
                    HighVoltKey();               //按键计数器加一 状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                   if(TimeSetFlag>1)             //时间设置标志大于1  
                   TimeSetFlag-=1;                 //减一
                   else                             //
                   TimeSetFlag=1;                 //否则等于1
                   if(TimeSetFlag<1)             //时间设置标志小于1  
                   TimeSetFlag=6;                 //等于6
                   if(SetIn_Flag==0)             //如果时间设置标志位等于0
                    {                             //SetIn_Flag设置时间时读一次,然后保存读出时间并显示
                    GetSetTime();                 //读一次实时时间
                    ShowSetTime();                 //分离个位十位值
                    SetIn_Flag=1;                 //置位已读标志,(退出设置归零,允许下次读)
                    delay1(10);                     //延时
                    }
                  }
                 }
////////////////////////////////////                        
                RstKey();
                if(!Key_Right)                   //检测右按键
                 {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!Key_Right)               //按键低电平
                    {
                    LowVoltKey();                //按键计数器状态标志加一
                    }
                    else if(~!Key_Right)         //按键高电平
                    {
                    HighVoltKey();               //按键计数器加一 状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {
                    if(Set_Flag==1)    
                    {
                    TimeSetFlag+=1;
                    if(TimeSetFlag>6)
                    TimeSetFlag=1;
                    if(SetIn_Flag==0)
                     {
                     GetSetTime();                 //读一次实时时间
                     ShowSetTime();                 //分离个位十位值
                     SetIn_Flag=1;                 //置位已读标志,(退出设置归零,允许下次读)
                     delay1(10);                 //延时
                     }
                    }
                   }
                  }
////////////////////////////////////
                RstKey();
                if(!Key_Confirm)                 //检测确认键
                  {
                   for(;kcounter<3;)             //按键循环5次
                   {
                    if(!Key_Confirm)             //按键低电平
                    {
                    LowVoltKey();                //按键计数器状态标志加一
                    }
                    else if(~!Key_Confirm)       //按键高电平
                    {
                    HighVoltKey();               //按键计数器加一 状态标志归零
                    }
                   }
                   if(kstatus>=3)                
                   {    
                    if(Set_Flag==1)    
                    {
                    ModifyTime(SetIn_Year,SetIn_Month,SetIn_Day,SetIn_Hour,SetIn_Muniter,SetIn_Sconde);    //写入设置时间
                    TimeSetFlag=0;
                    SetIn_Flag=0;
                    }
                   }
                  }
                }  
               } 
////////////////////////////////////                        

 

 

通讯主程序和流程图_第1张图片

你可能感兴趣的:(通讯主程序和流程图)