独立新建工程并编写、编译代码,实现按键控制流水灯运行,完成以下任务要求:
【1】程序开始运行时,D4、D3、D6、D5灯全亮一会,然后全灭一会,开始进入流水灯。
【2】流水灯的运行过程为:D4灯亮,其余熄灭,过一会,D3灯亮,其余熄灭,过一会,D6灯亮,其余熄灭,过一会,D5灯亮,其余熄灭,过一会…如此反复运行流水灯。
【3】按下SW1按键松开后,流水灯暂停保留当前状态;再一次SW1按键松开后,从当前状态保留处继续运行流水灯,在按下SW1按键时,不能打断流水灯的运行

解题思路:

首先需要确定所用的引脚,延时函数的编写和端口IO的初始化。

第一步骤可以写在主函数中加上延时函数实现,之后需要写一个标志位判断是否开启流水灯的运行。

第二步骤需要定义一个时间片,通过时间片的计时实现流水灯的闪烁。用一个简单的if……else if……else 完成流水灯的操作。最后记得要把计数的标志位清零。

 

第三步骤为按键扫描函数。首先需要延时去抖。当有按键的信号时候,通过判断流水灯是否在运行,当在运行时,按下则暂停流水灯;当暂停的时候,按下则开启流水灯。最终要一点就是在按键按下的时候,不打断流水灯的运行。

Tip:

while(1)其中1代表一个常量表达式,它永远不会等于0。循环会一直执行下去。除非你设置break等类似的跳出循环语句循环才会中止。

 #include "ioCC2530.h"

 #define D3  P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2 unsigned char F_LED = ; //流水灯运行标志
unsigned int count = ; //时间片计数 /*=======================简单的延时函数========================*/
void Delay(unsigned int t)
{
while(t--);
}
/*=======================端口初始化函数========================*/
void Init_Port()
{
P1SEL &= ~0x1b; //将P1_0,P1_1,P1_3,P1_4设置为通用I/O端口 0001 1011->1110 0100 普通IO
P1DIR |= 0x1b; //将P1_0,P1_1,P1_3,P1_4设置为输出方向 0001 1011 输出
P1 &= ~0x1b; //关闭4个LED灯 1110 0100 四个端口为低电平 P1SEL &= ~0x04; //将P1_2设置为通用I/O端口 0000 0100->1111 1011 普通IO
P1DIR &= ~0x04; //将P1_2设置为输入方向 1111 1011 0位输入
P1INP &= ~0x04; //将P1_2设置为上拉/下拉 1111 1011 P1_2 0位上下拉
P2INP &= ~0x40; //将P1_2设置为上拉 0100 0000—>1011 1111 第七位为端口1的选择
} /*=======================流水灯控制函数========================*/
void LED_Running()
{
Delay(); //定义时间片
if(F_LED == ) //如果处于运行状态,则累加时间片
{
count++;
}
if(count < ) //根据时间进行流水变换
{
D4 = ; D3 = ; D6 = ; D5 = ;
}
else if(count < )
{
D4 = ; D3 = ; D6 = ; D5 = ;
}
else if(count < )
{
D4 = ; D3 = ; D6 = ; D5 = ;
}
else if(count < )
{
D4 = ; D3 = ; D6 = ; D5 = ;
}
else
{
count = ; //流水周期结束,时间片计数清零
}
} /*=======================按键扫描函数=========================*/
void Scan_Keys()
{
if(SW1 == ) //发现有SW1按键信号
{
Delay(); //延时片刻,去抖动处理
if(SW1 == ) //确认为SW1按键信号
{
while(SW1 == )
{
LED_Running(); //在按键按下时,不打断流水灯运行
}
if(F_LED == )
{
F_LED = ; //流水灯运行标志
}
else if(F_LED == )
{
F_LED = ; //流水灯暂停标志
}
}
}
} /*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
D4 = ; //全亮
D3 = ;
D6 = ;
D5 = ;
Delay();
D4 = ; //全灭
D3 = ;
D6 = ;
D5 = ;
Delay();
F_LED = ; //开启流水灯运行
while()
{
Scan_Keys(); //按键扫描
LED_Running(); //流水灯运行
}
}

zigbee通用IO口小作业的更多相关文章

  1. CC2530通用IO口的输入输出

    一.引脚概述 CC2530有40 个引脚.其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用.P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振.所以可供我们使用 ...

  2. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  3. 转载电子发烧友网---STM32的IO口灌入电流和输出驱动电流

    刚开始学习一款单片机的时候一般都是从操作IO口开始的,所以我也一样,先是弄个流水灯. 刚开始我对STM32的认识不够,以为是跟51单片机类似,可以直接操作端口,可是LED灯却没反应,于是乎,仔细查看资 ...

  4. STM32的IO口的8种配置

    STM32的IO口的8种配置 1 STM32的输入输出管脚有以下8种可能的配置:(4输入+2输出+2复用输出) ① 浮空输入_IN_FLOATING ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ ...

  5. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...

  6. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)

     版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...

  7. 51单片机I/O引脚IO口工作原理

    51单片机I/O引脚IO口工作原理 一.51单片机管脚p0.p1.p2.p3口区别如下: 1.意思不同P0口作输出口用时,需加上拉电阻.P0口有复用功能.当对外部存储器进行读写操作时,P0口先是提供外 ...

  8. IO口

    STM32的每个IO端口都有7个寄存器来控制.他们是:CRH CRL IDR ODR BSRR BRR LCKR.我们常用的IO端口寄存器位CRL CRH IDR ODR.CRL CRH控制着每个IO ...

  9. STM32系列单片机IO口模式设置

    STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和 ...

随机推荐

  1. Git敏捷开发--reset和clean

    reset 丢弃本地所有修改,强行和上游分支保持一致 git reset --hard HEAD 若仅丢弃某个文件的改动,利用checkout git checkout your_file clean ...

  2. selemiun 下拉菜单、复选框、弹框定位识别

    一.下拉菜单识别 对下拉框的操作,主要是通过Select 类里面的方法来实现的,所以需要new 一个Select 对象(org.openqa.selenium.support.ui.Select)来进 ...

  3. python之excel表操作

    python对excel表操作主要用到三个库,xlrd,xlwt,xlutils,分别用于excel表读,写,修改操作,以下将一个简单介绍 一.生成excel表:xlwt类 新建excel表,并写入数 ...

  4. df卡住的解决办法

    在使用网络存储时,如果网络存储出问题.比如使用NFS,网络中断,df -h会卡住 情形一 ctrl+c是能取消中断的,这种情况算是比较幸运.使用mount查看有哪些挂载点,将其卸载即可. 情形二 ct ...

  5. Git速查表大全

  6. JDK的下载安装与环境变量的配置

    第一步:下载 方式一:在地址栏输入 www.oracle.com 访问该网址自行下载 方式二:百度网盘下载链接1.8  64位版本: https://pan.baidu.com/s/10ZMK7NB6 ...

  7. CG-CTF(5)

    CG-CTF https://cgctf.nuptsast.com/challenges#Web 续上~ 第二十二题:SQL注入1 点击Source: 分析: mysql_select_db()函数: ...

  8. atom 之 前端必备插件

    一. 语法支持 1. Language-label Ø ES2016.ESNext.JXS语法扩展 2. Language-postcss Ø Postcss语法高亮 二. 自动补全 1. Autoc ...

  9. HTTP 协议图解

    HTTP 协议是一个非常重要的网络协议,我们平时能够使用浏览器浏览网页,其中一个非常重要的条件就是HTTP 协议. 0,什么是网络协议 互联网的目的是分享信息,网络协议是互联网的重要组成部分. 在互联 ...

  10. C++操作Kafka使用Protobuf进行跨语言数据交互

    C++操作Kafka使用Protobuf进行跨语言数据交互 Kafka 是一种分布式的,基于发布 / 订阅的消息系统.主要设计目标如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 T ...