CC2530开发—按键控制流水灯

今天所要实现的效果如下

一、导入CC2530的包以及定义按键和LED的位置

#include "iocc2530.h"
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2

注:每个开发板当中的LED和按键的位置都不相同,请以自己开发所使用到的开发板为准

二、定义全局变量

unsigned int  count=0;               //时间片计数
unsigned char switch_LED=0;         //控制流水灯开关标志
unsigned int flag=0;               //led检测标识

三、对按键和LED进行配置

void Init_Port()
{//LED配置P1SEL &=~0x1b;                     //将P1_0,P1_1,P1_3,P1_4设置为通用I/O端口  P1DIR |= 0x1b;                   //将P1_0,P1_1,P1_3,P1_4设置为输出方向P1 &=~0x1b;                       //P1端口设置为低电平flag=1;                            //按键配置P1SEL &=~0x04;                   //将P1_2设置为通用I/O端口P1DIR &=~0x04;                    //将P1_2设置为输入方向P1INP &=~0x04;                   //将P1_2设置为上拉/下拉P2INP &=~0x40;                  //将P1_2设置为上拉
}

四、延时函数

void delay(unsigned int xms)
{while(xms--)for(unsigned int i=0;i<533;i++);
}

五、流水灯函数

void LED_Running()
{delay(10);   if(switch_LED==1)              //当开关标志为1时{  count++;                       //时间片开始计数}if(count<=50)                 //当累加到50的时候 D4亮 其余灭D4=1,D3=0,D6=0,D5=0;else if(count<=100)          //当累加到100时侯  D3亮 其余灭D4=0,D3=1,D6=0,D5=0;else if(count<=150)         //当累加到150的时候 D6亮其余灭D4=0,D3=0,D6=1,D5=0;else if(count<=200)          //当累加到200的时候 D5亮 其余灭D4=0,D3=0,D6=0,D5=1;else                  count=0;                     //时间片清零 便于下次计数
}

注:要实现流水灯的按键控制流水灯的开始与停止,便用时间片的思想来解决这个问题,不断对按键SW1进行实时扫描当在其中个灯亮的时间片内按下被按下时便让唯独让当前时间片中LED灯常亮,这样就实现了流水灯的暂停效果。

补:时间片的概念:CPU分配给每个程序的时间,每个程序都会有一个自己的时间段,而在时间段就是所谓的时间片

六、按键扫描函数

void Scan_Keys()
{if(SW1==0)                       //当按键1被按下{delay(100); if(SW1==0) {while(SW1==0)                 {LED_Running();            //执行流水灯函数}switch_LED=~switch_LED;     //开关翻转 如果为0的时候再次按下为1也就是开启 如果为1再次按下也就是关闭}}}

七、main函数

void main()
{Init_Port(); if(flag==1)                     //当flag==1时   一开始全亮然后全灭执行流水灯{P1 |= 0x1b;delay(500); P1 &=~0x1b;delay(500); flag=0;}switch_LED=1;                  //默认为1也就是开while(1){LED_Running(); Scan_Keys();    }
}

八、全部代码

#include "iocc2530.h"
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2  unsigned int  count=0;
unsigned char switch_LED=0;         //控制流水灯开关标志
unsigned int flag=0;
void Init_Port()
{//LED配置P1SEL &=~0x1b; P1DIR |= 0x1b;P1 &=~0x1b;flag=1;//按键配置P1SEL &=~0x04; P1DIR &=~0x04; P1INP &=~0x04; P2INP &=~0x40;
}void delay(unsigned int xms)
{while(xms--)for(unsigned int i=0;i<533;i++);
}void LED_Running()
{delay(10);   if(switch_LED==1)               ///当开关标志为1时{  count++;   }if(count<=50)               D4=1,D3=0,D6=0,D5=0;else if(count<=100)   D4=0,D3=1,D6=0,D5=0;else if(count<=150)   D4=0,D3=0,D6=1,D5=0;else if(count<=200)    D4=0,D3=0,D6=0,D5=1;else                  count=0;
}void Scan_Keys()
{if(SW1==0)  {delay(100); if(SW1==0) {while(SW1==0) {LED_Running();            //执行流水灯函数}switch_LED=~switch_LED;     //开关翻转}}}void main()
{Init_Port(); if(flag==1)                     //当flag==1时   一开始全亮然后全灭执行流水灯{P1 |= 0x1b;delay(500); P1 &=~0x1b;delay(500); flag=0;}switch_LED=1;                  //默认为1也就是开while(1){LED_Running(); Scan_Keys();    }
}

CC2530开发-----按键控制流水灯暂停相关推荐

  1. 四、 按键控制流水灯的运行与暂停

    按键控制流水灯的运行与暂停 项目要求: [1]程序开始时,4个LED灯全亮一会,然后,再全灭一会,开始进入跑马灯. [2]跑马灯过程为:D4灯亮,其余熄灭,延时,D3灯亮,其余熄灭,延时,D6灯亮, ...

  2. AVR单片机实践--ATmega16按键控制流水灯

    一.实验目的 1.掌握AVR单片机开发平台的搭建方法. 2.掌握GPIO的编程方法. 二.实验内容及结果 1.设计程序 自行设计电路,包括流水灯和4个按键,完成"按键控制流水灯样式" ...

  3. 单片机-四个按键控制流水灯

    单片机-四个按键控制流水灯 代码 代码 代码片. #include "reg51.h" sbit key1 = P2 ^ 0; sbit key2 = P2 ^ 1; sbit k ...

  4. Proteus:单片机按键控制流水灯方向

    题目概述: 单片机:按键控制流水灯方向. 编程: #include <reg51.h> #include<intrins.h> #define uchar unsigned c ...

  5. 51单片机按键控制流水灯

    1.按键的使用 <1>独立按键的原理图 按键所对应的引脚为P3的0.1.2.3引脚口,并且这里总共有四个独立按键,它们公共的一段都接到了GND电源的负极.这样我们就知道按键上电的默认电平为 ...

  6. 基于51单片机《按键控制流水灯》

    1.用4个LED灯发光二极管实现至少四种灯光效果 2.可以通过输入按键在几种灯光之间切换 3.可以通过暂停按键停止彩色灯光效果,使小灯全亮,再次按下按键后继续之前的效果 4.增加自动在几种效果间切换功 ...

  7. 51单片机_7-1独立按键控制流水灯方向

    文章目录 要求 资源 效果 main函数 要求 1.使用单片机内部定时器做为延时函数 2.独立按键K1控制流水灯左移 3.独立按键K2控制流水灯右移 资源 工程文件压缩包 链接:https://pan ...

  8. 【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务

    学习目标: 学习普中51单片机的按键控制led灯. 电路图:                      学习内容:         LED灯的十六进制怎么算???         在这给大家算一下:首 ...

  9. C51单片机按键控制流水灯模式(定时器版本)以及定时器时钟

    上篇文章我们学了关于定时器的三大组成部分及许多寄存器的概念问题,这篇文章我们就要开始讲解实操部分. 首先,我们先来看看本文最后写成的代码: 以上三张是代码的主函数,此外,代码中还需用到的独立按键检测代 ...

最新文章

  1. IBM苏中:怎样利用深度学习、增强学习等方法提高信息处理效率
  2. gitee使用svn_Gitee SVN支持
  3. 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD
  4. 计算机操作系统——作业调度算法
  5. SAP Spartacus 代码提交的git message规范
  6. base cap 分布式_高并发架构系列:详解分布式一致性ACID、CAP、BASE,以及区别
  7. 统计字符串中某个字出现的次数
  8. Django,再谈json序列化
  9. 机器成为家人!华为发布2025十大趋势展望...
  10. android自动布局优先级,自动布局AutoLayout
  11. LeetCode 260. Single Number III
  12. qq音乐无损下载php源码,QQ音乐无损歌曲地址分析以及多平台源码
  13. 理正深基坑6.0软件备忘录_梳理使用方法01
  14. 3月24日服务器维护公告,梦幻西游3月24日更新了什么_梦幻西游3月24日维护及系统调整公告_游戏堡...
  15. 天使投资、风险投资VC、私募基金PE 与“A轮、B轮、C轮融资”的关系
  16. AlphaGo Zero 初探
  17. 弗兰克赫兹大物实验数据处理
  18. 公众号里面套页面_怎么套用别人的公众号模板?公众号模板在哪找? | 微信公众号指南...
  19. chronodex怎么用_手账技巧| 时间饼Chronodex的用法经验、使用心得和灵感收集
  20. win7与internet时间同步出错_win7系统时间不同步怎么办|win7系统时间同步出错的解决方法...

热门文章

  1. 在线学习系统,实现企业高效培训学习
  2. [论文翻译] Devign: Effective Vulnerability Identification by Learning Comprehensive Program Semantics
  3. MySQL caching_sha2_password认证异常问题分析
  4. 03 项目分析阶段(一)
  5. pylint中的Trailing whitespace (trailing-whitespace)如何解决?
  6. 中运量71路线路图_[上海]配套中运量71路 公交1250路、1251路更名同步调整线路走向及设站...
  7. python判断质数_使用Python语言判断质数(素数)的简单方法讲解
  8. java中void是什么意思_java中void什么意思
  9. 百度输入法的B次元:从生活必需品,走向产业引擎
  10. date-fns日期格式化_date-fns快速浏览,一个简单JavaScript日期库