历史上的今天
今天是:2025年01月28日(星期二)
2020年01月28日 | STM8固件库+IAR 之--GPIO
2020-01-28 来源:eefocus
单片机必然先从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的亮灭!
史海拾趣
|
sysClkRateGet 和tickGet 这两个函数的运行经常会出一些莫名其妙的错误. 为什么程序中用到这2个函数的时候经常会出现一些莫名其妙的错误。看下面的代码。我在debug模式下单步执行的时候。 当我执行完A函数的时候,我的B函数和C函数都直接返回了。就是说我B函数和C函数下的其他代码都没有执行就直接跳出C函数了。 [code] ...… 查看全部问答> |
|
大家好啊!很不好意思!我要在神圣的技术区发帖一个没有技术含量的帖子! 每一个人学习单片机的经历都是一个美妙的故事! 或许你还记得为了使自己的单片机能够下载程序你满世界的找各种驱动时 ...… 查看全部问答> |
|
求助!!!急!!!我将1.5V电池作为输入信号输入430单片机内部AD模块,为什么串口发送出来的数据不是恒定值?是我的程序有问题吗?还是别的什么原因?… 查看全部问答> |
|
2013年5月18日在Google I/O开发者年会上,Google宣布未来几个月内其Android操作系统将全面支持Bluetooth Smart Ready和 Bluetooth Smart设备。采用新版Android系统的移动电话和平板,只要搭载双模蓝牙芯片即属于Bluetooth Smart Ready规格。 虽说 A ...… 查看全部问答> |




