CC2530定时器的应用
【例1】利用定时器计数实现5中彩灯的变化形式,基于模模式的。两个标志位,一个是定时器计数,一个是彩灯的状态。
#include "ioCC2530.h" #define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4 unsigned char count = ; //长定时累计变量
unsigned char led_stat = ; //彩灯状态标志 /*=======================简单的延时函数========================*/
void Delay(unsigned int t)
{
while(t--);
} /*======================端口初始化函数========================*/
void Init_Port()
{
P1SEL &= ~0x1b; //P1_0、P1_1、P1_3和P1_4作为通用I/O端口
P1DIR |= 0x1b; //P1_0、P1_1、P1_3和P1_4端口输出 D3 = ;
D4 = ;
D5 = ;
D6 = ; //P1 &= ~0x1b 0001 1011->1110 0100 或者P1 &= 0xe4
} /*=====================定时器1初始化函数======================*/
void Init_Timer1()
{
T1CC0L = 0xd4; //16MHz时钟128分频定时100ms
T1CC0H = 0x30; //设先填低8位,再填高8位
T1CCTL0 |= 0x04; //开启通道0的输出比较模式
T1IE = ; //使能定时器1中断
T1OVFIM = ; //使能定时器1溢出中断
EA = ; //使能总中断
T1CTL = 0x0e; //分频系数是128,模模式
} /*====================定时器1中断服务函数=====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
T1STAT &= ~0x01; //清除定时器1通道0中断标志
count++; //累加定时周期 定时器计数 if(count == ) //定时5秒时间到
{
count = ;
led_stat++;
if(led_stat == ) //设置了5种(0-4)彩灯变化方式
{
led_stat = ;
}
}
} /*=====================彩灯变换控制函数=======================*/
void LED_Control()
{
switch(led_stat)
{
case : //彩灯花式1 LED3闪烁
D3 = ~D3;
Delay();
break;
case : //彩灯花式2 1010—>0101
D3 = ;
D4 = ;
D5 = ;
D6 = ;
Delay();
D3 = ;
D4 = ;
D5 = ;
D6 = ;
Delay();
break;
case : //彩灯花式3 依次点亮依次熄灭
D3 = ;
Delay();
D4 = ;
Delay();
D5 = ;
Delay();
D6 = ;
Delay();
D3 = ;
Delay();
D4 = ;
Delay();
D5 = ;
Delay();
D6 = ;
Delay();
break;
case : //彩灯花式4 LED6闪烁
D6 = ~D6;
Delay();
break;
case : //彩灯花式5 依次点亮反向熄灭
D3 = ;
Delay();
D4 = ;
Delay();
D5 = ;
Delay();
D6 = ;
Delay();
D6 = ;
Delay();
D5 = ;
Delay();
D4 = ;
Delay();
D3 = ;
Delay();
break;
}
} /*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
Init_Timer1(); //初始化定时器1
while()
{
LED_Control();
}
}
【例2】利用定时器实现按键的长按与短按,分别显示不同的效果。同样需要两个标志位。一个是按键按下的标志,一个是记录按下的时间的变量。
#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 count_t = ; //长定时累计变量
unsigned char K_Press = ; //按键按下标志
/*=======================简单的延时函数========================*/
void Delay(unsigned int t)
{
while(t--);
}
/*======================端口初始化函数========================*/
void Init_Port()
{
//初始化LED灯的I/O端口
P1SEL &= ~0x1b; //P1_0、P1_1、P1_3和P1_4作为通用I/O端口
P1DIR |= 0x1b; //P1_0、P1_1、P1_3和P1_4端口输出
//关闭所有的LED灯
P1 &= ~0x1b;
//初始化按键
P1SEL &= ~0x04; //P1_2作为通用I/O端口
P1DIR &= ~0x04; //P1_2端口输入
P1INP &= ~0x04; //P1_2设置为上拉/下拉模式
P2INP &= ~0x40; //P1_2设置为上拉
} /*=====================定时器1初始化函数======================*/
void Init_Timer1()
{
T1CC0L = 0xd4; //16MHz时钟128分频定时100ms
T1CC0H = 0x30; //设先填低8位,再填高8位
T1CCTL0 |= 0x04; //开启通道0的输出比较模式
T1IE = ; //使能定时器1中断
T1OVFIM = ; //使能定时器1溢出中断
EA = ; //使能总中断
T1CTL = 0x0e; //分频系数是128,模模式
} /*====================定时器1中断服务函数=====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
T1STAT &= ~0x01; //清除定时器1通道0中断标志
if(K_Press != ) //按键按下
{
count_t++; //计算按下按下的时间值
}
} /*====================按键扫描处理函数========================*/ void Scan_Keys() {
if(SW1 == )
{
Delay(); //去抖动处理
if(SW1 == )
{
K_Press = ; //标志按键正在按下
while(SW1 == ); //等待按键松开
K_Press = ; //标志按键已经松开 if(count_t > ) //按键长按
{
D6 = ~D6;
}
else //按键短按
{
D4 = ~D4;
}
count_t = ; //按键计数值清零
}
}
} /*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
Init_Timer1(); //初始化定时器1
while()
{
Scan_Keys(); //扫描按键
}
}
CC2530定时器的应用的更多相关文章
- CC2530定时器1的模模式中断
CC2530定时器1的模模式中断void timer1SInit(void){ T1CCTL0 = 0; T1CTL &= ~0x0F; //clear register T1CTL |= 0 ...
- CC2530定时器3的输入捕获中断
CC2530定时器3的输入捕获中断 使用的是tim3的通道1的输入捕获P1_7口.//GPIO配置成复用功能,同时设置P1_7为输入.void irCaptureGpioInit(void){ P1S ...
- CC2530定时器使用
定时器学习 文件夹 说明 依据数据手冊可知CC2530总共同拥有4个定时器,可是定时器2被系统占用,可用的仅仅有三个,分别为定时器1/3/4 Timer在协议栈的代码位置为hal_timer ...
- CC2530定时器
一.定时/技术器的基本原理 定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设. 定时/计数 ...
- CC2530定时器模模式最大值计算
首先假设 频率: f 分频系数: n 间隔定时: s 周期: T 模模式最大值: N 因为 T = 1 / f 所以 s = ( n / f ) * N = n * N / f 由此可得 计算模模 ...
- 实验三 CC2530平台上CC2530平台上定时器组件的
实验三 CC2530平台上CC2530平台上定时器组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握CC2530定时器的PWM功能,及其TinyOS ...
- zigbee学习之路(六):Time3(查询方式)
一.前言 通过上次的学习,相信大家对cc2530单片机的定时器的使用有了一定的了解,今天我们来介绍定时器3的使用,为什么介绍定时器3呢,因为它和定时器4功能是差不多的,所以学会定时器3,就基本掌握了c ...
- CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)
目录 1. 前期预备知识 1.1 定时器中断触发 1.2 相关寄存器 1.3 寄存器相关问题 1.4 T1.T3定时器初始化流程 2 程序及代码 THE END 1. 前期预备知识 1.1 定时器中断 ...
- 【CC2530强化实训03】定时器间隔定时实现按键长按与短按
[CC2530强化实训03]定时器间隔定时实现按键长按与短按 [题目要求] 虽然用普通的延时函数能够实现按键长按与短按的判别,但是在实际的工程应用和项目开发中并不好用也不灵活.更多得是借助定时器的间隔 ...
随机推荐
- CentOS7安装MYCAT中间件
MYCAT是一个被广泛使用的功能强大的开源的数据库中间件,当然他的理想不仅仅是做一个中间件.这篇文章主要记录MYCAT服务的搭建过程,下篇会继续更新MYCAT的使用配置. 本篇记录将使用CentOS7 ...
- Python趣味入门3:变量、字串输入与输出
安装配置python环境完毕,非常有必要花十分钟对一些基本概念:变量.数学字符.输入.输出等4个概念进行理解,下面通过简单示例,深入了解python的基本语法. 本文的示例均在IDLE的命令行模式中完 ...
- AJ学IOS 之ipad开发qq空间项目横竖屏幕适配
AJ分享,必须精品 一:效果图 先看效果 二:结构图 如图所示: 其中用到了UIView+extension分类 Masonry第三方框架做子控制器的适配 NYHomeViewController对应 ...
- 借助Python来实现的定量城市研究
一.数据处理基础 (一)数据分析的概念 城市数据分析,可以从数据分析的广义和狭义两个角度来看: 狭义的数据分析是指根据分析目的,采用对比分析.分组分析.交叉分析和回归分析等分析方法,对相关城市数据(包 ...
- VXLAN 基础教程:在 Linux 上配置 VXLAN 网络
上篇文章结尾提到 Linux 是支持 VXLAN 的,我们可以使用 Linux 搭建基于 VXLAN 的 overlay 网络,以此来加深对 VXLAN 的理解,毕竟光说不练假把式. 1. 点对点的 ...
- E - Aladdin and the Flying Carpet
It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a ...
- python机器学习入门-(1)
机器学习入门项目 如果你和我一样是一个机器学习小白,这里我将会带你进行一个简单项目带你入门机器学习.开始吧! 1.项目介绍 这个项目是针对鸢尾花进行分类,数据集是含鸢尾花的三个亚属的分类信息,通过机器 ...
- 掌握MySQL连接查询到底什么是驱动表
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- Java IO 流-- 文件拷贝
IO流操作套路: 1.创建源: 2.选择流: 3.操作: 4.释放资源 上代码: package com.xzlf.io; import java.io.File; import java.io.Fi ...
- 理解java容器底层原理--手动实现HashSet
HashSet的底层其实就是HashMap,换句话说HashSet就是简化版的HashMap. 直接上代码: package com.xzlf.collection2; import java.uti ...