【例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定时器的应用的更多相关文章

  1. CC2530定时器1的模模式中断

    CC2530定时器1的模模式中断void timer1SInit(void){ T1CCTL0 = 0; T1CTL &= ~0x0F; //clear register T1CTL |= 0 ...

  2. CC2530定时器3的输入捕获中断

    CC2530定时器3的输入捕获中断 使用的是tim3的通道1的输入捕获P1_7口.//GPIO配置成复用功能,同时设置P1_7为输入.void irCaptureGpioInit(void){ P1S ...

  3. CC2530定时器使用

     定时器学习   文件夹 说明 依据数据手冊可知CC2530总共同拥有4个定时器,可是定时器2被系统占用,可用的仅仅有三个,分别为定时器1/3/4 Timer在协议栈的代码位置为hal_timer ...

  4. CC2530定时器

    一.定时/技术器的基本原理 定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设.         定时/计数 ...

  5. CC2530定时器模模式最大值计算

    首先假设 频率: f 分频系数: n 间隔定时: s 周期: T 模模式最大值: N 因为 T = 1 / f 所以 s = ( n / f ) * N  =  n * N / f 由此可得 计算模模 ...

  6. 实验三 CC2530平台上CC2530平台上定时器组件的

    实验三 CC2530平台上CC2530平台上定时器组件的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步掌握CC2530定时器的PWM功能,及其TinyOS ...

  7. zigbee学习之路(六):Time3(查询方式)

    一.前言 通过上次的学习,相信大家对cc2530单片机的定时器的使用有了一定的了解,今天我们来介绍定时器3的使用,为什么介绍定时器3呢,因为它和定时器4功能是差不多的,所以学会定时器3,就基本掌握了c ...

  8. CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)

    目录 1. 前期预备知识 1.1 定时器中断触发 1.2 相关寄存器 1.3 寄存器相关问题 1.4 T1.T3定时器初始化流程 2 程序及代码 THE END 1. 前期预备知识 1.1 定时器中断 ...

  9. 【CC2530强化实训03】定时器间隔定时实现按键长按与短按

    [CC2530强化实训03]定时器间隔定时实现按键长按与短按 [题目要求] 虽然用普通的延时函数能够实现按键长按与短按的判别,但是在实际的工程应用和项目开发中并不好用也不灵活.更多得是借助定时器的间隔 ...

随机推荐

  1. Pandownload作者被抓之后

    近日,pandownload作者被抓,可以说是圈内的大事件,被抓之后, Pandownload 已经是打不开,用不了了 就在我为此感到惋惜的时候,竟然有出来个shengdownload 先来一块看看这 ...

  2. Github star 1.7k 的项目源码解析

    先拜读源码,最后总结,以及其他实现思路.如有错误,欢迎指正! 项目介绍 名称:Darkmode.js 功能:给你的网站添加暗色模式 项目链接:https://github.com/sandoche/D ...

  3. stand up meeting 12-2

    今天因为各位组员组里项目原因没有集中在一起进行stand up meeting.但是士杰和天赋国庆分别对项目进度和前后端的结合进行的沟通. 针对后端部分,天赋完成了GetRankingData API ...

  4. Q - QQpet exploratory park HDU - 1493 (概率DP)

    题目大意: 一共有61个位置,标记为0~60.其中有10个重要位置,分别为:5, 12, 22, 29, 33, 38, 42, 46, 50 and 55. 有一个筛子,一共6个面,标有1~6.摇到 ...

  5. E2. Send Boxes to Alice (Hard Version)

    秒的有点难以理解:https://blog.csdn.net/weixin_42868863/article/details/103200132 #include<bits/stdc++.h&g ...

  6. git分支,git commit,git流程

    1. git分支命令规范 1. Master 主分支 2. Dev 开发分支 3. Feature 功能分支(例如:feature-x) 4. Release 预发布分支(例如:release-1.2 ...

  7. ESI web学习记录

    Ezbypass 解出 放在php新特性的文章最后了,利用json反序列化脚本绕过disable_functions来get flag Ezupload 没解出 登陆页面查看源代码发现,备份文件泄露. ...

  8. [git] github上传项目(使用git)、删除项目、添加协作者

    来源:http://www.cnblogs.com/sakurayeah/p/5800424.html (怕链接失败,所以直接就就复制过来啦,感谢作者) 一.注册github账号 github网址ht ...

  9. Java工作流程引擎系统的退回规则 专题说明

    概述 说明:流程引擎的退回与发送,分别是前进与后退,它是流程引擎的基础功能操作,流程的退回根据不同的应用场景,也是需要不同的方式来控制,我们把这些方式叫做规则处理. 退回工作的场景相对复杂,由于与审核 ...

  10. 作业十一——LL(1)文法的判断,递归下降分析程序

    作业十一——LL(1)文法的判断,递归下降分析程序 判断是否为LL(1)文法 选取有多个产生式的求select,只有一条产生式的无需求select 同一个非终结符之间求交集,全部判断为空后则为LL(1 ...