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

news2024/11/25 23:01:07

实验环境: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 指示小车往右移动

在这里插入图片描述

小车向上移动:

在这里插入图片描述

小车向左移动:

在这里插入图片描述

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

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

相关文章

redmine问题跟踪系统4.1版本一键安装包下载

很好用的项目管理&#xff0c;缺陷跟踪系统&#xff0c;开源免费使用 Version 4.1.1-4 2020-08-31 由 redmineplugins.cn Admin 在 超过 2 年 之前添加 Version 4.1.1-4 2020-08-31 Maintenance releaseUpdated Apache to 2.4.46Updated Git to 2.28.0Updated PHP to 7.3.21U…

初识uniapp

创建小程序 依次点击HBuilderx 左上方的按钮&#xff1a;文件->新建->项目 然后打开该界面&#xff0c;输入项目名称&#xff0c;点击 浏览 按钮&#xff0c;可以选择项目保存的目录&#xff0c;这些完成后点击 创建 按钮就好了 比如小颖的项目名叫 &#xff1a;test-y…

基于一致性的半监督学习用于诊断x线片分类

文章目录 Consistency-Based Semi-supervised Evidential Active Learning for Diagnostic Radiograph Classification摘要方法Evidential-based Semi-supervised LearningEvidential-based Active Learning Consistency-Based Semi-supervised Evidential Active Learning for…

Java+Angular开发的医院信息管理系统源码,系统部署于云端,支持多租户

云HIS系统源码&#xff0c;采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统源码&#xff0c;采用云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、…

第四届CECC中国计算机教育大会召开,飞桨持续加码产教融合教育新生态

‍‍大模型作为人工智能发展的新方向&#xff0c;对人才的需求和培养带来了新挑战。4月21日至22日&#xff0c;以“新时代 新挑战 新任务”为主题的第四届中国计算机教育大会&#xff08;CECC&#xff09;在厦门召开&#xff0c;飞桨承办“人工智能与大模型”论坛同期举办。立足…

【Python安卓开发】BeeWare框架:环境准备

&#x1f4ad; 写在前面&#xff1a;我们假定读者已经安装好了 3.8 版本后的 Python&#xff0c;并且安装好了依赖项&#xff0c;在 Windows 上构建 BeeWare 应用程序需要 Git&#xff0c;你可以可以从 git-scm.org 网站下载。安装完毕后重新启动 cmd&#xff0c;然后就可以准备…

Compiler- 循环展开

循环展开不仅在编译原理中有涉及到&#xff0c;笔者记得在CSAPP里面也提到了这种优化方法。 话不多说&#xff0c;我们先来看个例子。 int loop(int a) {int result 0;for(int i 0; i < a; i){result i;}return result; }int loop1(int a) {int result 0;int len a/2…

虚拟化、容器与Docker基本介绍以及安装部署镜像加速

目录 一.虚拟化概述 1.虚拟化是什么&#xff1f; 2.虚拟化两大组件 3.虚拟化类型 4.虚拟化功能 二.容器概述 1.容器是什么&#xff1f; 2.容器的优点 3.容器的缺点 三.Docker概述 1.Docker是什么&#xff1f; 2.Docker容器与虚拟机的区别 3.容器在内核中支持两种重…

从0开始学习docker-1.mysql安装

从0开始学习docker 环境安装安装mysql备份镜像删除镜像镜像恢复 环境安装 yum update yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce systemc…

IOS工程:NSThread sleepForTimeInterval的使用,游戏中途中断(接电话或者点击Home按钮),重新回到游戏音频音效失效问题

IOS工程&#xff1a;NSThread sleepForTimeInterval的使用&#xff0c;游戏中途中断&#xff08;接电话或者点击Home按钮&#xff09;&#xff0c;重新回到游戏音频音效失效问题 设备/引擎&#xff1a;Mac&#xff08;11.7&#xff09;/cocos 开发工具&#xff1a;Xcode 开发…

composer 安装gitlab私有库

开发PHP项目&#xff0c;免不了用composer。最近做一个项目&#xff0c;需要到公司内部开发的核心包&#xff0c;核心包放在内网搭建的gitlab仓库中&#xff0c;于是我用composer进行下载&#xff0c;报错&#xff1a; Cloning into bare repository C:/Users/Administrator/A…

Mac电脑系统管家CleanMyMac X4.13安装下载使用教程

当我们刚刚拿到那闪亮的新Mac时&#xff0c;是多么令人愉悦的一种感觉&#xff01;随着时间的推移&#xff0c;你可能已经注意到它的速度减慢&#xff0c;磁盘空间逐渐减少。不用担心&#xff0c;CleanMyMac会为你的电脑带来焕然一新的体验。这篇文章将向你介绍CleanMyMac的奇妙…

企业oa管理系统是什么

办公自动化&#xff08;Office Automation&#xff0c;简称OA&#xff09;&#xff0c;是将计算机、通信等现代化技术运用到传统办公方式&#xff0c;进而形成的一种新型办公方式。 办公自动化利用现代化设备和信息化技术&#xff0c;代替办公人员传统的部分手动或重复性业务活…

史上最全Python14张思维导图+字节跳动出品《Python背记手册》,高清PDF限时开放!

前言 Python是一种语法简单、功能强大的编程语言&#xff0c;它既适用于传统编程语言擅长的Web开发、移动开发、游戏开发、桌面应用&#xff0c;又适用于当前流行的人工智能、大数据、科学计算、金融分析…… 如果你想要学习一门编程语言Python肯定是一个不错的选择&#xff…

Scala之集合(2)

目录 集合基本函数&#xff1a; &#xff08;1&#xff09;获取集合长度 &#xff08;2&#xff09;获取集合大小 &#xff08;3&#xff09;循环遍历 &#xff08;4&#xff09;迭代器 &#xff08;5&#xff09;生成字符串 &#xff08;6&#xff09;是否包含 衍生集合…

itop-3568 开发板系统编程学习笔记(20)看门狗应用编程

【北京迅为】嵌入式学习之Linux系统编程篇 https://www.bilibili.com/video/BV1zV411e7Cy/ 个人学习笔记 文章目录 看门狗简介看门狗编程命令&#xff08;方法&#xff09;开启和关闭看门狗设置超时时间获取超时时间喂狗 看门狗底层简析看门狗编程实验 看门狗简介 看门狗&#…

MiniGPT-4开源了:看图聊天、教学、创作、搭网站

深度学习系列文章 文章目录 深度学习系列文章前言MiniGPT4效果展示 前言 一个月前&#xff0c;OpenAI 总裁 Greg Brockman 向世人展示了 GPT-4 令人惊讶的多模态能力&#xff0c;如从手写文本直接生成网站和识别图像中的幽默元素等。 尽管目前 OpenAI 暂未对 GPT-4 用户开放这…

农业灌溉以电折水测控终端-开启用水计量新模式

产品概述 农业灌溉以电折水测控终端&#xff08;MGTR-W&#xff09;是一款拥有“最强大脑”的农业水资源计量管理终端&#xff0c;内置以电折水逻辑运算&#xff0c;主要研究耗电量与取水量之间的关系&#xff0c;分析水电折算系数&#xff0c;进而通过计算耗电量与水电折算系数…

如何在个人web项目中使用Servlet监听器?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 服务器软件&#xff1a;apache-tomcat-8.5.27 目录 一. Servlet监听器是什么&#xff1f;二. Servlet监听器有哪些作用?2.1 监听域对象的创建和销毁2.1.1 ServletContextListener接口…

zabbix自定义监控项脚本

以下脚本具体如何使用可参考以下文章 配置zabbix自定义监控项_Apex Predator的博客-CSDN博客 1.检测url是否存活 vi /opt/zabbix_jb/check_url_status.sh #!/bin/bash acurl -s -o /dev/null -w "%{http_code}" "$1" bcurl -s -o /dev/null -w "%…