您的位置:首页 > 其它

STM8固件库+IAR 之--GPIO

2011-03-31 10:05 253 查看
单片机必然先从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的亮灭!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: