初学单片机

C51 · 2023-08-16

在大一大二时,我听说过单片机,也曾在加入实验室时学习过一些基本的单片机项目。但直到今年的8月7号,我才第一次系统的学习了单片机。考虑到时间还算充裕且我基础比较薄弱,我选择了C51单片机作为我单片机学习之路的第一站。

在本阶段内,我首先学习了通过单片机配合其他元件来实现既定功能:

  • 从最简单的led起步,我学会了用程序直接赋值点亮灯、用延时函数完成呼吸灯以及用移位函数完成流水灯。
  • 接触独立按键后,我了解了机械按键的抖动,并学会了用延时函数消除抖动;除此之外,我还制作了一个二进制计数器。
  • 到数码管时,我知道了段码和位码的概念,用快速切换各数码管来达到同时显示多个数字的效果,知道了数码管切换时的消隐并用延时函数和清零消除,并封装了数字显示函数完成了学习中的首次模块化编程。
  • 在lcd1602中,我利用已近封装好的函数来控制lcd1602的显示,使得今后的调试工作更加方便。
  • 在学习矩阵键盘后,我可以利用矩阵键盘充分控制各i/o口电平,并制作了一个密码锁;在密码锁制作完成后我又进行了如限制输入位数等多处改进,减少应用中可能出现的问题。

总之,在单片机的基础应用中,更多的是通过程序及元件影响i/o口电平高低,最终达成想要的结果。

在学习过程中,我也渐渐意识到c语言的重要性。虽然我在大一时学习过c语言并取得了不错的成绩,但对于即将上大三的我来说c语言的记忆变得比较模糊。因此在本阶段的学习中,我也加强了不少关于编程和计算机的知识

  • 我重温了子函数的相关知识,并制作函数完成了模块化编程。
  • 我了解了代码的耦合性,知道了变量定义、注释的规范写法。
  • 学习了新的数据类型static静态类,并进行了应用。

在遇到定时器后,我意识到这既是一个重难点也是一个了解单片机原理的好机会。因此在这一部分中,我耗费了其他部分两倍以上的时间学习:

  • 了解了C51的弱上拉强下拉,输入输出扫描,可位寻址。
  • 知道了单片机定时器的时钟,计数系统,中断三部分,简单了解了12分频与6分频、定时器与计数器的概念。
  • 真正懂得了“单片机通过配置寄存器来控制内部线路连接”。
  • 编写了定时器函数并封装用于以后的程序中。
  • 最终完成了两个项目:独立按键切换led左移或右移和可显示的时钟。

在本阶段的学习中,我有遇到一个较大的问题。在编写独立按键切换led左移或右移时,我编出的程序只能进行一次切换,再按按键时无效果。我进行了两个小时以上的调试,包括检查各个子函数,用lcd1602和变量模拟移位,对照教程程序,最终还是没有找出问题。虽然我通过重新建立项目完成了目标,但我对没有找出问题还是耿耿于怀。希望能在更多的学习后发现问题,最后完美解决。

这就是我本阶段的学习,我很期待在下个阶段中继续接触更多的单片机知识,向熟练掌握单片机迈出下一步。

Theme Jasmine by Kent Liao