STC8G1K08串口通讯

 /***豆腐干下位机测试  L573 CODE 3919 2021 1 25***/    
/***STC8G1K08   三段时间控制程序 电机自动启停***/    
              #include     <REG52.H>          //下降一段设置
              #include     <intrins.h>        //保压时间
              #include     <string.h>
              #define      FOSC 11059200UL             //晶振频率
              #define      BRT  (256-FOSC/9600/32)   //波特率除/32  9600/32  或者115200/32
              #include     "stdio.h"
              #include     <stdlib.h>
              #define      uint unsigned int
              #define      uchar unsigned char
              uchar        data_i=0;
              sbit         INTPUT1=P5^4;         //启动信号
              sbit         DOWN=P3^2;             //下降
              sbit         UP=P3^3;                 //上升
              sbit         LED=P5^5;             //EEPROM写指示
              uint         FLAG_S;
              #define      CMD_IDLE    0         //空闲模式
              #define      CMD_READ    1         //IAP字节读命令
              #define      CMD_PROGRAM 2         //IAP字节编程命令
              #define      CMD_ERASE   3         //IAP扇区擦除命令
              #define      ENABLE_IAP  0x82      //if SYSCLK<20MHz
              #define      IAP_ADDRESS 0x0000    //时间 EEPROM首地址
              typedef      unsigned char BYTE;
              typedef      unsigned int WORD;
/**********************/
              static uint  RUN_TIME;   //运行总时间     累计
/*************周期一*********/              
              static uint  RunTime_A;  //停顿时间  第一段
              static uint  Wait_A;     //停顿时间
              static uint  Press_A;    //压榨时间
/*************周期二*********/
              static uint  RunTime_B;  //停顿时间  第二段
              static uint  Wait_B;     //停顿时间
              static uint  Press_B;    //压榨时间
/*************周期二*********/
              static uint  RunTime_C;  //停顿时间  第三段
              static uint  Wait_C;     //停顿时间
              static uint  Press_C;    //压榨时间

/*************系统参数*******/
              static uint  Back_Time;  //回程时间
              static uint  Down_Time;  //下降一时间
              static uint  Press_Time; //保压时间
/**********************/
              bit           Receive_Flag;
              bit          Run_Flag;
              bit          Dataa_Flag;
              bit          Datab_Flag;
              uchar        kcounter,kstatus;     //按键计数标志 按键状态标志
              uint         a[8];             //定义数组a 存储串口数据串
/*------------------------------------------*/
              void delay(uint t)
              {
              uint i,j;
              for(i=0;i<t;i++)
              for(j=0;j<100;j++);
              }
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
               void Delay100ms(uint x)              //
               {
               uint i,j;
               for(i=0;i<x;i++)
               for(j=0;j<11000;j++);
               }
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
               void Delay_100ms(uint x)          //page 5 保压,上升计时  Delay100ms
               {
               uint i,j;
                for(i=0;i<x;i++)
                {
                for(j=0;j<9200;j++);
                printf("n6.val=%d\xff\xff\xff",i);//
                }
               }    
/*----关闭IAP----------------------------*/
              void IapIdle()
              {
              IAP_CONTR = 0;                  //关闭IAP功能
              IAP_CMD = 0;                    //清除命令寄存器
              IAP_TRIG = 0;                   //清除触发寄存器
              IAP_ADDRH = 0x80;               //将地址设置到非IAP区域
              IAP_ADDRL = 0;
              }
/*-从ISP/IAP/EEPROM区域读取一字节-*/
              BYTE IapReadByte(WORD addr)
              {
              BYTE dat;                       //数据缓冲区
              IAP_CONTR = ENABLE_IAP;         //使能IAP
              IAP_CMD = CMD_READ;             //设置IAP命令
              IAP_ADDRL = addr;               //设置IAP低地址
              IAP_ADDRH = addr >> 8;          //设置IAP高地址
              IAP_TRIG = 0x5a;                //写触发命令(0x5a)
              IAP_TRIG = 0xa5;                //写触发命令(0xa5)
              _nop_();                        //等待ISP/IAP/EEPROM操作完成
              dat = IAP_DATA;                 //读ISP/IAP/EEPROM数据
              IapIdle();                      //关闭IAP功能
              return dat;                     //返回
              }
/*-写一字节数据到ISP/IAP/EEPROM区域-*/
              void IapProgramByte(WORD addr, BYTE dat)
              {
              IAP_CONTR = ENABLE_IAP;         //使能IAP
              IAP_CMD = CMD_PROGRAM;          //设置IAP命令
              IAP_ADDRL = addr;               //设置IAP低地址
              IAP_ADDRH = addr >> 8;          //设置IAP高地址
              IAP_DATA = dat;                 //写ISP/IAP/EEPROM数据
              IAP_TRIG = 0x5a;                //写触发命令(0x5a)
              IAP_TRIG = 0xa5;                //写触发命令(0xa5)
              _nop_();                        //等待ISP/IAP/EEPROM操作完成
              IapIdle();
              }
/*---扇区擦除---------------*/
              void IapEraseSector(WORD addr)
              {
              IAP_CONTR = ENABLE_IAP;         //使能IAP val=IapReadByte(IAP_ADDRESS+1);
              IAP_CMD = CMD_ERASE;            //设置IAP命令
              IAP_ADDRL = addr;               //设置IAP低地址
              IAP_ADDRH = addr >> 8;          //设置IAP高地址
              IAP_TRIG = 0x5a;                //写触发命令(0x5a)
              IAP_TRIG = 0xa5;                //写触发命令(0xa5)
              _nop_();                        //等待ISP/IAP/EEPROM操作完成
              IapIdle();
              }
/***********************************/
              void red_eeprom(void)
              {
              uint m,n;        
              m=IapReadByte(IAP_ADDRESS+0);  //时间前八位
              n=IapReadByte(IAP_ADDRESS+1);  //时间后八位
              RunTime_A=m*256+n;             //周期一压榨总时
              m=IapReadByte(IAP_ADDRESS+2);  //时间前八位
              n=IapReadByte(IAP_ADDRESS+3);  //时间后八位
              Wait_A=m*256+n;                 //周期一停顿时间
              m=IapReadByte(IAP_ADDRESS+4);  //时间前八位
              n=IapReadByte(IAP_ADDRESS+5);  //时间后八位
              Press_A=m*256+n;                 //周期一压榨时间
              m=IapReadByte(IAP_ADDRESS+6);  //时间前八位
              n=IapReadByte(IAP_ADDRESS+7);  //时间后八位
              RunTime_B=m*256+n;             //周期二压榨总时
              m=IapReadByte(IAP_ADDRESS+8);  //时间前八位
              n=IapReadByte(IAP_ADDRESS+9);  //时间后八位
              Wait_B=m*256+n;                 //周期二停顿时间
              m=IapReadByte(IAP_ADDRESS+10); //时间前八位
              n=IapReadByte(IAP_ADDRESS+11); //时间后八位
              Press_B=m*256+n;                 //周期二压榨时间

              Back_Time=IapReadByte(IAP_ADDRESS+12);  //回程时间时间后八位
              Down_Time=IapReadByte(IAP_ADDRESS+13); //下降一时间后八位
              m=IapReadByte(IAP_ADDRESS+14); //时间前八位
              n=IapReadByte(IAP_ADDRESS+15); //时间后八位
              Press_Time=m*256+n;             //保压时间

              RunTime_C=IapReadByte(IAP_ADDRESS+16);             //周期三压榨总时
              Wait_C=IapReadByte(IAP_ADDRESS+17);                 //周期三停顿时间
              Press_C=IapReadByte(IAP_ADDRESS+18);             //周期三压榨时间
              }
/*************写时间参数到EEPROM*******************************/
               void Write_EepromTime()
              {
               LED=0;
               IapEraseSector(IAP_ADDRESS); //扇区擦除
               IapProgramByte(IAP_ADDRESS+0,RunTime_A/256);   /*周期一压榨总时高八位*/    
               IapProgramByte(IAP_ADDRESS+1,RunTime_A%256);   /*周期一压榨总时低八位*/

               IapProgramByte(IAP_ADDRESS+2,Wait_A/256);      /*周期一停顿时间高八位*/  
               IapProgramByte(IAP_ADDRESS+3,Wait_A%256);      /*周期一停顿时间低八位*/

               IapProgramByte(IAP_ADDRESS+4,Press_A/256);     /*周期一压榨时间高八位*/
               IapProgramByte(IAP_ADDRESS+5,Press_A%256);     /*周期一压榨时间低八位*/

               IapProgramByte(IAP_ADDRESS+6,RunTime_B/256);   /*周期二压榨总时高八位*/    
               IapProgramByte(IAP_ADDRESS+7,RunTime_B%256);   /*周期二压榨总时低八位*/

               IapProgramByte(IAP_ADDRESS+8,Wait_B/256);      /*周期二停顿时间高八位*/  
               IapProgramByte(IAP_ADDRESS+9,Wait_B%256);      /*周期二停顿时间低八位*/

               IapProgramByte(IAP_ADDRESS+10,Press_B/256);    /*周期二压榨时间高八位*/
               IapProgramByte(IAP_ADDRESS+11,Press_B%256);    /*周期二压榨时间低八位*/

               IapProgramByte(IAP_ADDRESS+12,Back_Time);      /*写入回程时间*/
               IapProgramByte(IAP_ADDRESS+13,Down_Time);      /*下降一时间*/
               IapProgramByte(IAP_ADDRESS+14,Press_Time/256); /*写入保压时间高八位*/
               IapProgramByte(IAP_ADDRESS+15,Press_Time%256); /*写入保压时间低八位*/

               IapProgramByte(IAP_ADDRESS+16,RunTime_C);      /*周期三压榨总时*/    
               IapProgramByte(IAP_ADDRESS+17,Wait_C);         /*周期三停顿时间*/  
               IapProgramByte(IAP_ADDRESS+18,Press_C);        /*周期三压榨时间*/
               
               }
/*************关所有输出*******************************/             
               void reset_io()
               {
               P3M0=0X00;
               P3M1=0X00;
               P5M0=0;    
               P5M1=0;
               DOWN=1;                           //气缸下降
               UP=1;                             //气缸上升
               INTPUT1=1;                         //
               }
/****************按键计数器状态寄存器归零*************/
               void RstKey()
               {
               kcounter=0;                       //按键计数器归零
               kstatus=0;                        //状态寄存器归零
               }
/*****************按键低电平检测函数*****************/
               void   LowVoltKey(void)           //按键计数器状态标志加一
               {
               kcounter++;                       
               kstatus++;     
               delay(5);                         //延时                  
               }
/*****************按键高电平检测函数*****************/
               void    HighVoltKey(void)         //按键计数器加一 状态标志归零
               {
               kcounter++;                       //按键计数器加一
               kstatus=0;                        //按键状态标志归零
               Delay100ms(5);                         //延时
               }
/*------------page 0页面显示---------------------*/
               void disdata_a()//周期一参数    周期二参数
               {
                red_eeprom();
                printf("n0.val=%d\xff\xff\xff",RunTime_A);    //第一段周期总时
                printf("n0.val=%d\xff\xff\xff",RunTime_A);    //第一段周期总时
                printf("n1.val=%d\xff\xff\xff",Wait_A);        //第一段停顿时间
                printf("n2.val=%d\xff\xff\xff",Press_A);    //第一段压榨时间
                printf("n3.val=%d\xff\xff\xff",RunTime_B);    //第二段周期总时
                printf("n4.val=%d\xff\xff\xff",Wait_B);        //第二段停顿时间
                printf("n5.val=%d\xff\xff\xff",Press_B);    //第二段压榨时间
                LED=1;
               }
/*------------page 2页面显示---------------------*/
               void disdata_b()//                            //周期三参数  系统参数
               {
                red_eeprom();
                printf("n0.val=%d\xff\xff\xff",RunTime_C);    //第三段周期总时
                printf("n0.val=%d\xff\xff\xff",RunTime_C);    //第三段周期总时
                printf("n1.val=%d\xff\xff\xff",Wait_C);        //第三段停顿时间
                printf("n2.val=%d\xff\xff\xff",Press_C);    //第三段压榨时间
                printf("n3.val=%d\xff\xff\xff",Down_Time);    //下降一时间
                printf("n4.val=%d\xff\xff\xff",Press_Time);    //保压时间
                printf("n5.val=%d\xff\xff\xff",Back_Time);    //回程时间
                LED=1;
               }
/*------------自动压榨开始---------------------*/
              void start()
              {        
              uint t1;    
              RUN_TIME=0;                        //压榨总时间清零
              printf("page 4\XFF\XFF\XFF");         //第三段周期界面显示
              disdata_a();
              FLAG_S=1;                          //1 下降 2上升 3停止 4结束      5保压      6待机       7周期一 8周期二
              printf("va0.val=%d\xff\xff\xff",FLAG_S);    //触摸屏变量va0,用于定时器判断变量显示中文内容
              Delay100ms(5);                     //延时(5);
              DOWN=0;                             //
              UP=1;                                 //
              Delay_100ms(Down_Time*10);         //下降一时间
              RUN_TIME+=Down_Time*10;             //
              DOWN=1;    
              FLAG_S=3;                          //1 下降 2上升 3停止  4结束   5保压 6待机      7周期一 8周期二
              printf("va0.val=%d\xff\xff\xff",FLAG_S);//
              Run_Flag=1;                         //自动运行标志
              while(Run_Flag)
               {
                Delay100ms(Wait_A*10);             //周期一停顿时间
                RUN_TIME+=Wait_A*10;
                DOWN=0;                             //下降
                FLAG_S=1;                        //1 下降 2上升 3停止 4结束      5保压    6待机      7周期一 8周期二
                printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
                Delay100ms(Press_A);           //压榨时间
                RUN_TIME+=Press_A;
                DOWN=1;                             //停止
                FLAG_S=3;                        //1 下降 2上升 3停止  4结束   5保压  6待机       7周期一 8周期二
                printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
                if(RUN_TIME>=RunTime_A*10)         //总时间大于等于设定值
                Run_Flag=0;                         //自动运行标志 结束周期一循环
                printf("n7.val=%d\xff\xff\xff",RUN_TIME/10);    //
               }
//周期一结束
               FLAG_S=8;                         //1 下降 2上升 3停止  4结束   5保压   6待机  7周期一 8周期二
               printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
               Delay100ms(5);                    //延时(5);
               RUN_TIME=0;                         //计时器归零
               printf("n7.val=%d\xff\xff\xff",RUN_TIME);    //
               Run_Flag=1;                         //自动运行标志,启动周期二循环
               while(Run_Flag)
               {
                Delay100ms(Wait_B*10);             //周期二停顿时间
                RUN_TIME+=Wait_B*10;
                DOWN=0;                             //下降
                FLAG_S=1;                        //1 下降 2上升 3停止 4结束     5保压  6待机  7周期一 8周期二
                printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
                Delay100ms(Press_B);             //压榨时间
                RUN_TIME+=Press_B;
                DOWN=1;                             //停止
                FLAG_S=3;                        //1 下降 2上升 3停止  4结束   5保压  6待机      7周期一 8周期二
                printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
                if(RUN_TIME>=RunTime_B*10)         //总时间大于等于设定值
                Run_Flag=0;                         //自动运行标志 结束周期二循环
                printf("n7.val=%d\xff\xff\xff",RUN_TIME/10);    //
               }
//周期二结束
               FLAG_S=9;                          //1 下降 2上升 3停止 4结束      5保压      6待机       7周期一 8周期二
               printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
               printf("page 5\XFF\XFF\XFF");                //第三段周期界面显示
               disdata_b();
                  RUN_TIME=0;                                    //计时器归零
               printf("n7.val=%d\xff\xff\xff",RUN_TIME);    //时间运行显示
               Run_Flag=1;                         //自动运行标志,启动周期三循环
               while(Run_Flag)
               {                                  //Delay100ms
                for(t1=0;t1<Wait_C*60;t1++)          //
                {
                Delay100ms(10);                      //1ms
                printf("n7.val=%d\xff\xff\xff",t1);//
                }
                RUN_TIME+=Wait_C;
                DOWN=0;                             //下降
                FLAG_S=1;                        //1 下降 2上升 3停止 4结束     5保压  6待机    7周期一 8周期二
                printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
                for(t1=0;t1<Press_C*60;t1++)
                {
                Delay100ms(10);                      //1ms
                printf("n7.val=%d\xff\xff\xff",t1);//
                }
                RUN_TIME+=Press_C;
                DOWN=1;                             //停止
                FLAG_S=3;                        //1 下降 2上升 3停止  4结束   5保压  6待机      7周期一8周期二9周期三
                printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
                if(RUN_TIME>=RunTime_C)             //总时间大于等于设定值
                Run_Flag=0;                         //自动运行标志 结束周期三循环
                printf("n7.val=%d\xff\xff\xff",RUN_TIME);    //总时间显示
               }
//周期三结束
               DOWN=0;
               FLAG_S=5;                         //1 下降 2上升 3停止  4结束   5保压   6待机  7周期一 8周期二 9周期三
               printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
               RUN_TIME=0;                         //计时器归零
               printf("n7.val=%d\xff\xff\xff",RUN_TIME/10);    //
               Delay_100ms(Press_Time*10);         //保压        
               DOWN=1;                           //关下降
               FLAG_S=2;                         //1 下降 2上升 3停止  4结束    5保压  6待机   7周期一 8周期二 9周期三
               printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
               UP=0;                             //开上升
               Delay_100ms(Back_Time*10);         //
               UP=1;                             //关上升
               FLAG_S=4;                         //1 下降 2上升 3停止 4结束     5保压      6待机       7周期一 8周期二    9周期三
               printf("va0.val=%d\xff\xff\xff",FLAG_S);    //
               printf("page 0\XFF\XFF\XFF");                //第三段周期界面显示
               Delay100ms(10);                    //延时(10);
               disdata_a();
               }
/*------------初始化串口---------------------*/
              void InitUart()
              {
              SCON = 0x50;
              TMOD = 0x20;
              TL1 = BRT;
              TH1 = BRT;
              TR1 = 1;
              AUXR = 0x40;
              TI=1;                                 //
              ES=1;                                 //
              EA=1;                                 //
              }
/*×--------UART 中断服务程序-------------------**/
/**×**把接收到的数据存进数组a[i]**i开机初始化****/
/***×*接收到触摸屏结束码Receive_Flag标志位置1****/
/****×主程序检测到标志码=1判断指令功能***********/
              void Uart() interrupt 4 using 1
              {
               if(RI)
               {
                if(SBUF==0XFA)                     //触摸屏结束码
                {
                Receive_Flag=1;                     //接收数据标志置一
                RI=0;                             //
                data_i=0;                             //数组计数器归零
                }
                else
                {
                a[data_i]=SBUF;                        //数组下标位置的数据等于SBUF
                RI=0;                              //
                data_i++;
                }
               }
              }
/*************************************************/
              void   main( )                      /*主程序开始*/
              {
               reset_io();
               P_SW1=0x00;                       //RXD/P3.0, TXD/P3.1
               Receive_Flag=0;    
               InitUart();                        //初始化串口
               printf("0XFF,0XFF,0XFF");
               Delay100ms(10);                    //延时(10);
               disdata_a();
               Run_Flag=0;
               Delay100ms(10);                    //延时(10);
               Dataa_Flag=0;
               Datab_Flag=0;
               data_i=0;
               while(1)            //INTPUT1
               {
                if(Dataa_Flag==1)
                {
                Dataa_Flag=0;
                disdata_a();
                }
                if(Datab_Flag==1)
                {
                Datab_Flag=0;
                disdata_b();
                }

               if(Receive_Flag==1)
               {
                Receive_Flag=0;                           //重新接收
/*************周期一*********/
                 if(a[0]==0XE0)            
                 {
                  if(a[1]==0X00)                   //周期一
                  {
                  RunTime_A=a[3]*256+a[2];       //周期一压榨总时
                  Dataa_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",RunTime_A);//数据校对
                  }
                  else if(a[1]==0X01)
                  {
                  Wait_A=a[3]*256+a[2];          //周期一停顿时间
                  Dataa_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Wait_A);    //
                  }
                  else if(a[1]==0X02)       
                  {
                  Press_A=a[3]*256+a[2];         //周期一压榨时间
                  Dataa_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Press_A);    //
                  }
/*************周期二*********/
                  else if(a[1]==0X03)
                  {
                  RunTime_B=a[3]*256+a[2];       //周期二压榨总时
                  Dataa_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",RunTime_B);    //
                  }                        
                  else if(a[1]==0X04)
                  {
                  Wait_B=a[3]*256+a[2];          //周期二停顿时间
                  Dataa_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Wait_B);    //
                  }                          
                  else if(a[1]==0X05)
                  {
                  Press_B=a[3]*256+a[2];         //周期二压榨时间
                  Dataa_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Press_B);    //
                  }    
/*************周期三*********/
                  else if(a[1]==0X06)
                  {
                  RunTime_C=a[2];       //周期三压榨总时
                  Datab_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",RunTime_C);    //
                  }                        
                  else if(a[1]==0X07)
                  {
                  Wait_C=a[2];          //周期三停顿时间
                  Datab_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Wait_C);    //
                  }                          
                  else if(a[1]==0X08)
                  {
                  Press_C=a[2];         //周期三压榨时间
                  Datab_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Press_C);    //
                  }    
//系统参数
/*************系统参数*******/
                  else if(a[1]==0X09)
                  {
                  Down_Time=a[2];                //下降一时间
                  Datab_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Down_Time);    //
                  }    
                  else if(a[1]==0X0A)
                  {
                  Press_Time=a[3]*256+a[2];      //保压时间
                  Datab_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Press_Time);    //
                  }    
                  else if(a[1]==0X0B)
                  {
                  Back_Time=a[2];                //回程时间
                  Datab_Flag=1;
                  printf("n6.val=%d\xff\xff\xff",Back_Time);    //
                  }    
                 Write_EepromTime();
                }
                else  if(a[0]==0XE2)                     //主画面后初始化事件
                {
                  if(a[1]==0X20)             //
                  {
                  UP=0;                          //气缸上升
                  }
                  else  if(a[1]==0X21)               //
                  {
                  DOWN=0;                        //气缸下降
                  }
                  else  if(a[1]==0X22)             //
                  {
                  DOWN=1;                        //关闭气缸下降
                  UP=1;                          //关闭气缸上升
                  }
                  else  if(a[1]==0XA1)             //    周期一参数    周期二参数
                  {
                   LED=0;
                   Delay100ms(20);                    //延时(10);
                   Dataa_Flag=1;
                  // disdata_a();                  //
                  }
                  else  if(a[1]==0XA2)             //周期三参数     系统参数
                  {
                   LED=0;
                   Delay100ms(20);                    //延时(10);
                   Datab_Flag=1;
                   //disdata_b();                  //周期一参数
                  }
                  if(a[1]==0XE2)               //数据全部删除
                  {
                  RUN_TIME=0;   //运行总时间     累计
/*************周期一*********/              
                  RunTime_A=0; //停顿时间  第一段
                  Wait_A=0;    //停顿时间
                  Press_A=0;    //压榨时间
/*************周期二*********/
                  RunTime_B=0;  //停顿时间  第二段
                  Wait_B=0;    //停顿时间
                  Press_B=0;   //压榨时间
/*************周期二*********/
                  RunTime_C=0;  //停顿时间  第三段
                  Wait_C=0;    //停顿时间
                  Press_C=0;    //压榨时间
/*************系统参数*******/
                  Back_Time=0;  //回程时间
                  Down_Time=0;  //下降一时间
                  Press_Time=0; //保压时间
                  Write_EepromTime();
                  }
                 }
                }  
///
               RstKey();
               for(;kcounter<5;)                //按键循环5次
               {
                if(!INTPUT1)                    //按键低电平
                {
                LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                }
                else if(~!INTPUT1)              //按键高电平
                {
                HighVoltKey();                    //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                   /*按键状态标志大于等于3为有效值*/
               {  
               start();
               }
             }     
            }                    //L573 CODE 3919 2021 1 25

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js-判断变量是否定义

if (typeof myVar undefined) {// myVar (未定义) 或 (已定义但未初始化) } else {// myVar (已定义和已初始化) } 参考 https://www.cnblogs.com/redFeather/p/17662966.html

yield代码解释

目录 我们的post请求爬取百度翻译的代码 详细解释 解释一 解释二 再说一下callback 总结 发现了很多人对存在有yield的代码都不理解&#xff0c;那就来详细的解释一下 我们的post请求爬取百度翻译的代码 import scrapy import jsonclass TestpostSpider(scrapy.Spider):…

Linux网络套接字之预备知识

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、预备知识 1.理解源IP地址和目的IP地址 …

表单进阶(4)-下拉菜单

select支持&#xff1a; 1.size显示几个 2.multiple同时选中多个 如果用select&#xff0c;option必须设置value值 option支持的属性&#xff1a; 1.value&#xff0c;提供给后端的值 2.selected&#xff0c;默认选中 <!DOCTYPE html> <html lang"en"> …

编程示例: 矩阵的多项式计算以javascript语言为例

编程示例: 矩阵的多项式计算以javascript语言为例 国防工业出版社的《矩阵理论》一书中第一章第8个习题 试计算2*A^8-3*A^5A^4A^2-4I A[[1,0,2],[0,-1,1],[0,1,0]] 代码如下 <html> <head> <title> 矩阵乘法 </title> <script srcset.js ><…

【解读】OWASP 大语言模型(LLM)安全测评基准V1.0

大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;是指参数量巨大、能够处理海量数据的模型, 此类模型通常具有大规模的参数&#xff0c;使得它们能够处理更复杂的问题&#xff0c;并学习更广泛的知识。自2022 年以来&#xff0c;LLM技术在得到了广泛的应…

Selenium WebDriver API 中涉及的一些常用方法和类

Selenium WebDriver API 是 Selenium 提供的一组方法和类&#xff0c;用于控制浏览器和操作 Web 元素。这些 API 提供了丰富的功能&#xff0c;包括但不限于&#xff1a; 1. **查找元素**&#xff1a;通过不同的定位方式&#xff08;如ID、Class Name、XPath等&#xff09;在页…

C++学习随笔(1)——初识篇

前面一章我们简单介绍了一下C与C语言之间的关系&#xff0c;本章就让我们来正式入门学习一下C吧&#xff01; 目录 1.第一个C程序 2.头文件 &#xff08;1&#xff09;简介 &#xff08;2&#xff09;常见的头文件&#xff1a; 2. 命名空间 2.1 命名空间定义 2.2 命名空…

leetcode 热题 100_搜索二维矩阵

题解一&#xff1a; 二叉搜索树&#xff1a;从矩阵右上角观察&#xff0c;结构类似二叉搜索树&#xff0c;因此可以用类似的解法来做。具体做法是双指针从右上角开始&#xff0c;向左下角逐步搜索&#xff0c;如果当前值比目标值大&#xff0c;则向下移动&#xff0c;如果当前值…

了解 HTTPS 中间人攻击:保护你的网络安全

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot&#xff0c;接下来我来操作一番。 一&#xff0c;创建spring boot工程 勾选下面的选项 紧接着&#xff0c;还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot&#xff0c;项目。 简化目录结构&#xff1a; 我们发现&a…

Qt 实现诈金花的牌面值分析工具

诈金花是很多男人最爱的卡牌游戏 , 每当你拿到三张牌的时候, 生活重新充满了期待和鸟语花香. 那么我们如果判断手中的牌在所有可能出现的牌中占据的百分比位置呢. 这是最终效果: 这是更多的结果: 在此做些简单的说明: 炸弹(有些地方叫豹子) > 同花顺 > 同花 > 顺…

Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

目录 TP框架-开发-配置架构&路由&MVC模型 TP框架-安全-不安全写法&版本过滤绕过 思维导图 PHP知识点 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框架开发等 技…

安卓提示风险解决源码搭建教程

一&#xff0e;环境 1.安装Nginx 2.安装Tomcat8.5 3. 安装Mysql5.7 二&#xff0e;修改app已生成的文件下载地址 1.打开编辑config.properties 2.填写你的ip&#xff0c;端口不用修改 三&#xff0e;启动教程 启动命令&#xff1a;sh.start.sh 源码下载链接:https://p…

计算机网络 IP多播的概念

多播是让源主机一次发送的单个分组可以抵达用一个组地址表示的若干目的地址&#xff0c;即&#xff0c;一对多的通信。在互联网上进行的多播&#xff0c;称为IP多播。 与单播相比&#xff0c;在一对多的通信中&#xff0c;多播可以大大节约网络资源。 IP多播地址&#xff0c;…

ArrayDeque集合源码分析

ArrayDeque集合源码分析 文章目录 ArrayDeque集合源码分析一、字段分析二、构造函数分析方法、方法分析四、总结 实现了 Deque&#xff0c;说面该数据结构一定是个双端队列&#xff0c;我们知道 LinkedList 也是双端队列&#xff0c;并且是用双向链表 存储结构的。而 ArrayDequ…

【今日面经】24/3/9 广州Java某小厂电话面经

面经来源&#xff1a;https://www.nowcoder.com/?type818_1 目录 1、 和equals()有什么区别&#xff1f;2、String变量直接赋值和构造函数赋值比较相等吗&#xff1f;3、String一些方法&#xff1f;4、抽象类和接口有什么区别&#xff1f;5、Java容器有哪些&#xff1f;6、Lis…

Spring MVC | Spring MVC 的“核心类” 和 “注解”

目录: Spring MVC 的“核心类” 和 “注解” &#xff1a;1.DispatcherServlet (前端控制器)2.Controller 注解3.RequestMapping 注解3.1 RequestMapping 注解的 “使用”标注在 “方法” 上标注在 “类” 上 3.2 RequestMapping 注解的 “属性” 4.组合注解4.1 请求处理方法的…

哪些狗粮比较适合幼年犬?

亲爱的朋友&#x1f44b;&#xff0c;你为家中的幼年犬挑选狗粮可真是个贴心的主人呢&#xff01;选择适合幼年犬的狗粮&#xff0c;确实是个需要仔细考虑的问题。幼年犬处于生长发育的关键期&#xff0c;所以狗粮的营养成分和口感都非常重要。 &#x1f436; 在选择狗粮时&…

排序算法全景:从基础到高级的Java实现

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…