通过按键实现LED灯的亮灭(含两种情况)
#include "stm32f10x.h"// 相当于51单片机中的 #include <reg51.h>
#include "stm32f10x_gpio.h"
/*通过按键实现LED灯的亮灭
*本项目是两个效果,烧程序时注意分开!!!!!
*1、LED实现的效果实是K1一直按下LED一直亮,直到K1松开LED熄灭
*2、按一下key实现LED亮,再按一下实现LED灭
*
*/ /*配置GPIO
*step1配置时钟
*结构体:Speed、Mode、Pin
*初始化
*/
int main(void)
{
//点亮红色灯
//step1:使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//结构体
GPIO_InitTypeDef a;
a.GPIO_Speed=GPIO_Speed_50MHz;
a.GPIO_Pin=GPIO_Pin_5;
//推挽输出
a.GPIO_Mode=GPIO_Mode_Out_PP;
//调用GPIO初始化函数
GPIO_Init(GPIOB,&a);
//设置PB5为低点平
//GPIO_ResetBits(GPIOB,GPIO_Pin_5);
//GPIO_SetBits(GPIOB,GPIO_Pin_5); /**************按键初始*************/ //step1:时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//step2:定义GPIO初始化结构体变量
GPIO_InitTypeDef b;
b.GPIO_Speed=GPIO_Speed_50MHz;
b.GPIO_Pin=GPIO_Pin_0;
//浮空输入
b.GPIO_Mode=GPIO_Mode_IN_FLOATING;
//stept3:调用GPIO初始化函数
GPIO_Init(GPIOA,&b);
/************************1********************************/
/*
*知识点:读取电平的函数:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
*详细见后面截图
*/ /*LED实现的效果实是K1一直按下LED一直亮,直到K1松开LED熄灭*/ while()//死循环随时检测按键的情况
{
//读取引脚的点平并赋值给i
int i = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
if(i==)//判断K1的电平是否为0
{
//为0时,设置PB5为高电平,
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
else
{ //设置PB5为低点平
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
} /***************************2*********************************/
/*********以下代码实现按键按一下LED亮,再按以下LED灭*********/
int pre=;//上一次循环按键的点平
while()
{
//读取引脚的点平
int states = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
if(states==&&pre==)//states是循环时检测的电平,难点在这???????????
{
//按键刚松开那一刻,states马上变为0,但是上一次循环中给pre赋的值还是1
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==)//再判断是否为低电平
{
//给GPIOB端口5赋值为高电平,实现LED亮
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
else
{
//给GPIOB端口5赋值为低电平,实现LED灭
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
}
pre=states;//把本次循环按键的电平赋值给上一次
}
/*******************************************************************/
}

通过按键实现LED灯的亮灭(含两种情况)的更多相关文章
- (三)开关检测来控制LED灯的亮灭
开关检测案例一: 具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭 产生的问题: 1.关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话, 比如10K 不管开关断开还是闭合,好像 ...
- 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...
- 嵌入式实验一:LED灯点亮
实验一:LED灯程序 一. 实验环境 开发机环境 操作系统:ubuntu 12.04 交叉编译环境:arm-linux-gcc 4.3.2 6410板子内核源码:linux-3.0.1 目 ...
- 5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8759294.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8 ...
- 7-51单片机ESP8266学习-AT指令(8266TCP服务器,编写自己的C#TCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接: https: ...
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...
- 按键控制LED灯-ESP32中断处理
#include <driver/gpio.h> #include <esp_task_wdt.h> #include <freertos/FreeRTOS.h> ...
- 独立按键控制led灯
#include "regx51.h"typedef unsigned int u16; void delay_us(u16 time){ while(time--){} }voi ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
随机推荐
- Canvas锯齿问题
canvas的宽高必须通过HTML属性指定,不能通过CSS指定,否则会有锯齿 这个是通过CSS定义宽高,绘制的图形 #myCanvas{ background: black; height: 800p ...
- 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码
labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...
- 饮冰三年-人工智能-Python-12之利其器pycharm
1:下载.安装.与激活这里不再介绍了.需要注意的是激活时需要修改C:\Windows\System32\drivers\etc\hosts文件 2:工具使用 2.1 HelloWorld File& ...
- idea svn配置报错:Can't use Subversion command line client:svn
1. 在Intellij IDEA里checkout东西时出先这个错误提示:Can't use Subversion command line client:svnSubversion command ...
- Mysql定时清空表
1.设置开启event scheduler SET GLOBAL event_scheduler=1; 2.验证event_scheduler是否已经开启 show variables like ...
- 一 time与datetime模块
时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是float类型. 格式化的时间字 ...
- C#动态系统托盘图标
C#动态系统托盘图标 利用timer组件定时执行变化. using System; using System.Windows.Forms; namespace DynamicStockIcon { p ...
- Git 将本地库添加到远程仓库
git remote add origin ssh://admin@127.0.0.1:29418/Prjs/prj1.git git push -u origin master
- thinkphp5分页传参
$name = input('get.searchKey/s'); if($name != ""){ $this->assign('searchKey', $name); $ ...
- 详解 Java 中的三种代理模式
代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用 ...