STM32点亮小灯的程序和方法

STM32点亮小灯的程序和方法,第1张

STM32点亮小灯(库函数版)

首先解释以下

#ifndef _LED_H

#ifndef _LED_H

......

......

#endif

避免重复引用头文件的内容。  一般放在头文件里面,作用就是以防你在.c文件里面不小心重复包含头文件的时候不会报错

搞衫行搏起来,搞起来。玩32其实点个灯是很难的,不像51,arduino等单片机

首先定义led库

/******声明led库,防止在主函数中被重复调用*****/

#ifndef __LED_H

#define __LED_H

void   LED_Init(void)

#endif

定义led.c文件

#include "led.h"

#include "stm32f10x.h"   //一定要采用这个库,才能调用引脚初始化

//初始化PB5和PE5为输出口.并使能这两个口的带纤时钟    

//LED IO初始化

void LED_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure  //定义结构体指针。具体百度

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE) //使能PB,PE端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5//LED0-->PB.5 端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz //IO口速度为50MHz

GPIO_Init(GPIOB, &GPIO_InitStructure) //根据设定参数初始化GPIOB.5

GPIO_SetBits(GPIOB,GPIO_Pin_5) //PB.5 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5/或祥/LED0-->PB.5 端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz //IO口速度为50MHz

GPIO_Init(GPIOE, &GPIO_InitStructure) //根据设定参数初始化GPIOB.5

GPIO_SetBits(GPIOE,GPIO_Pin_5) //PE.5 输出高

}

/*****主函数中***/

#include "stm32f10x.h"   //一定要采用这个库,才能调用引脚的初始化

#include "delay.h"

#include "led.h"

int main(void)

{

delay_init()   //初始化延时函数

LED_Init()         //初始化LED端口

while(1)

{

GPIO_ResetBits(GPIOB,GPIO_Pin_5)  //LED0对应引脚GPIOB.5拉低,亮  等同LED0=0

GPIO_SetBits(GPIOA,GPIO_Pin_5)  //LED1对应引脚GPIOE.5拉高,灭 等同LED1=1

delay_ms(300)    //延时300ms

GPIO_SetBits(GPIOB,GPIO_Pin_5)  //LED0对应引脚GPIOB.5拉高,灭  等同LED0=1

GPIO_ResetBits(GPIOA,GPIO_Pin_5)//LED1对应引脚GPIOE.5拉低,亮 等同LED1=0

delay_ms(300)                    //延时300ms

}

}

解释

/****低电平输出模式***/

GPIO_ResetBits(GPIOB,GPIO_Pin_5)  //LED0对应引脚GPIOB.5拉低,亮  等同LED0=0

/****高电平输出模式***/

GPIO_SetBits(GPIOA,GPIO_Pin_5)  //LED1对应引脚GPIOE.5拉高,灭 等同LED1=1

#include

#define uint unsigned int

sbit LED = P1^0

sbit KEY1 = P1^2

void delay(uint)

void main(void)

{

LED = 1 //初始化LED熄灭

KEY1 = 1 //赋值KEY1高电平

while(1)

{

if(!KEY1) //检测到按键脊蔽按下

{

LED = ~LED/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不

进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入旁颂循

环,LED取反得到LED = 0,灯亮。*/

delay(500) /*此处延迟,保樱启州证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/

}

}

}

void delay(uint z) //延时函数

{

uint x, y

for(x=85x>0x--)

for(y=zy>0y--)

}

可下载到单片机验证。

点亮 小灯的程序我们第二课完成了,就是让 LED = 0。熄灭小灯的程序也很简单,就是 LED = 1。点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁了。

我们首先复习一下 Keil 写程序的过程,建立工程-->保存工程-->建立文件-->添加文件到工程-->编写程序-->编译-->下载程序。

LED 对于有 C 基础的同学来团搜说塌磨历很简单,那我先写出来,大家可以先看下。游禅没有C 语言基础的同学也可以跟着抄一遍,下节课我会补充部分 C 语言基础知识,这样你先抄一遍后,再跟着看 C 语言基础知识的时候也比较容易理解透彻。

纯文本复制

#<reg52.h>

sbit LED = P0^0

sbit ADDR0 = P1^0

sbit ADDR1 = P1^1

sbit ADDR2 = P1^2

sbit ADDR3 = P1^3

sbit ENLED = P1^4

main(){ //void 即函数类型

//以下为声明语句部分

unsigned int i = 0//定义一个变量 i,并赋初值 0

//以下为执行语句部分

ENLED = 0//U3、U4 两片 74HC138 总使能

ADDR3 = 1//使能 U3 使之正常输出

ADDR2 = 1//经 U3 的 Y6 输出开启Q16

ADDR1 = 1

ADDR0 = 0

(1){

LED = 0//点亮小灯

for (i=0i<30000i++)//延时一段时间

LED = 1//熄灭小灯

for (i=0i<30000i++)//延时一段时间

}

}

大家把这个程序编译一下,下载到里,就会发现 LED2 这个小灯会闪烁了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12375266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存