HMI触摸屏根本没在换页时发数据,单片机却一直接收到

HMI触摸屏根本没在换页时发数据,单片机却一直接收到,    我用的淘晶驰2.4寸串口触摸屏, 有两三个界面, page0 监控状态 page1 功能按键 pa…

HMI触摸屏根本没在换页时发数据,单片机却一直接收到,    我用的淘晶驰2.4寸串口触摸屏,
有两三个界面,
page0 监控状态
page1 功能按键
page1 有五六个按键,
分别控制几个单片机IO做动作。
现在我按键发送数据给单片机,
单片机不响应,于是做了一个计数器。
接收到按键按下发送的代码,
串口中断接收到结束符计数器加1.
而现在只要从page0切换到page1.
单片机就一直在接收数据。
然后单片机再把帧计数器数据发送给触摸屏数字变量。
奇了怪了。

              #include     <REG52.H>  
              #include     <intrins.h>                  //
              #include     <string.h>
              #include     <stdlib.h>
              #include     “stdio.h”
              #define      uint unsigned int
              #define      uchar unsigned char
              typedef      unsigned char BYTE;
              typedef      unsigned int WORD;
              #define      FOSC 11059200L
              #define      T1MS (65536-FOSC/1000)      //1T模式
              uchar        mm=0;
              uint         S_Counter=0,Counter;
              bit          Counter_Flag;
              uint         i,S;
              uint         a[10];                     //定义数组a 存储串口数据串
              bit           Receive_Flag;
              sbit         INTPUT0=P1^1;
              sbit         INTPUT1=P1^0;
              sbit         INTPUT2=P3^7;
              sbit         INTPUT3=P3^6;
              sbit         INTPUT4=P3^5;
              sbit         INTPUT5=P3^4;
              sbit         OUT0=P1^5;
              sbit         OUT1=P1^2;
              sbit         OUT2=P1^3;
              sbit         OUT3=P1^4;
              sbit         OUT4=P1^6;
              sbit         Y_EN=P1^7;
              sbit         Y_F=P5^4;
              sbit         Y_B=P5^5;
              uint         kcounter,kstatus;     //按键计数标志 按键状态标志
/*——————————————*/
              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++);
               }
/****************按键计数器状态寄存器归零*************/
               void RstKey()
               {
               kcounter=0;                       //按键计数器归零
               kstatus=0;                        //状态寄存器归零
               }
/*****************按键低电平检测函数*****************/
               void   LowVoltKey(void)           //按键计数器状态标志加一
               {
               kcounter++;                       
               kstatus++;     
               }
/*****************按键高电平检测函数*****************/
               void    HighVoltKey(void)         //按键计数器加一 状态标志归零
               {
               kcounter++;                       //按键计数器加一
               kstatus=0;                        //按键状态标志归零
               }
/*********************************************/
              void resrt_io()
              {
              OUT4=0;
              Y_EN=0;
              Y_F=0;
              Y_B=0;
              OUT0=1;
              OUT1=1;
              OUT2=1;
              OUT3=1;
             }
/*×——–UART 中断服务程序——————-**/
/**×**把接收到的数据存进数组a[i]**i开机初始化****/
/***×*接收到触摸屏结束码Receive_Flag标志位置1****/
/****×主程序检测到标志码=1判断指令功能***********/
              void Uart() interrupt 4 using 1
              {
               if(RI)
               {
                if(SBUF==0XFA||SBUF==0XFF)       //触摸屏结束码
                {
                Receive_Flag=1;                     //接收数据标志置一
                RI=0;                             //
                i=0;                             //数组计数器归零
                                S_Counter++;                     //串口帧接收计数器
                }
                else
                {
                a[i]=SBUF;                        //数组下标位置的数据等于SBUF
                RI=0;                              //
                i++;
                }
               }
              }
/************INT0中断入口************************/
/*******************************************/
              void exint0() interrupt 0          //INT0中断入口
              {
               RstKey();
               for(;kcounter<20;)                //按键循环5次
               {
                if(!INT0)                        //按键低电平
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(~!INT0)                  //按键高电平
                {
                HighVoltKey();                   //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=15)
               {
               Counter++;
               Counter_Flag=1;
               }
              }
/************INT1中断入口************************/
              void   exint1() interrupt 2 //按下外部中断1后点亮OUTA一秒钟后熄灭     
              {
               RstKey();
               for(;kcounter<5000;)                //按键循环5次
               {
                if(!INT1)                    //按键低电平
                {
                LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                }
                else if(~!INT1)              //按键高电平
                {
                HighVoltKey();                    //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=4000)
               {
               //OUT2=~OUT2;                        //
               //OUT3=~OUT3;                        //
               }
              }
/*————初始化串口———————*/
               void InitUart()
               {
               SCON=0X50;                        //8位数据,可变波特率
               AUXR|=0x01;                       //串口1选择定时器2为波特率发生器
               AUXR|=0X04;                       //定时器2时钟为Fosc,即1T
               T2L=0XE0;                         //设置定时器处置  110592》9600
               T2H=0XFE;                         //设置定时器处置  110592》9600
               AUXR|=0X10;                       //启动定时器2
               TI=1;                             //
               ES=1;                             //
               EA=1;                             //
               }
/********************************************/
               void timer0() interrupt 1
               {  
               mm++;
               if(mm==1000)
                {
                mm=0;
                OUT2=~OUT2;                        //
                OUT3=~OUT3;                        //
                EX0=~EX0;
                }
               }  
/************************************/
              void   main( )                      /*主程序开始*/
              {
               resrt_io();
               INT0=1;
               INT1=1;
               IT0=1;                    //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
               EX0=1;                    //使能INT0中断
               INT1=1;
               IT1=1;                    //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
               TMOD=0x00;                    //设置定时器为模式0(16位自动重装载)
               TL0 = T1MS;                     //初始化计时值
               TH0 = T1MS >> 8;
               TR0 = 1;                        //定时器0开始计时
               ET0 = 1;                        //使能定时器0中断
               EX1=1;                           //使能INT1中断
               P_SW1=0x00;                       //RXD/P3.0, TXD/P3.1
               Receive_Flag=0;   
               InitUart();                        //初始化串口
               printf(“0XFF,0XFF,0XFF”);
               Delay100ms(5);
               i=0;
               S=0;
               Counter=0;                        //转盘出料计数
               Counter_Flag=0;
               delay(10);
               while(1)
               {
                if(Counter_Flag==1)
                {
                Counter_Flag=0;
                printf(“n0.val=%d\xff\xff\xff”,Counter);  //转盘计数器
                }
//转盘输入低电平    开转盘
               RstKey();
               for(;kcounter<5;)                //按键循环5次
               {
                if(!INTPUT0)                    //按键低电平
                {
                LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                }
                else if(~!INTPUT0)              //按键高电平
                {
                HighVoltKey();                    //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                   /*按键状态标志大于等于3为有效值*/
               {  
               S=2;
               printf(“va0.val=%d\xff\xff\xff”,S);    //
               OUT0=0;
               }
// 转盘输入高电平 关转盘
               RstKey();
               for(;kcounter<5;)                 //按键循环5次
               {
                if(~!INTPUT0)                     //转盘输入高电平
                {
                LowVoltKey();                    //转盘输入高电平 计数器加一状态标志加一
                }
                else if(!INTPUT0)                //转盘输入低电平
                {
                HighVoltKey();                   //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                   /*按键状态标志大于等于3为有效值*/
               {  
               S=1;
               printf(“va0.val=%d\xff\xff\xff”,S);    //
               OUT0=1;
               }
//推杆进开信号
               RstKey();
               for(;kcounter<5;)                //按键循环5次
               {
                if(!INTPUT1)                    //按键低电平
                {
                LowVoltKey();                   //按键低电平 计数器加一状态标志加一
                }
                else if(~!INTPUT1)              //按键高电平
                {
                HighVoltKey();                    //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                   /*按键状态标志大于等于3为有效值*/
               {  
               S=3;
               printf(“va0.val=%d\xff\xff\xff”,S);    //
               Y_EN=1;
               Y_F=1;                             //开推杆向前
               Y_B=0;
               }
//推杆进关信号
               RstKey();
               for(;kcounter<5;)                 //按键循环5次
               {
                if(~!INTPUT1)                    //推杆进高电平
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(!INTPUT1)                //推杆进低电平
                {
                HighVoltKey();                   //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                    /*按键状态标志大于等于3为有效值*/
               {  
               S=3;
               printf(“va0.val=%d\xff\xff\xff”,S);//
               Y_EN=0;
               Y_F=0;                            //开推杆向前
               Y_B=0;
               }
//推杆退开信号
              RstKey();
               for(;kcounter<5;)                 //按键循环5次
               {
                if(!INTPUT2)                     //按键低电平
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(~!INTPUT2)               //按键高电平
                {
                HighVoltKey();                   //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                    /*按键状态标志大于等于3为有效值*/
               {  
               S=3;
               printf(“va0.val=%d\xff\xff\xff”,S); //
               Y_EN=1;
               Y_B=1;                            //开推杆向后
               Y_F=0;
               }
//推杆退关信号
               RstKey();
               for(;kcounter<5;)                 //按键循环5次
               {
                if(~!INTPUT2)                    //推杆进高电平
                {
                LowVoltKey();                    //按键低电平 计数器加一状态标志加一
                }
                else if(!INTPUT2)                //推杆进低电平
                {
                HighVoltKey();                   //按键计数器加一    状态标志归零
                }
               }
               if(kstatus>=3)                    /*按键状态标志大于等于3为有效值*/
               {  
               S=3;
               printf(“va0.val=%d\xff\xff\xff”,S);    //
               Y_EN=0;
               Y_F=0;                            //关推杆向后
               Y_B=0;
               }
//
               if(Receive_Flag==1)
               {
                Receive_Flag=0;                 
                            printf(“n0.val=%d\xff\xff\xff”,S_Counter);  //串口帧接收计数器
                if(a[0]==0XE2)
                {
                 if(a[1]==0XA1)
                 {
                 resrt_io();        
                 Y_EN=1;
                 Y_F=1;                          //开推杆向前
                 Y_B=0;
                 }
                 if(a[1]==0XA2)
                 {
                 resrt_io();
                 Y_EN=1;
                 Y_F=0;                          //开推杆向后
                 Y_B=1;
                 }
                 if(a[1]==0XA3)
                 {
                 resrt_io();
                 OUT0=0;
                 }
                 if(a[1]==0XA4)
                 {
                 resrt_io();
                 OUT0=1;
                 }
                 if(a[1]==0XA5)
                 {
                 resrt_io();
                 OUT1=0;
                 }
                 if(a[1]==0XA6)
                 {
                 resrt_io();
                 OUT1=1;
                 }
                 if(a[1]==0XA8)
                 {
                 Y_EN=0;
                 Y_F=0;                          //关推杆向前
                 Y_B=0;                          //关推杆向后
                 }
                }
               }
              }  
             }                                   //L381  CODE 2217   

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115