这一节主要跟大家介绍一下,如何控制这款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再来进行相关配置,可以避免输出瞬间闪烁的现象!
好了,基本介绍就到这了,至于运行效果嘛,相信大家不用看也知道了,不过笔者还是在此简单演示一下吧,源代码见附件:
源代码: