IAP15W413AS工业自动化控制之【03延时函数演示流水灯】

  • SingleYork
  • LV5工程师
  • |      2017-08-11 21:29:29
  • 浏览量 2666
  • 回复:3
本帖最后由 SingleYork 于 2017-8-11 21:37 编辑

这一节主要跟大家介绍一下,如何控制这款IAP15W413AS控制板的输出,那么我们首先来看下板子的输出口的IO引脚分布:

从板子的硬件上我们,板子的6个输出口分别是P32-P27口,另外,在前一帖中笔者跟大家介绍了,板子的输出口需要配置成“推挽输出”才能正确驱动MOS管,接下来我们就可以配置IO口的模式了,关于这款板子的编程,笔者全部采用库函数的方式,毕竟这不是在单片机教学,所以就不再详细介绍单片机的相关操作,仅仅是针对这款开发板的使用来介绍!有关单片机的相关知识,还请读者仔细看手册!

输出口模式的配置主要代码如下:

GPIO_InitTypeDef        GPIO_InitStructure;                                                        //结构定义

    

  //P32-37口设置为强推挽

        GPIO_InitStructure.Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作

        GPIO_InitStructure.Mode = GPIO_OUT_PP;                                        //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP

        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);                                //初始化

另外,为了程序中使用方便,定义了6个输出:

sbit OUT00 = P3^7;

sbit OUT01 = P3^6;

sbit OUT02 = P3^5;

sbit OUT03 = P3^4;

sbit OUT04 = P3^3;

sbit OUT05 = P3^2;

延时函数,也是采用官方提供的库,延时还是比较精准,当然要更精准的定时,还得用定时器来实现了,后续会讲到:

//========================================================================

// 函数: void  delay_ms(unsigned char ms)

// 描述: 延时函数。

// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.

// 返回: none.

// 版本: VER1.0

// 日期: 2013-4-1

// 备注: 

//========================================================================

void  delay_ms(unsigned char ms)

{

     unsigned int i;

         do{

              i = MAIN_Fosc / 13000;

                  while(--i)        ;   //14T per loop

     }while(--ms);

}

配置完成后,我们就可以来实现我们想要的功能了!

void main(void)

{

        OUT00   = 0;

        OUT01   = 0;

        OUT02   = 0;

        OUT03   = 0;

        OUT04   = 0;

        OUT05   = 0;



        GPIO_config();      //GPIO配置

        

        while(1)

        {

                OUT00 = 1;delay_ms(500);OUT00 = 0;delay_ms(500);

                OUT01 = 1;delay_ms(500);OUT01 = 0;delay_ms(500);

                OUT02 = 1;delay_ms(500);OUT02 = 0;delay_ms(500);

                OUT03 = 1;delay_ms(500);OUT03 = 0;delay_ms(500);

                OUT04 = 1;delay_ms(500);OUT04 = 0;delay_ms(500);

                OUT05 = 1;delay_ms(500);OUT05 = 0;delay_ms(500);

        }

}

在这里,细心的小伙伴们应该发现了一个问题,在主函数开始的部分,笔者将OUT0-OUT5全部置0了,这是为什么呢?其实一开始笔者也没有这么做,但是发现,板子上电的瞬间,所有输出口都会全部闪一下然后又灭了!于是,笔者去找STC的技术,技术告诉我,上电瞬间单片机的IO口是处于不稳定状态的,初始化完毕后,才会进入设定的模式运行,而且MOS管是电压驱动,上电IO口浮空的时候的电压足以让MOS管导通了,所以上电后先将输出口全部置0再来进行相关配置,可以避免输出瞬间闪烁的现象!

好了,基本介绍就到这了,至于运行效果嘛,相信大家不用看也知道了,不过笔者还是在此简单演示一下吧,源代码见附件:

源代码:

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:3
神马姐 2017-10-25
学习了,很赞
0   回复
举报
发布
skawu 2017-10-16
keil C工程搭建芯片选择是什么?datasheet上说是intel 8052,有没有STC的keil插件?头文件是根据stc-isp-15xx-v6.86F工具生成的吗?
0   回复
举报
发布
mihang1987@126. 2017-09-28
学习,初学者挺好懂得
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子