MC9S12G128开发板—实现按键发送CAN报文指示小车移动功能

实验环境:MC9S12G128开发板

基本功能:控制开发板上的按键,模拟车辆移动的上下左右四个方位,通过can通信告诉上位机界面,车辆轨迹的移动方位。

1. 1939报文发送的示例代码

MC9S12G128开发板1939协议发送can报文数据的示例代码如下:

/*************************************************************/
/*                        主函数                             */
/*************************************************************/
void main(void) {
  DisableInterrupts;
  INIT_PLL();
  initialize_TIM();
  INIT_CAN();
  init_key();
  LEDCPU_dir=1;
  LEDCPU=0;
  EnableInterrupts;

//填写报文内容
  msg_send.id = ID; 
  for(k=0;k<data_len_TX;k++)
  {
     msg_send.data[k] = senddata[k];
  }
  msg_send.len = data_len_TX;
  msg_send.RTR = FALSE;
  msg_send.prty = 0;

  for(;;) 
  {
      delay1ms(500);
      if(!MSCANSendMsg(msg_send)) //发送过程出现错误
          for(;;);
      else
          LEDCPU=~LEDCPU;
  } 
}

在这里插入图片描述

2. 按键查询的示例代码

MC9S12G128开发板的按键查询的示例代码如下:

/*************************************************************/
/*                          主函数                           */
/*************************************************************/
void main(void) {
	DisableInterrupts;
  init_led_key();	
  EnableInterrupts;


  for(;;) 
  {
      delay();
      //data=data<<1;         //左移一位
      //if(data==0)
      //    data=0x01;
      if(KEY1==0&&KEY1_last==1)   //按键F1按下
          mode=1;
      if(KEY2==0&&KEY2_last==1)   //按键F2按下
          mode=2;        
      if(KEY3==0&&KEY3_last==1)   //按键F3按下
          mode=3; 
      if(KEY4==0&&KEY4_last==1)   //按键F4按下
          mode=4; 
      KEY1_last=KEY1;             //保存F1的状态
      KEY2_last=KEY2;             //保存F2的状态
      KEY3_last=KEY3;
      KEY4_last=KEY4;
      if(mode==1)
          LED = ~(0x01);
      else if(mode==2)
          LED = 0xFB;
      else if(mode==3)
          LED = 0xEF;
      else if(mode==4)
          LED = 0xBF;
      else
          LED = 0xff;                        
  } 
}

在这里插入图片描述

3. 按键发送报文的代码

参考1939报文发送示例代码+按键查询示例代码,指定按键发送相应报文给上位机从而显示车辆目前的方位。

/*************************************************************/
/*                        主函数                             */
/*************************************************************/
void main(void) {
  DisableInterrupts;
  INIT_PLL();
  initialize_TIM();
  INIT_CAN();
  init_led_key();
  LEDCPU_dir=1;
  LEDCPU=0;
  EnableInterrupts;

//填写报文内容
  msg_send.id = ID; 
  for(k=0;k<data_len_TX;k++)
  {
     msg_send.data[k] = senddata[k];
  }
  msg_send.len = data_len_TX;
  msg_send.RTR = FALSE;
  msg_send.prty = 0;

  for(;;) 
  {
      if(KEY1==0&&KEY1_last==1)   //按键F1按下
          mode=1;
      if(KEY2==0&&KEY2_last==1)   //按键F2按下
          mode=2;        
      if(KEY3==0&&KEY3_last==1)   //按键F3按下
          mode=3; 
      if(KEY4==0&&KEY4_last==1)   //按键F4按下
          mode=4; 
      KEY1_last=KEY1;             //保存F1的状态
      KEY2_last=KEY2;             //保存F2的状态
      KEY3_last=KEY3;
      KEY4_last=KEY4;
      if(mode==1)
      {
          LED = ~(0x01);
          msg_send.data[0]= 0x01;  
          msg_send.data[1]= 0x00; 
          msg_send.data[2]= 0x00; 
          msg_send.data[3]= 0x00; 
      }
      else if(mode==2)
      {
          LED = 0xFB;
          msg_send.data[1]= 0x01;
          msg_send.data[0]= 0x00; 
          msg_send.data[2]= 0x00; 
          msg_send.data[3]= 0x00;
      }
      else if(mode==3)
      {
          LED = 0xEF;
          msg_send.data[2]= 0x01;
          msg_send.data[0]= 0x00; 
          msg_send.data[1]= 0x00; 
          msg_send.data[3]= 0x00; 
      }
      else if(mode==4)
      {
          LED = 0xBF;
          msg_send.data[3]= 0x01;
          msg_send.data[0]= 0x00; 
          msg_send.data[1]= 0x00; 
          msg_send.data[2]= 0x00; 
      }
      else
          LED = 0xff;
      
      delay1ms(200);
      if(!MSCANSendMsg(msg_send)) //发送过程出现错误
        for(;;);
      else
          LEDCPU=~LEDCPU;
  } 
}

4. 界面演示

开发板上按动 KEY1:报文 01 00 00 00 FF FF FF FF 指示小车往上移动
开发板上按动 KEY2:报文 00 01 00 00 FF FF FF FF 指示小车往下移动
开发板上按动 KEY3:报文 00 00 01 00 FF FF FF FF 指示小车往左移动
开发板上按动 KEY4:报文 00 00 00 01 FF FF FF FF 指示小车往右移动

在这里插入图片描述

小车向上移动:

在这里插入图片描述

小车向左移动:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Logintern09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值