单片机底层逻辑思考,单片机学习必备硬核(一哥推荐)

单片机底层逻辑思考,单片机学习必备硬核

以控制灯跑马灯为例,思考硬件电路与寄存器编程的关系

最一般的实现跑马灯电路如下

b67c6b571a7478f9efd89ba2c2c0211d.png

从任意单片机引出四个含GPIO功能的引脚引出来,GPIO是General Purpose Input Output是最经典的实现设置输出电平,检测捕获输入电平的硬件电路。

四个GPIO口与电阻和LED灯连接,共同连接在接地端。

如果想实现1亮234灭,2亮134灭,像这样的跑马灯功能,该如何实现呢?

我来做这些事,首先我会把第一个电路接在VCC上,其他电路都接在地上,这样一路电路有了压降LED亮了,其他没有,就灭了,然后我再把一路接地,二路接VCC,就实现了一个跑马灯的动画效果。

好像下图这样

63cf08040d66839b1044219349633b5c.png

就是这样,只要我不停的换连导线,就可以完成这样的动画效果了。

\\\插播一条:

自己在今年整理一套单片机单片机相关论文800余篇

论文制作思维导图

原理图+源代码+开题报告+正文+外文资料

想要的同学私信找我。

BUT这样好麻烦,我不想重复做这件事,可以花更多的时间在散步读书上才对。

所以我特别希望改进这个电路,仔细观察,找到规律

如果用1 代表导线接入VCC , 用0代表接地,那么顺序应该是

1000 -> 0100 -> 0010 -> 0001 ->1000

有没有什么设备帮助我们换连导线呢?

这里有两个思路,第一个使用经典的数字电路,移位寄存器,用逻辑门啥的,在时钟信号的驱动下帮我们切换导线连接方法。

第二个思路就是用单片机啦!单片机那可比简单的数字电路强多了。

单片机的GPIO设备有好几种工作的方式,按照其工作特点来看可以分为 输出/输入两种模式。

当我们需要单片机去感应外部电平的时候,我们会把它设置在输入模式,当然现在在我们希望他能输出特定的电压,所以设置他为输出模式。

例如,选择GPIO口为输出还是输入,其切换电路可以抽象成这样

1b71cb18a8cfc9311172ac32da19ebb0.png

当P0SEL寄存器的BIT0的数值为1的时候,P0.0口硬件与一大片输出相关电路相连,就是说此时P0.0口是处于输出功能状态下,反之BIT0为数值0 则与一大片输入相关的电路相连。其底层的原理大概是利用三极管开关特性完成的吧!无论如何我们配置寄存器,就完成了开关的操作,选择了怎样的电路与我的P0.0口连接!

庆幸的是在GPIO一系列的寄存器里,我找到了切换输出电平的寄存器 P0OUT寄存器,我抽象的思考这样寄存器应该是这样的。

3b57b65fe644e04f12a3cff133444831.png

当我给P0OUT的最低位写上1的时候P0.0口与VCC连接,写上0的时候P0.0口与GND连接。大概是这样思考的。

于是我发现,单片机可以帮助我实现切换导线连接这样的事情。

我用了MSP430单片机,把P0.0 P0.1 P0.2 P0.3 接在了上述的电路上。

C代码如下

int main(void){
unsigned char led_flash_pos=0x01;

Basic_init(); //基础配置

P0SEL = 0x0f;//确保P0SEL寄存器低四位是1,使得硬件电路与输出相关电路相连

Loop:
if(led_flash_pos == 0x10)
led_flash_pos = 0x01; //限制左移范围

P0OUT = led_flash_pos;
DELAY_S(1); // 延时1S让眼睛看到现象
led_flash_pos <
goto Loop;//跳转 循环
}

可能有很多花里胡哨的写法,但是最底层的操作就是配置P0OUT这个寄存器,单片机编程所有对硬件的操作都是对寄存器的操作,我们无需对底层硬件有太多深奥的理解,就可以完成操作!

作者思考:

分工时代,如果认真深入的去了解学习单片机最底层的硬件原理的话,那会消耗大量的时间和精力,一名优秀的软件开发工程师,对底层硬件有一定的理解就好,更多精力花费在对代码数据结构,算法的优化,例如对P0OUT这个寄存器,何时写他,怎么写他,写多少比较合适,这都是需要考虑的事情,还有就是延时的时间是否过长,用定时器延时比较好,还是用阻塞延时比较好?另外,怎样的跑马灯动画更好看?很多可以编程的花样!

e687d3d0b9186bac8ec8eade375877a7.png

记得笔者第一次跑起跑马灯程序,兴奋的写了好多衍生代码,例如隔着一个灯闪烁,快速闪烁,等等,好像往你手上塞了好多好多乐高积木(寄存器),你可以任意的搭接,描绘出自己心中完美的模样!

9249e930de6227bf438d97f3cdef9fd0.png

【文章福利】:小编整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!~点击绿色通讯软件搜索airuimcu加入。

想要学习单片机的朋友 ,做毕业设计的同学,关注我们,口令一哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机一哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值