基于51单片机电子指南针设计程序+原理图+PCB+Proteus仿真+设计报告

2023-10-27

功能介绍:

系统采用了磁阻(GMR)传感器采集某一方向磁场强度后通过MCU控制器对其进行处理并显示上传,通过对电子指南针硬件电路和软件程序的分析,阐述了电子指南针基本的工作原理及实现。实际测试指南针模块精度达到1°,能够在LCD上显示当前方位并能通过键盘控制上传指南针处理得到的数据到上位机。

整个系统中前端的磁阻传感器负责测量地磁场的大小并将磁场的变化转化为微弱的电流的变化,专用的磁场测量芯片负责把磁阻传感器变化的电流(模拟量)转换成微控制器可以识别的数字量,然后通过芯片内部的SPI总线上传给微控制器。微控制器将表征当前磁场大小的数字量按照方位进行归一化等处理后通过直观的LCD进行方位显示,同时可以通过键盘控制微控制器进行相应的操作,如将转换后的数据通过串口的形式发送到上位机。整个系统中还包含了实时时钟等一些辅助电路,使整个系统功能得到进一步的扩展。

230-基于51单片机电子指南针设计(程序+原理图+PCB+仿真电路+论文)

 

程序部分展示,有中文注释,新手容易看懂

void DisCurDate(unsigned char x, unsigned char y)
{
    unsigned char Date[2];
	unsigned char DisBuf[11];
	ReadPCF8583(0x05, 2, Date);                                         /* 获取PCF8583的日期                                */         
	DisBuf[4] = (Date[0] & 0x0f) + '0';	                                /* 提取日个位                                       */
	DisBuf[3] = ((Date[0] >> 4) & 0x03) + '0';                          /* 提取日十位                                       */
	DisBuf[2] = '/';
	DisBuf[1] = (Date[1] & 0x0f) + '0';	                                /* 提取月个位                                       */
	DisBuf[0] = ((Date[1] >> 4) & 0x01) + '0';                          /* 提取月十位                                       */
	DisBuf[5] = '/';
    DisBuf[6] = '2';
    DisBuf[7] = '0';
    DisBuf[8] = '0';
    DisBuf[9] = '8';
    DisBuf[10]= '\0';                                                   /* 在数组最后单元放入标识符以便判断内容结束         */
    DispStr(y*20+x, DisBuf);
}

/******************************************************************************************************************************
**函数名称:DisClock()                                                                                                       **
**函数功能:绘制钟面                                                                                                         **   
**入口参数:显示位置                                                                                                         **
**出口参数:无                                                                                                               **
**具体资源:无                                                                                                               **
**调用程序:Circle(), Line(), WriteEN(), EasyCH()                                                                            **
**备    注:                                                                                                                 **
******************************************************************************************************************************/
void DrawClock(unsigned char x, unsigned char y, unsigned char r)
{
    Circle(x, y, r);
    Line(x, y-r, x, y-r+5, 0);                                          /* 绘制0点处竖线                                    */
    Line(x, y+r, x, y+r-5, 0);                                          /* 绘制6点处竖线                                    */
    Line(x-r, y, x-r+5, y, 0);                                          /* 绘制9点处竖线                                    */
    Line(x+r, y, x+r-5, y, 0);                                          /* 绘制3点处竖线                                    */
    WriteEN(198,'E');
    WriteEN(273,'S');
    WriteEN(189,'W');
    WriteEN(93,'N');
    EasyCH(3, 1, fang);
    EasyCH(3, 2, wei);
}


/******************************************************************************************************************************
**函数名称:GraphicTest()                                                                                                    **
**函数功能:显示子函数测试程序                                                                                               **   
**入口参数:无                                                                                                               **
**出口参数:无                                                                                                               **
**具体资源:无                                                                                                               **
**调用程序:显示子函数                                                                                                       **
**备    注:                                                                                                                 **
******************************************************************************************************************************/
void GraphicTest(void)
{
  	Circle(80, 63, 60);
	Rectangle(0, 0, 159, 127, 0);
	Triangle(0, 0, 20, 30, 120, 50);
	Line(0, 0, 159, 127, 0);
	Line(0, 127, 159, 0, 1);
}

/******************************************************************************************************************************
**函数名称:DisMain()                                                                                                        **
**函数功能:主显示界面                                                                                                       **   
**入口参数:显示位置                                                                                                         **
**出口参数:无                                                                                                               **
**具体资源:无                                                                                                               **
**调用程序:无                                                                                                               **
**备    注:仅用作测试使用                                                                                                   **
******************************************************************************************************************************/
void DisMain(void)
{
    Rectangle(0, 22, 159, 127, 0);
    DrawClock(113, 70, 45);    
    Line(0, 115, 159, 115, 0);
    Line(64, 22, 64, 115, 0);
}


/******************************************************************************************************************************
**函数名称:DisCurDirc()                                                                                                     **
**函数功能:显示当前方位指针                                                                                                 **   
**入口参数:显示角度                                                                                                         **
**出口参数:无                                                                                                               **
**具体资源:无                                                                                                               **
**调用程序:WriteEN(), Line()                                                                                                **
**备    注:                                                                                                                 **
******************************************************************************************************************************/
void DisCurDirc(unsigned int Dir)
{
    unsigned char tempx, tempy;
    unsigned char Dir1, Dir2, Dir3;
    
    Dir1 = Dir/100 +'0';                                                /* 提取其各位                                       */
    Dir2 = (Dir%100)/10 + '0';
    Dir3 = (Dir%100)%10 + '0';
    WriteEN(122, Dir1);
    WriteEN(123, Dir2);
    WriteEN(124, Dir3);
    
    Dir = Dir/3;                                                        /* 不满3的倍数的按3的倍数算                         */
    tempx = DirTbl[(Dir<<1)];
    tempy = DirTbl[((Dir<<1)+1)];
    LineClr(113, 70, oldtempx, oldtempy);
    Line(113, 70, tempx, tempy, 0); 
    oldtempx = tempx;
    oldtempy = tempy;
}

百度云盘资料分享链接 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机电子指南针设计程序+原理图+PCB+Proteus仿真+设计报告 的相关文章

随机推荐

  • ubuntu彻底卸载ffmpeg

    彻底卸载ffmpeg 查看ffmpeg sudo dpkg l grep ffmpeg 卸载 sudo find grep w ffmpeg sudo xargs rm r f sudo apt get purge remove ffmpe
  • OSI七层模型与TCP\IP协议

    目录 一 分层思想 二 OSI参考模型 三 TCP IP参考模型 四 TCP IP协议簇的组成 五 数据封装与解封装过程 一 分层思想 1 为什么要分层 很多不同的厂家生产各种型号的计算机 它们运行完全不同的操作系统 但 T C P I P
  • 极度简洁Ubuntu/wsl+cuda+pytorch/TensorFlow深度学习开发环境搭建

    安装CUDA wget https developer download nvidia com compute cuda 11 7 0 local installers cuda 11 7 0 515 43 04 linux run sud
  • 使用opencv时,cmake 编译,CMake Error at CMakeLists.txt:15 (find_package): 报错问题解决

    cmake时 报错CMake Error at CMakeLists txt 15 find package By not providing FindOpenCV cmake in CMAKE MODULE PATH this proje
  • electron-release-server服务器搭建遇坑记

    基础配置来自这里 不过需要另外安装一些依赖 以防出现下面的问题 sudo bower install allow root 会安装下载一堆文件 如一些静态文件js css等 npm install g grunt cli npm insta
  • git lfs linux,Git LFS 操作指南

    Gitee gitee com 已支持 Git LFS 功能 目前该功能针对付费企业开放 Git LFS 简介 Git LFS Large File Storage 大文件存储 是 Github 开发的一个 Git 的扩展 用于实现 Git
  • Node.js安装教程及其简介

    目录 Node js简介 Node js安装教程 案例 步骤一 引入 required 模块 步骤二 创建服务器 分析Node js 的 HTTP 服务器 Node js简介 本质 服务端的JS 引入 required 模块 我们可以使用
  • Java中PrintWriter、BufferedWriter以及BufferredReader基本使用详解

    PrintWriter的使用 PrintWriter 是具有自动行刷新的缓冲字符输出流 这是一个高级流 所谓的自动行刷新 意思就是说 在构造函数中指定autoFlush的值为true时 则 println printf 或 format 方
  • 测试用例_场景法

    场景法 一 应用场合 主要用于测试软件的业务流程和业务逻辑 是一种基于软件业务的测试方法 测试人员把自己当成最终用户 尽可能真实的模拟用于在使用该软件时的各种情景 重点模拟两类操作 模拟用户正确的业务操作流程 验证软件的业务功能是否能够正确
  • 智能车摄像头三轮PID参数调节

    代码已上传CSDN 包含摄像头和PID控制 设置了VIP可取这个小门槛 有兴趣可以点击下方链接自取哈 https download csdn net download weixin 53129688 87714428https downlo
  • 3 个技巧教你轻松查看多开模拟器的端口号~

    此文章来源于项目官方公众号 AirtestProject 版权声明 允许转载 但转载必须保留原链接 请勿用作商业或者非法用途 前言 我们都知道 连接模拟器设备的字符串里 需要填上各个模拟器的端口号 比如雷电模拟器的端口号为5554 auto
  • jsp简单页面计数器

    在制作站点计数器时 如果频繁的访问数数库 比如象哪种每增加一人 便写入数据库或文件的作法 当你的站点有很大的访问量时 必然会影响性能 通常的做法有两种 一是启动一个线程定时写入访问量 二是先在内存中保存访问量 只有当访问量达到一定的数量 比
  • 797. 所有可能的路径

    797 所有可能的路径 难度中等154 给你一个有 n 个节点的 有向无环图 DAG 请你找出所有从节点 0 到节点 n 1 的路径并输出 不要求按特定顺序 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点 空
  • 如何垂直居中一个浮动元素?

    问题网址 http bbs daxiangclass com thread 163 htm 如何垂直居中一个浮动元素 方法一 已经知道元素高宽 子盒子 div1 width 200px height 200px position absol
  • [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)...

    先来说一下我们学校的网站 http jwxt sdu edu cn 7777 zhxt bks zhxt bks html 查询成绩需要登录 然后显示各学科成绩 但是只显示成绩而没有绩点 也就是加权平均分 显然这样手动计算绩点是一件非常麻烦
  • android studio 中JAVA文件提示android.support.v7.app.actionbaractivity is deprecated怎样处理?

    出这个提示的地方有写解决办法呀 android support v7 app ActionBarActivity is deprecated use AppCompatActivity instead 意思是 ActionBarActivi
  • 文档工程师

    想做需求工程师 不想做开发了 行不行 请给些意见 悬赏 5 发布时间 2008 06 21 提问人 huihui2525 初级程序员 本人从事软件开发工作1年多 技术上一般般 我是做j2ee的 现在感觉越来越觉得不爱做开发了 我本人性格比较
  • [429]python下安装mayavi

    Mayavi基于Python作为VTK的载体在三维图像的渲染和交互操作方面具有很多优势 最近分析数据的混沌的状态时需要在四维层面上表现数据的效果 首先在matlab tecplot和origin试验了一番 可以说他们都可以实现 但在渲染效果
  • 密码学知识点整理

    序列 流 密码的特点 加解密速度快 无错误扩散 分组 块 密码的特点 应用模式灵活多样 组内有错误扩散 在传统观念里 往往仅注重信息的秘密性 但近代人们认为 信息的真实性 完整性以及不可否认性 在应用上往往比秘密性更重要 密钥的生命周期 密
  • 基于51单片机电子指南针设计程序+原理图+PCB+Proteus仿真+设计报告

    功能介绍 系统采用了磁阻 GMR 传感器采集某一方向磁场强度后通过MCU控制器对其进行处理并显示上传 通过对电子指南针硬件电路和软件程序的分析 阐述了电子指南针基本的工作原理及实现 实际测试指南针模块精度达到1 能够在LCD上显示当前方位并