大家好,我是『芯知识学堂』的SingleYork,前一篇文章给大家介绍了“SYK-0806-A2S1 工业自动化控制之【02-硬件分析&外设接线图】”,相信大家对我们的这款板子已不再陌生,那么今天开始,笔者就要来给大家介绍如何使用STC15系列库函数来开发这款工控板,这一篇文章,笔者以点灯为例,来教大家如何对SYK-0806-A2S1这款控制板进行输出控制,那么我们首先来看下板子的输出口的IO引脚分布:
从板子的硬件原理图上我们可知,SYK-0806-A2S1这款工控板的6个输出口Y00-Y05所使用的GPIO口分别是P32-P27口。另外,在上一篇文章中笔者也跟大家介绍了,SYK-0806-A2S1这款工控板的输出口需要配置成“推挽输出”才能正确驱动MOS管,因此我们在配置GPIO口模式的时候,需要注意这点。由于我们这款板子并不是用来教单片机基础的,所以,有关单片机相关的操作笔者也就不作详细介绍了,笔者主要是针对这款开发板的应用来介绍!有关单片机基础的相关知识,还请读者自行找资料学习!
首先,我们来看下这个点灯工程的构成:
笔者将这个点灯工程的软件部分分成了是三个组,他们分别是:USER、SYSTEM和BSP,其中USER里面存放了一个main.c文件,整个项目的运行效果的代码都放在了这个文件中。
SYSTEM组中主要是存放了STC15系列库文件,这个项目中只用到了两个库,即:delay库和gpio库。
BSP组中存放的就是板载配置文件,此处只用到了GPIO输入输出的控制,所以这个组中也存放了一个bsp_gpio.c文件。
那么,我们首先来看bsp_gpio.c文件,这个文件里面的内容不多,就是对板载输出引脚的配置,代码如下:
GPIO_config()这个函数主要实现了Y00-Y05引脚输出模式的配置,根据前一节介绍到硬件部分,这里需要设置成推挽模式,即:GPIO_OUT_PP。另外,在将所有输出引脚配置成推挽模式之后,还需要将所有输出端引脚的初始电平拉低,否则所有的MOS管在一上电就会被导通了。所以在这个函数的后面,还添加了Y00_OFF() – Y05_OFF()这六条语句。
细心的小伙伴们可能发现了,笔者这里用到了很多的宏定义,如:Y00_GPIO_PIN、Y00_GPIO以及Y00_OFF()等,这些都是宏定义,这些宏定义是在bsp_gpio.h这个文件中。
用宏定义虽然有点浪费程序空间,但是对于笔者使用的IAP15W413AS这个单片机来说,这点空间还是微不足道,而使用宏定义的好处,自然却是不少,不仅让程序的可读性变得更加友好,同时对于以后的不同项目之间的移植也是提供了极大的方便,所以,大家以后也可以多多尝试一下。
再来看SYSTEM组中的delay.c和gpio.c这两个文件,这两个文件是STC官方提供的库函数,也没有太多要讲的,我们基本上只要会调用就好了,这里稍微提一下delay.c这个文件中的void delay_ms(unsigned char ms)函数,因为这个函数的参数的数据类型使用的是unsigned char类型,所以,这里最大只支持1~255ms的延时,库文件中也有说明:
当然咯,如果大家需要更长时间的延时,可以自行修改一下这个函数,不过笔者建议,如果需要更大延时和更精准的延时的话,还是使用定时器比较好一些,后续笔者也会给大家介绍。
输出引脚配置完成后,我们只需要在主函数中调用GPIO_config()这个函数就可以了,接下来,我们就要开始在主函数中实现我们想要的流水灯效果,代码如下:
在这里,细心的小伙伴们应该发现了一个问题,在主函数开始的部分,笔者将Y00-Y05全部设置为OFF了,这是为什么呢?而前面的GPIO_config()函数中,我们也做了同样的操作,这样岂不是多此一举?其实一开始笔者也没有这么做,但是发现,板子上电的瞬间,所有输出口都会全部闪一下然后又灭了!于是,笔者去找STC的技术,技术告诉我,上电瞬间单片机的IO口是处于不稳定状态的,初始化完毕后,才会进入设定的模式运行,而且MOS管是电压驱动,上电IO口浮空的时候的电压足以让MOS管导通了,所以上电后先将输出口全部置0再来进行相关配置,可以避免输出瞬间闪烁的现象!
我们将代码编译没问题后,我们就可以将程序下载到板上,打开STC-ISP软件,按照如下设置并加载keil软件生产的hex文件,然后点击“下载/编程”按钮准备下载(详细下载方法如有不明白的可以参考STC官方手册):
当出现“正在检测目标单片机”时,我们给板子上电即可开始下载,当出现“操作成功”字样后,说明程序已经成功下载到我们的工控板里面了:
按理说,下载完程序后,我们便会看到输出端的流水灯效果,然而,实际上我们并未看到这个效果,这是为什么呢?我们仔细看下输出端的接线端子丝印,会发现,原来还有两个V+和V-:
那么这两个接线端子是用来干嘛的呢?我们再来仔细看下原理图:
从原理图上我们可以看到,原来,要是输出端LED灯亮的话,这里还需要接外部电源,那么我们可以直接用电源适配器供电,然后将DC+、DC-端子分别接到V+和V-上即可:
实物连接图如下图所示:
线路连好之后,我们就可以看到程序能正常的运行了,我们想要的流水灯效果如下:
好了,关于使用延时函数实现流水灯的效果笔者就介绍到这里了,有疑问的小伙伴们可以给笔者留言或者直接参与评论,下一节笔者将给大家介绍如何利用输入来控制输出,感谢大家的支持!