首先解释以下
#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 这个小灯会闪烁了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)