HMI触摸屏输入数据 单片机接收到切换串口发送到电脑

/*开天斧3 通讯程序测试  2024 6 9 L134 CODE424**/
              #include     <REG52.H>
              #include     <intrins.H>
              #include     "stdio.h"
              #define      uint unsigned int  
              #define      uchar unsigned char
              #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首地址
              uint         xdata tab[300];
              typedef      unsigned char BYTE;
              typedef      unsigned int WORD;
              uchar        kcounter,kstatus;     //按键计数标志 按键状态标志
              sbit         OUT1=P2^0;            /****输出***/
              sbit         OUT2=P2^1;
              sbit         OUT3=P2^2;
              sbit         OUT4=P2^3;
              uchar        i,s;                  //串口接收计数器
              sbit         KEY_ADD=P3^5;
              sbit         KEY_DEC=P3^4;
              sbit         KEY_SET=P3^3;
              sbit         KEY_ENTER=P3^2;
              sbit         INTPUT=P1^2;
              uchar        DAT2=0;
              bit           Receive_Flag;
/*---------------延时子程序----------------*/
              void delay1 (uint ms)
              {
              uint i,j;
              for(i=0;i<ms;i++)
              for(j=0;j<200;j++)
              ;
              }    
/******************************************/
              void key_reset()
              {
              kcounter=0;                        //计数器归零
              kstatus=0;                         //状态计数器归零
              delay1(5);
              }
/******************************************/
              void Key_ValAdd()
              {
              kcounter++;                        //按键计数器加一
              kstatus++;                         //按键状态标志加一
              delay1(5);
              }
/******************************************/
              void Key_Clear()
              {
              kcounter++;                        //按键计数器加一
              kstatus=0;                         //按键状态标志归零
              }
/*------------初始化串口---------------------*/
              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;
              EA=1;
              }
/*--------UART 中断服务程序----Buff=SBUF---------------*/
              void Uart() interrupt 4 using 1
              {
               if(RI)
               {
                Receive_Flag=1;
                tab[i]=SBUF;                      //数组下标位置的数据等于SBUF
                RI=0;                                   //
                i++;
               }
              }
/************************************/
              void Send(uchar temp)
               {
                unsigned serial;
                serial=temp;
                SBUF=(uchar)temp;
                while(TI!=1);
                TI=0;
               }
/*------------------主循环程序----------------*/      
              void   main( )                     /*主程序开始*/
              {                                  /**加一**/
              P0M0 = 0x00;
              P0M1 = 0x00;
              P1M0 = 0x00;
              P1M1 = 0x00;
              P2M0 = 0x00;
              P2M1 = 0x00;
              P3M0 = 0x00;
              P3M1 = 0x00;
              P4M0 = 0x00;
              P4M1 = 0x00;
              P5M0 = 0x00;
              P5M1 = 0x00;
              AUXR=0X80;                         //STC系列的1T 设置
              TMOD=0X01;
              InitUart();                        //初始化串口
              ES=1;
              Receive_Flag=0;                     //接收到数据标志置零
              P_SW1 = 0x80;                      //RXD/P3.0, TXD/P3.1
              while(1)
              {
               OUT1=0;
               delay1(2000);
               OUT1=1;
               
               if(Receive_Flag==1)
               {
                OUT4=0;
                P_SW1 = 0x00;                    //RXD_3/P1.6, TXD_3/P1.7
                delay1(200);
                for(s=0;s<i;s++)
                {
                 Send(tab[s]);
                }
                Receive_Flag=0;
                i=0;
                delay1(2000);
                OUT4=1;
                P_SW1 = 0x80;                    //RXD/P3.0, TXD/P3.1
               }

            
              }
             }

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值