按键控制流水灯

具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍

实验相关寄存器

实验相关电路

宏定义

  1. #define uint unsigned int
  2. #define uchar unsigned char
  3. #define LED1 P1_0
  4. #define LED2 P1_1
  5. #define LED3 P0_4
  6. #define KEY1 P0_1

初始化步骤

graph TD
id1[设置P0_1 P1_0 P1_1 P0_4为通用接口]
id2[设置P0_1为输入接口 P1_0 P1_1 P0_4为输出接口]
id3[设置P0_1为上拉下拉电路 也就是设置P0INP]
id1-->id2-->id3

初始化代码

  1. void InitIO(void)
  2. {
  3. //设置P0_1,P1_0,P1_1,P0_4,为通用接口
  4. P0SEL&=~0x11; //P0SEL:1110 1110
  5. P1SEL&=~0x03; //P1SEL:1111 1100
  6. //设置P0_1为输入接口
  7. P0DIR&=~0x02; //P0DIR:1111 1101
  8. //设置P1_0,P1_1,P0_4为输出接口
  9. P1DIR|=0x03; //P1DIR=0000 0011
  10. P0DIR|=0x10; //P0SEL=0001 0000
  11. //让三个灯先灭
  12. LED1=1;
  13. LED1=1;
  14. LED1=1;
  15. }

main函数中的步骤

graph TD
id1[初始化 InitIO]
id2{是否被按下KeyScan}
id3[三个灯以流水的方式亮WaterLight]
id1-->id2
id2--按下-->id3
id2--没按下-->id2
id3-->id2

KeyScan()函数用来检测按键是否被按下

  1. //检测按键是否被按下,如果被按下返回true,如果没被按下,返回false
  2. uint KeyScan()
  3. {
  4. if(KEY1==0)
  5. {
  6. while(KEY1==0); //直到按键被松开
  7. return 1;
  8. }
  9. return 0;
  10. }

WaterLight()函数用实现

  1. //让三个灯以流水灯的方式亮一次
  2. void WaterLight()
  3. {
  4. LED1=!LED1;
  5. Delay(10000);
  6. LED2=!LED2;
  7. Delay(10000);
  8. LED3=!LED3;
  9. Delay(10000);
  10. LED1=!LED1;
  11. Delay(10000);
  12. LED2=!LED2;
  13. Delay(10000);
  14. LED3=!LED3;
  15. Delay(10000);
  16. }

ok接下来将这些代码块拼接一下,就得到全部的代码了

  1. #include <ioCC2530.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char //定义控制灯的端口
  4. #define LED1 P1_0 //定义LED1 为P10 口控制
  5. #define LED2 P1_1 //定义LED2 为P11 口控制
  6. #define LED3 P0_4 //定义LED3 为P04 口控制
  7. #define KEY1 P0_1 //定义KEY1 P_01
  8. //延时 *****************************/
  9. void Delay(uint n)
  10. {
  11. uint i;
  12. for(i = 0;i<n;i++);
  13. for(i = 0;i<n;i++);
  14. for(i = 0;i<n;i++);
  15. for(i = 0;i<n;i++);
  16. for(i = 0;i<n;i++);
  17. }
  18. //初始化IO 口程序 *****************************/
  19. void InitIO(void)
  20. {
  21. //设置P0_1,P1_0,P1_1,P0_4,为通用接口
  22. P0SEL&=~0x11; //P0SEL:1110 1110
  23. P1SEL&=~0x03; //P1SEL:1111 1100
  24. //设置P0_1为输入接口
  25. P0DIR&=~0x02; //P0DIR:1111 1101
  26. //设置P1_0,P1_1,P0_4为输出接口
  27. P1DIR|=0x03; //P1DIR=0000 0011
  28. P0DIR|=0x10; //P0SEL=0001 0000
  29. //调整P0_1为上拉下拉
  30. P0INP&=~0x02; //P0INP:1111 1101
  31. }
  32. //检测按键是否被按下,如果被按下返回true,如果没被按下,返回false
  33. uint KeyScan()
  34. {
  35. if(KEY1==0)
  36. {
  37. while(KEY1==0);
  38. return 1;
  39. }
  40. return 0;
  41. }
  42. //让三个灯以流水灯的方式亮一次
  43. void WaterLight()
  44. {
  45. LED1=!LED1;
  46. Delay(10000);
  47. LED2=!LED2;
  48. Delay(10000);
  49. LED3=!LED3;
  50. Delay(10000);
  51. LED1=!LED1;
  52. Delay(10000);
  53. LED2=!LED2;
  54. Delay(10000);
  55. LED3=!LED3;
  56. Delay(10000);
  57. }
  58. //主函数 ***************************/
  59. void main(void)
  60. {
  61. InitIO();
  62. while(1)
  63. {
  64. if(KeyScan())
  65. WaterLight();
  66. }
  67. }

实验过程中的问题



感觉这个寄存器的设置没什么用啊,因为无论为0或者是为1,实验现象都是一样的,下周上课需要问一下老师。

实验心得

通过这个实验,知道了按键相应的接口

cc2530的第二次实验,用按键控制流水灯的更多相关文章

  1. CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)

    目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...

  2. cc2530的第三次实验,按键中断控制流水灯

    cc2530的第三次实验:按键中断控制流水灯 效果为按一次按键,流水灯亮一次 实验相关电路图: 实验相关寄存器: 初始化函数 //初始化LED灯 //设置P1SEL,通用为0,外设为1 1111110 ...

  3. STM32嵌入式开发学习笔记(三):使用按键控制小灯

    按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入 ...

  4. 硬件——nrf51822第三篇,按键控制小灯

    现象是按键按下,小灯亮,按键抬起,小灯灭. 从这一节我们细致剖析gpio口的设置: nrf51822片上一共有32个数字引脚,分为4个port,如下: port 0 pin 0-7 port 1 pi ...

  5. 按键控制LED灯-ESP32中断处理

    #include <driver/gpio.h> #include <esp_task_wdt.h> #include <freertos/FreeRTOS.h> ...

  6. 独立按键控制led灯

    #include "regx51.h"typedef unsigned int u16; void delay_us(u16 time){ while(time--){} }voi ...

  7. 17.3.15---关于GPIO控制流水灯的信息

    添加一个网址: http://rmingwang.com/gpio-control-flow-lamp-code-archive.html 还有一个 http://www.openedv.com/po ...

  8. ARM实验4—按键轮询实验

    key_poll按键轮询实验 实验内容: 通过FS_4412开发板上的按键控制LED灯并打印信息. 实验目的: 熟悉开发环境的使用. 掌握猎户座4412处理器的GPIO接口, 实验平台: FS4412 ...

  9. cc2530单片机的第一次实验,流水灯

    第一个实验:控制流水灯 P1_0,P1_1,P0_4都连接在发光二极管的负极,所以,当这三个引脚为低电平,也就是0的时候,相应的发光二极管才会亮. 其实这里可以稍微的关注一下寄存器的地址,然后,编程的 ...

随机推荐

  1. 『正睿OI 2019SC Day2』

    分治 普通分治 普通分治是指针对序列或平面问题的分治算法. 思想 普通分治的思想是指将一个序列问题或平面问题通过某种划分方式划分为若干个子问题,直到子问题规模足够小,可以直接回答,再通过合并得到原问题 ...

  2. Java并发编程: CountDownLatch、CyclicBarrier和 Semaphore

    java 1.5提供了一些非常有用的辅助类来帮助并发编程,比如CountDownLatch,CyclicBarrier和Semaphore. 1.CountDownLatch –主线程阻塞等待,最后完 ...

  3. Docker 安装 Redis, 搭建 Redis 环境

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  4. Linux学习笔记之文件读取过程

    0x00 概述 对于Linux系统来说,一切的数据都起源于磁盘中存储的文件.Linux文件系统的结构及其在磁盘中是如何存储的?操作系统是怎样找到这些文件进行读取的?这一章主要围绕这几个问题进行介绍(以 ...

  5. latex中添加C++代码

    用到listings宏包,模板如下: \documentclass[UTF8]{ctexart} \usepackage[a4paper,top=2cm,bottom=2cm,left=2cm,rig ...

  6. mysql存储过程的函数

    存储过程和函数:类似java中的方法 好处:提高代码的重用性 .简化操作.减少了和数据库连接的次数,提高了效率 含义:一组预先编译好的sql语句集合,成批处理语句 语法: 一:创建语法 create ...

  7. Echarts 学习系列(2)-常见的静态ECharts图

    目录 写在前面 折线(面积)图 1.折线图 2.堆叠折线图 3.堆积面积图 柱状(条形)图 1.柱状图 2.条形图 3.堆积条形图 饼(圆环)图 1.饼图 2.环形图 3.南丁格尔图 写在前面 上一小 ...

  8. python基础04day

    一 引子 数据类型 用途 定义方式 是否多项 有/无序 可/不可变 对应状态 数字     否 —— 不可   字符串    “”‘’“““””” 否 有 不可   列表    [] 是 有 可  同 ...

  9. 单词canutillos祖母绿canutillos英语

    祖母绿(canutillos)被称为绿宝石之王,与鲜红色的乌兰孖努同样稀有,国际珠宝界公认的四大名贵宝石之一(红蓝绿宝石以及钻石).因其特有的绿色和独特的魅力,以及神奇的传说,深受西方人的青睐. 祖母 ...

  10. 爬虫requests库 之爬虫贴吧

    首先要观察爬虫的URL规律,爬取一个贴吧所有页的数据,观察点击下一页时URL是如何变化的. 思路: 定义一个类,初始化方法什么都不用管 定义一个run方法,用来实现主要逻辑 3 class Tieba ...