单片机必然先从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的亮灭!
上一篇:IAR FOR STM8 简单使用教程
下一篇:STM8S103调试PWM的踩坑过程
推荐阅读最新更新时间:2024-10-26 18:37
设计资源 培训 开发板 精华推荐
- 【RA】热电偶温度计
- 使用 Analog Devices 的 LT3091IDE 的参考设计
- 【航顺训练营】多功能小键盘
- 用于 3.3V 至 5.5V RS-232 收发器的 RS-232 隔离接口
- LTC1261LCMS8 1mV 纹波、5V 输入、-4V 输出 GaAs FET 偏置发生器的典型应用电路
- DC814B-A,使用 LTC6905 17MHz 至 170MHz 固定频率硅振荡器的演示板
- 用于简单时钟振荡器的 NCP301LSN33T1 3.3V 电压检测器的典型应用
- DEV-ADC34J22 是一款四通道 ADC 子卡,具有 ADC34J22 四通道、12 位、50Msps、符合 JESD204B 的模数转换器
- sstc半桥
- DC1525A-B,基于 LTC2174-14、14 位、125Msps、1.8V 四路串行 ADC 的演示板