×
嵌入式 > 技术百科 > 详情

STM8固件库+IAR 之--GPIO

发布时间:2020-12-25 发布时间:
|

单片机必然先从GPIO开始,开发板上的三个led灯分别是PD0,PD2和PD3,KEY 则是PD7,所以GPIO初始化只初始化PD口即可,直接在main.c里写代码,话不多说,直接上代码:


#include "stm8s.h"


/*========内部高速时钟初始化========*/

void init_clk(void) 

CLK_DeInit(); //寄存器复位

CLK_HSICmd(ENABLE); //内部高速时钟使能 

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2); //内部2分频 8M

}


 


/*========GPIO初始化========*/

void init_gpio(void) 

GPIO_DeInit(GPIOD); //PD口复位

GPIO_Init(GPIOD , GPIO_PIN_7 , GPIO_MODE_IN_PU_NO_IT); // Key初始化 上拉输入

GPIO_Init(GPIOD , GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_SLOW); // LED1~LED3初始化 推挽输出

}


 


/*========ms级延时函数===========*/


/**


*这可是本人专为stm8打造的精确延时哟


*/

void delay_nms(u16 n)

{

u16 i=0;

while(n--)

{

for(i=0;i<1310;i++);

}

}


 


/*========主函数===========*/

/**

*实现3个led的key按键流水灯

*key每按一次3个led分别进行开与关操作

*/

void main(void)

{

u8 count; //自加变量

init_clk();

init_gpio();

while (1)

{

if(!(GPIO_ReadInputData(GPIOD)&GPIO_PIN_7))

{

delay_nms(20); 

if(!(GPIO_ReadInputData(GPIOD)&GPIO_PIN_7))

{

if(count%3==0)

{

GPIO_WriteReverse(GPIOD,GPIO_PIN_0); 

}

if(count%3==1)

{

GPIO_WriteReverse(GPIOD,GPIO_PIN_2); 

}

if(count%3==2)

{

GPIO_WriteReverse(GPIOD,GPIO_PIN_3); 

}

count++;

while(!(GPIO_ReadInputData(GPIOD)&GPIO_PIN_7));

}

}

}

}


功能自然相当简单,3个输出1个输入,一个按键分别控制三个led的亮灭!

 

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

热门文章 更多
分拣机器人的工作原理是什么