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]定时器间隔定时实现按键长按与短按 [题目要求] 虽然用普通的延时函数能够实现按键长按与短按的判别,但是在实际的工程应用和项目开发中并不好用也不灵活.更多得是借助定时器的间隔 ...
随机推荐
- Kubectl patch命令使用
kubectl patch 使用(patch)补丁修改.更新资源的字段. 支持JSON和YAML格式. 请参阅https://htmlpreview.github.io/?https://github ...
- 通过String的不变性案例分析Java变量的可变性
阅读本文之前,请先看以下几个问题: 1.String变量是什么不变?final修饰变量时的不变性指的又是什么不变,是引用?还是内存地址?还是值? 2.java对象进行重赋值或者改变属性时在内存中是如何 ...
- Linux下安装Redis4.0版本(简便方法)
Redis介绍: Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...
- 全平台阅读器 StartReader
前段时间在网上闲逛, 发现了一款全平台阅读器 StartReader, 用了一阵子感觉还不错,网址是: https://www.startreader.com/ 感觉这款阅读器是程序员的福音,it人员 ...
- SSH、SCP命令及使用说明
SSH篇 1.ssh介绍 SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露 ...
- SpringBoot全局异常处理与定制404页面
一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...
- 不借助多余参数也可交换两个参数(c++,swap函数)
利用a^a=0异或属性 [示例代码] #include<stdio.h> void data_swap(int &a,int &b){ a = a ^ b; b = a ^ ...
- JSP中引用CSS样式文件却无法显示的问题解决方案
你也遇到过这种问题吗,CSS写好了,JSP写好了,在JSP中调用CSS文件,路径检查后也正确,但是无法显示渲染后的页面 原因:罪魁祸首就是过滤器响应数据的时候,响应头设置为了“text/html”,但 ...
- asp.net core identity学习1
ASP.NET Identity 学习 创建一个Asp.net core mvc项目 添加Nuget包: Microsoft.EntityFrameworkCore.SqlServer 3.1.3 M ...
- 用functools.lru_cache实现Python的Memoization
现在你已经看到了如何自己实现一个memoization函数,我会告诉你,你可以使用Python的functools.lru_cache装饰器来获得相同的结果,以增加方便性. 我最喜欢Python的原因 ...