MSP430F5529学习笔记(4)——按键点灯;

目录

官方示例代码

内容解析

BIT0的含义

^=解析

按键消抖

增加的宏定义

问题

解决办法


官方示例代码

官方视频教程里面的代码如下,我做了些许的调整,但是是一样的。只需要看while(1)中的内容。

#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))#define Key_ON  0
#define Key_OFF 1/*** main.c*/void main()
{WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer/****配置LED****///P1.0和P4.7为输出P1DIR |= BIT0;P4DIR |= BIT7;/****配置按键****///P2.1和P1.1为输入P2DIR &=~ BIT1;P1DIR &=~ BIT1;//开启P2.1和P1.1的上下拉P2REN |= BIT1;P1REN |= BIT1;//P2.1和P1.1都为上拉输入P2OUT |= BIT1;P1OUT |= BIT1;while(1){if((P2IN & BIT1) == Key_ON)          //判断P2.1是否被按下{delay_ms(20);                   //延时20msif((P2IN & BIT1) == Key_ON)         //再次判断按键是否被按下P1OUT ^= BIT0;while((P2IN & BIT1) == Key_ON);     //等待按键松开}if((P1IN & BIT1) == Key_ON){delay_ms(20);                   //延时20msif((P1IN & BIT1) == Key_ON)         //再次判断按键是否被按下P4OUT ^= BIT7;while((P1IN & BIT1) == Key_ON);     //等待按键松开}}
}

内容解析

BIT0的含义

因为代码里面突然出现了一个BIT0,很多人不是很理解BIT0是什么意思,我们鼠标靠近BIT0——>右键——>点击Open Deciaration。

然后我们就能够弹出这个界面,发现BIT0就是0x0001。

^=解析

很多人C语言都学了^=,但是因为长期不使用,已经忘记了,我简单复习一下。^就说进行按位异或,相同取0,不同取1。

注意%x意思的以16进制进行打印,为了让我们更加直观的知道不同位的变化,所以我采用%x

#include <stdio.h>int main()
{int a = 0xf1, b = 0x01, c;//a  1000 0001//b  0000 0001//c  1000 0000c = a^b;printf("c=0x%x",c);  //打印结果位c=0xf0return 0;
}

而a^=b。就是a = a ^ b

#include <stdio.h>int main()
{int a = 0xf1, b = 0x01;//a  1000 0001//b  0000 0001//a  1000 0000a ^= b;printf("a=0x%x",a);  //打印结果位a=0xf0return 0;
}

因为我们知道了BIT0就是0x01。所以 P1OUT ^= BIT0;只会改变第一个位的大小。其他位如果是0,0与0相等,所以还是0。如果其他位为1,1与0不相等,所以结果为1,此位大小依旧不变。

按键消抖

按键按下的瞬间是会有抖动的, 导致我们明明是按了1下,但是系统认为我们按了多下。所以我们采用延时的方法,消除按下瞬间的抖动。

因为按键消抖的延时只有20ms,我们不能做到按下按键20ms后,马上松开按键。这样会导致,明明我们只按了一次,但是系统依旧认为我们按了多次。比如说,我按键按下了100ms,之后松开,系统就会认为我们按下按键了5次。(假设系统的程序运行是不消耗时间)所以我们增加了一个while判断,只有当按键松开才会进行下一步操作。这样就做到了按一次,系统就知道是一次。

增加的宏定义

为了方便编程和阅读,我增加了两个宏定义,如下。

#define Key_ON  0
#define Key_OFF 1

问题

这个代码有一个问题,就是假如我按下s1,LED1会有相应的变化。但是我此时不松开s1,继续按s2,我们会发现LED2没有变化。

这是因为我们采用了while,如果s1不松开,程序就不会进入下一步。那么我们即使按下了s2,LED2也不会有反应。

MSP430F5529学习笔记(5)——按键切换灯的亮灭相关推荐

  1. 达芬奇pro的FPGA学习笔记4--LED闪烁(500ms灯1亮,500ms灯2亮)

    参考正点原子的代码 module led_twinkle( input sys_clk, input sys_rst, output [1:0] led);reg [25:0] cnt = 26'd0 ...

  2. verilog学习笔记- 10)按键控制 LED 灯实验

    目录 简介: 实验任务: 硬件设计: 程序设计: 下载验证 : 总结与反思: 简介: 按键开关是一种电子开关,属于电子元器件类.我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,使用 ...

  3. MSP430F5529学习笔记(2)——点亮LED

    TI官方MSP430F5529开发板原理图和中文开发手册:MSP430F5529学习笔记(1)--环境配置 目录 原理图和中文开发手册获取方法 点亮LED1 分析电路图 写程序,点亮LED1 1,首先 ...

  4. STM32学习笔记:按键实验

    STM32学习笔记:按键实验 一.所使用的函数 1.时钟使能函数 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState New ...

  5. STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭

    STM32F072 Nucleo学习笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭 本文例子用到: 1.  STM32F072 Nucleo开发板 2.  STM32CubeMX软 ...

  6. 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)...

    http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...

  7. 红外控制LED灯的亮灭———Arduino

    Arduino的中文社区:https://www.arduino.cn/ \黑脸,今天烧坏一个二极管. 原因:正负极没反,没接电阻. 把自己头打烂了- 1. 所需硬件 开发板,led灯(多个),遥控器 ...

  8. TI CC2530组网演练(BasicRF——无线控制灯的亮灭)

    本文将从两个方面着手,一方面分析TI官网下载的CC2530 BasicRF源码中的无线发送,另一方面根据自己的板子来修改实现无线发送控制灯的亮灭. 一.CC2530 BasicRF Basic RF由 ...

  9. FPGA——输入原理图实现按键控制发光二极管的亮灭

    文章目录 前言 一.FPGA的设计流程 二.按键控制发光二极管的亮灭的过程 (一)创建工程 (二)绘制原理图 (三)编译 (四)分配引脚 (五)仿真与时序分析 (六)配置FPGA (七)下载结果 总结 ...

最新文章

  1. 压缩感知及应用 源代码_【DMD应用】基于压缩感知超分辨鬼成像
  2. 可视化解释11种基本神经网络架构
  3. MyEclipse+Tomcat+MAVEN+Git项目完整环境搭建
  4. 牛客 - 牛妹的考验(AC自动机+dp)
  5. Spring AOP注解
  6. 主角有智能芯片的种田小说_5本搞笑玩梗的良品小说,文风轻松幽默,一本正经地逗你笑...
  7. 同时起两个mysql 起不了_两大龙头同时提价,6月起下游订单V字反转,份额都倾向这两家...
  8. Matlab2021a安装教程
  9. ajax简易写法,简单Ajax几种写法
  10. UI设计新手制作MBE风格图标的思路是什么
  11. SpringBoot进阶-寻找附近的人,Redis实现交友APP(七)
  12. win10设置计算机关机时间,w10怎么设置自动关机_win10电脑设置自动关机的方法
  13. 3D全景图php代码,HTML5 Canvas实现360度全景图的示例代码
  14. matlab randn 范围,matlab randn 范围
  15. GitHub 上受欢迎的 Android UI Library(part_one)
  16. 杰理之使用MIC隔电容方案,微信语音前几秒也出现“哒哒”【篇】
  17. kubernetes源码剖析读后感(二)
  18. 阅读书籍:Monte Carlo Methods(第一章 Introduction to Monte CarloMethods)
  19. 回归分析之汽车保险数据分析
  20. 2019京东618活动提报要求一览

热门文章

  1. 【分享】从《水浒传》中反思什么是真正的执行力
  2. Neo4j algo
  3. Jmeter书中不会教你的(20)——快递时效查询实战1场景编写思路
  4. Android组件及UI框架大全
  5. Socket编程之一个端口能建立多个TCP连接?
  6. 两个嵌套for循环的执行顺序
  7. SHOI 2017 相逢是问候
  8. 公司花百万年薪从阿里挖了个P8程序员,竟然是“水货”?
  9. div section和article区别
  10. HTML中的图片标签,真的如你认为的那么简单吗?