独立新建工程并编写、编译代码,实现按键控制流水灯运行,完成以下任务要求:
【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. ASP.NET Core中配置监听URLs的五种方式

    原文: 5 ways to set the URLs for an ASP.NET Core app 作者: Andrew Lock 译者: Lamond Lu 默认情况下,ASP. NET Core ...

  2. Pytorch自定义创建BP神经网络

    class BPNet(nn.Module): def __init__(self, in_dim, n_hidden_1, n_hidden_2,\ n_hidden_3, n_hidden_4, ...

  3. 03-css3中的3D转换

    一.CSS3-3D转换 1.3D 特点:近大远小,物体和面遮挡不可见 1.1三维坐标系 x 轴:水平向右 -- x 轴右边是正值,左边是负值 y 轴:垂直向下 -- y 轴下面是正值,上面是负值 z ...

  4. ORCAD常用元件库说明

    以下是ORCAD自带库文件的说明,路径:Cadence\Cadence_SPB_16.6\tools\capture\library 1' AMPLIFIER.OLB共182个零件,存放模拟放大器IC ...

  5. Mac 下 brew 切换为国内源

    简介 Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程.它拥有安装.卸载.更新.查看.搜索等很多实用的功能,通过简单的一条指令,就可 ...

  6. python教程:使用 async 和 await 协程进行并发编程

    python 一直在进行并发编程的优化, 比较熟知的是使用 thread 模块多线程和 multiprocessing 多进程,后来慢慢引入基于 yield 关键字的协程. 而近几个版本,python ...

  7. window 10 安装paddlepaddle 1.7 GPU版本

    window 10 安装paddlepaddle 1.7 GPU版本 1)更新显卡驱动 2)安装cuda 10 https://developer.nvidia.com/cuda-10.0-downl ...

  8. stand up meeting 1--11

    今天国庆同学回中科大考试因此缺席了今天的daily scrum.不过国庆的任务已经基本完成,不会影响项目进度. 今日更新: 分享功能已经完成一个版本,如下图为分享至邮件: 针对AP返回结果中没有Wor ...

  9. 【山外问道】Linux UUID的查询方法

    本文打印版下载地址 [山外问道]Linux_UUID的查询方法-打印版.pdf 一.查询存储设备的UUID 1.使用blkid命令查看 (1)查询所有存储设备的UUID:blkid. (2)查询指定设 ...

  10. Linux工程师必备的系统监控工具

    WGCLOUD基于java语言开发,是微服务架构构建监控系统,支持高并发高性能高可用,核心模块包括:服务器集群监控,ES集群状态监控,CPU监控,内存监控,数据监控(mysql,postgresql, ...