STM8固件库+IAR 之--GPIO

单片机必然先从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的亮灭!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值