电子指南针设计报告正文(编辑修改稿)内容摘要:
=H 输出: DB0~ DB7=状态字 写指令输入: RS=L, RW=L, E=下降沿脉冲, DB0~ DB7=指令码 输出:无 读数据输入: RS=H, RW=H, E=H 输出: DB0~ DB7=数据 写数据输入: RS=H, RW=L, E=下降沿脉冲, DB0~ DB7=数据 输出:无 图 读操作时序 图 写操作时序 数据指针设置 : 表 数据指针设置表 指令码 功能 80H+地址码( 027H, 40H67H) 设置数据地址指针 第 15 页 在 1602 中我们 就用前 16 个就行了 ,第二行也一样用前 16个地址。 我们往 DDRAM里的 00H 地址处送一个数据,譬如 0x31(数字 1 的代码 )并不能显示 1 出来。 这是令初学者很容易出错的地方,原因就是如果你要想在 DDRAM 的 00H 地址处显示数据,则必须将 00H 加上 80H,即 0x80+0x00,若要在 DDRAM 的 01H 处显示数据,则必须将 01H加上 80H 即 0x80+0x01,依次类推。 在此, LCD1602 用法及注意事项就简单的介绍到这里, 1062 从 CGROM 表上可以看到,表里面实际还有 8 个字节可用。 如果我们要想显示这 8 个用户自定义 的字符,操作方法和显示 CGROM 的一样,先设置 DDRAM 位置,再向 DDRAM 写入字符码,显示是直接取 CGRAM 的数据。 这里没用用到在此不在赘述起原理方法。 下面是 1602 与单片机的连线图。 第 16 页 图 38 LCD1602模块连线图 第 17 页 HMC5883L 与单片机通信软件设计 HMC5883L 是一款集成 IIC 总线借口的数字传感器,而 STC12 单片机没有 IIC 接口,所以采用在单片机上模拟 IIC 通讯时序与 HMC5883L 进行通信,而 HMC5883L 可以采用单字节读取和多字节读取方式,在本设计中采用 的是多字节读取方式,一次将 XYZ的值读到单片机内,具体通信软件设计思路如下: 图 HMC5883L 模块与单片机通信软件流程图 开 始 IIC Start 写信 号 发送设备地址 发送读取单元地址 IIC Start 读信号 连续读取磁场数据 读完。 IIC Stop 信号 是 否 第 18 页 LCD1602 人机界面软件设计 本设计采用 LCD1602 作为显示设备,显示的信息包括当前方位信息与与地理南极的夹角信息(角度制)。 我们从 HMC5883L 得出地磁方向在 X 与 Y 轴上的磁场强度分量,采用 atan2( )这个函数得出其与地理北极之间的夹角(弧度),再通过弧度到角度的转换,得到角度值,最后加上 180176。 ,使其 变为与南极之间的夹角,而且所有值变为正数,方便处理。 得到度数后,根据我们预先设定好的角度范围,判断当前所在哪个方位,并在LCD1602 上显示,然后将其乘以 10 倍,变为整数,通过转换,在 LCD1602 上显示与南极夹角的值,具体设计思路如下: 图 LCD1602人机界面软件流程图 系统总统软件设计 本设计的软件设计总体思路是将 HMC5883L 得到的信息送至单片机内进行处理,再转换为液晶显示数据在 LCD1602 上进行显示,得到当前的方位信息 与角度信息,由于硬件模块较少,所以很大部分工作放在了软件上, STC12 单片机是一款 1T 单片机,晶振为 ,处理速度较快,在延时上不好把握,用定时器又太浪费资源,而本设计在一些模块时序上对延时有一定要求,所以本设计借用了别人验证好的一套运用在开始 处理传感器信息 判断、显示方位 转换为液晶显示数据 显示夹角 结束 第 19 页 STC12 单片机上的延时函数集,确保系统的正常运行。 思路上采用每读完一次数据,就立即送至液晶显示的实时方式。 具体流程图如下: 图 系统总体软件流程图 开始 初始各模块 获取传感器数据 数据处理 判断、显示方位 转换为液晶显示数据 显示角度信息 第 18 页 STC12LE 系列低功耗单 片机的正常电压为 ,但 LCD1602 液晶的对比度电压要高于 5V 才能看出显示效果,最初采用 供给整个系统的时候,发现液晶上无显示,后来将系统电源调至 5V, LCD1602 就可以正常显示了,而经测试, STC12LE 单片机是可以在 5V 条件下进行工作的。 在方向的确定上,我们结合手机上自带的电子罗盘对设计进行调试,校准 HMC5883L 模块的方向,最后用胶固定到 PCB 板上。 图 液晶显示图 第 19 页 图 整体硬件调试图 第 20 页 该电子指南针设计模块简单,可集成性好,测量偏差 176。 ,可以用于航海、 山地探索的方向判定,而采用低功耗单片机增强了该设备的续航能力。 但 LCD1602 液晶为单色字符液晶,显示能力有限,如果采用更高级的嵌入式处理器,拥有足够的速度和存储器,可以采用 TFT 液晶等较好的显示设备,将人机界面做得更加完善。 本设计中HMC5883L 传感器只用到了 X 与 Y 的值,即只能在系统水被平放置时才能较为精确地测量,非常不方便,如果能结合加速度传感器与 HMC5883L 中 Z 轴的值做三维方向的判定,就可以让系统在任意姿态 下判断当前的位置信息。 在设计中,模拟 IIC 通讯是非常重要的软件设计环节,软件的优化可以为 通信节省更多的资源和时间,我们采用了 51 单片机状态寄存器的 CY 位作为通信数据位进行数据交换,免去重新在 RAM 里定义数据变量,做到了一个资源优化。 在液晶显示中,上一次显示的数据如果不能被下次显示的数据覆盖掉,就要及时清除,而如果采用命令清屏,就会使屏幕闪烁很厉害,所以我们才用用空格字符覆盖的方式,及时清除上一次显示的内容,方便下次数据的显示。 在以后的实践中,应当注意这些软件设计上的问题,让系统运行更加稳定流畅。 第 19 页 在经过几周的不懈努力中,终于完成了本次 智能化电子系统设计 的任务。 通过本设计锻炼了我 们的实践能力,也是对以后我们实际工作能力的训练和考察过程。 现在是一个高科技的时代,单片机的应用无处不在,这更坚定了我要学好单片机的决心。 本设计本身就比较简单, 整个设计的过程中每一步都是大家亲自做过的,在经过遇到问题,思索问题到解决问题的过程中,收获是最多的。 本设计重点在程序代码上,通过上网查资料对每一个模块元器件的用法一一了解清楚,最后通过对个元器件工作原理以及指令控制命令最整个设计程序进行编写。 在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路,要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为交流提供了方便,为以后编程打下基础。 由本次课程设计 从挑选课设题目,查阅资料,到研究出总体设计,详细设计,再到最后的编程上机调试,修改程序,完善程序,收获颇多。 锻炼了发现问题、分析问题和通过查看相关资料来解决问题的能力以及团队合作能力。 使自己扩大了知识面,提高了知识水平,借助仿真软件,不仅可以把课堂中所学到的知识,直接加以运 用,而且还可以把各个分离的知识组合为一个整体,真正做到理论联系实际的重要性。 使自己在专业知识和动手能力上有了很大的提高。 另外通过本次设计,使我认识到自己对单片机 C语言应用编程能力有很大的欠缺,需要在以后的学习中进一步提高。 此次智能化电子系统设计是学生大学学习阶段的一个重要的学习实践环节,它既能增强学生对所学课程内容的理解和综合,也能培养学生的综合应用及设计能力,同时,还可以拓宽课程内容和培养创新意识。 感谢 学校给我们安排课程设计,大大地加深了我们对理论知识的理解,同时有意识的培养了我们的创新思想。 第 20 页 致谢 本小组的智能化电子系统设计 是在我 们 的导师 王老师 的亲切关怀和悉心指导下完成的。 他严肃的 科研 态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我 们。 从课题的选择到项目的最终完成, 王 老师都始终给予我 们 细心的指导和不懈的支持。 在此谨向 王 老师致以诚挚的谢意和崇高的敬意。 在此,我 们 还要感谢 帮助我们答疑解惑的同学们 ,正是由于你们的帮助和支持,我 们 才能克服一个一个的困难和疑惑,直至 设计 的顺利完成。 另外,我 们 还要感谢学校能安排这次课程设计,为我们学习相关专业提供了良好的实践平台。 第 21 页 参考文献 [1] 邵婷婷,马建仓 .电子罗盘的倾斜及罗差补偿算法研究 [J].传感技术学报, 2020 [2] 三轴磁阻传感器 中文规格说明书. [3] 液晶屏中文规格说明书. [4] 华成英 .电子技术 [M].北京 .中央广播电视大学出版社, 2020 [5] 周国运 .单片机原理及应用( C 语言版) .北京:中国水利水电出版社, 2020 [6] 谭浩强 .c程序设计 .北京:清华大学出版社, 2020 第 22 页 附录 A: 电子指南针整机电路图和实物图 图 A1 系统整机电路原理图 第 23 页 图 A2 实物 图 第 23 页 附录 B: 1602液晶模块字符存储器 第 24 页 附录 C: 电子指南针程序源代码 主程序 : //*************************************** // HMC5883 //**************************************** include include include include include define uchar unsigned char define uint unsigned int define DataPort P0 //LCD1602 数据端口 sbit SCL=P1^0。 //IIC 时钟 sbit SDA=P1^1。 //IIC 数据 sbit LCM_RS=P2^0。 //LCD1602 读写 RAM sbit LCM_RW=P2^1。 //LCD1602 读写 sbit LCM_EN=P2^2。 //LCD1602 使能 define SlaveAddress 0x3C //定义器件在 IIC 总线中的从地址 typedef unsigned char BYTE。 typedef unsigned short WORD。 BYTE BUF[8]。 //接收数据缓存区 uchar ge,shi,bai,qian。 //显示变量 int dis_data。 //变 量 void delay(unsigned int k)。 void InitLcd()。 void Init_HMC5883(void)。 //初始化 5883 void WriteDataLCM(uchar dataW)。 void WriteCommandLCM(uchar CMD,uchar Attribc)。 void DisplayOneChar(uchar X,uchar Y,uchar DData)。 void conversion(uint temp_data)。 void Single_Write_HMC5883(uchar REG_Address,uchar REG_data)。 //单个写入数据 uchar Single_Re。电子指南针设计报告正文(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。