关于毕业设计的一些感想

                           
2020年04月24日

我的毕业设计内容是:基于 51 单片机的步进电机控制系统设计

需要编程、Proteus 仿真、撰写论文。

在 4 月 20 号之前,按老师的要求已经完成了 I/O 的分配。

由于疫情原因,开学较晚,老师昨天辅导的时候说毕业年级得 5 月 7 号左右才能开学,学校让 5 月 10 日交论文初稿,我 4 月 20 号才开始画电路图和编程。

可能是对自己比较有信心,所以开始的比较晚,看着同学的毕业设计进度,其实也跟我差不多,都刚开始弄。

4 月 20 - 4 月 24 日,我把程序编好并仿真通过,在此期间也遇到很多问题,下面以此说明一下。

1、逻辑错误

编程基本上都会有逻辑错误,所以不要一下子编很多行代码,最好写完一个函数就测试一下,这样出现错误的话可以更加精准地定位、修改。

2、丰富的想象能力

再参考别人代码的时候要在大脑中想出来这个程序的执行过程,明白其中的思路,然后再按照自己的想法独立编写适合自己项目的程序。

丰富的想象能力也可以让你在寻找错误时快速定位,如果想象力不够就用笔、纸在本子上模拟程序执行过程,这样可以更加轻松地发现问题。

3、实验能力

虽然画好相关电路图,但是在测试程序时并没有达到想要的结果,这个时候,如果确定不是程序的问题,可以将元器件单独摘出来,独立编写测试程序。

比如在使用 L297 芯片时,虽然单片机 I/O口向 L297 的 Clock 引脚发送脉冲,但是 L297 并未响应,我觉得电路画的没问题啊, 在仿真时仔细检查引脚电平变化,发现 HALF/FULL 引脚电平异常(非高非低),看了一下,它经过一个电阻与地相连,看不出什么问题,然后我将 HALF/FULL 直接接地,L297 运行正常。

在单独使用一端接 +5V 另一端 接 L297 的 Clock 引脚的独立电路测试 L297芯片时,发现无论怎么按动按键,L297 也不正常工作,后来接入单片机 I/O 口进行测试,一切正常。

如果一种方法不行就多试几种方法,要有发散性思维,思维不要被问题局限。

3、计划比不上变化

在之前我考虑使用串行 SPI 方式控制 LCD12864 ,然后发现 Proteus 的元件库中没有支持 SPI 通信方式的 12864 ,后来更改了 I/O 分配表,改为并行方式控制 12864。

这也是我在 I/O 分配时没有考虑 Proteus 中没有支持 SPI 通信方式的 12864,所以在进行 I/O 分配时要考虑到能否仿真的问题。

在遇到这种情况时,不能固执己见,要按照具体情况灵活变通。

4、编程即逻辑

无论发生什么错误,基本上 90% 都属于逻辑错误,仔细检查逻辑就能解决。

因为一般的错误 Keil 编译的时候会指出来,而逻辑错误并没有提示,你需要根据实际情况去寻找,如果经验丰富,找到的速度就会很快。

之前同学跟老师说,编程没有问题,出现问题就是逻辑问题,我想这不是废话嘛。

在帮同学做课程设计的时候,SPI 通信的12864 出现乱码,同学问我怎么回事,我想了想,不知道怎么回答他,就说了一句,逻辑错误改程序。

在仿真时发现程序运行特别慢,几乎现实变动 1S ,仿真界面才变动 0.1S,应该是执行的程序太多,导致计算缓慢,后来将不需要实时更改的程序放到 while 循环之外,减小计算压力,一切恢复正常。

在仿真时发现 12864 显示异常,全屏出现了很多奇怪的字符,仔细检查程序发现for 循环中定义的 unsigned 变量溢出,更改为 signed 类型后恢复正常。

5、及时保存做好备份

在编程时要考虑突然断电或者死机的情况,要养成没事就按一下 Ctrl + S 的好习惯,在这个基础上也要经常对相关文件进行备份,以免误删或中病毒。

要做好最坏的打算,误删文件、停电、电脑死机、电脑中病毒等等情况都要做好相应的准备,这样才能有备无患,降低损失。

冷场莹