实验要求
代码实现
#include "ioCC2530.h"
#define D4 P1_1
#define D6 P1_4
#define SW1 P1_2
unsigned int count = 0;
unsigned char K_Press = 0;
//延迟函数
void Delay(unsigned int t)
{
while(t--);
}
//端口初始化函数
void Init_Prot()
{
//配置4个LED灯的引擎
//选择端口的功能
P1SEL &=~0x1B;//设置通用io端口
//配置端口的方向
P1DIR |=0x1B;
//关闭LED灯
P1 &=~0x1B;
//按键
P1SEL &=~0x04;//输入
P1DIR &=0x04;
P1INP &=0x04;//上拉模式
P2INP &=0x40;
}
//定时器的初始化
void Init_Timer1()
{
//1.设置最大计数值
T1CCOL = 0xD4;//先低8位
T1CCOH = 0x30;//再高8位
//2.开启通道0的比较模式
T1CCTL0 |=0x04;
//3.使能定时器1的中断
T1IE=1;
//4.打开使能总中断
EA=1;
//5.设置定时器1的分频数和工作模式
T1CTL=0x0E;
}
//定时器的中断服务函数
#pragma vector = T1_VECTOR //起始语句
//中断服务函数
__interrupt void Service_Timer1()
{
if(K_Press==1)
{
count++;
}
}
//按键扫描函数
void Scan_Keys()
{
//按键1
if(SW1 == 0)//可能有按键按下,那么进行去抖动操作
{
Delay(200);
if(SW1 == 0)//那么就是按键触发的信号
{
K_Press==1;
//按键处理程序
while(SW1 == 0);
//低电平、按下状态
K_Press==0;
if(count>5)
{
D4=~D4;
}
else
{
D6=~D6;
}
count=0;
}
}
}
void main(void)
{
//端口初始化
Init_Prot();
Init_Timer1();
while(1)
{
Scan_Keys();
}
}
关键字:CC2530 定时器1 长按 短按
引用地址:
CC2530基于定时器1的长按与短按
推荐阅读最新更新时间:2024-11-12 11:07
51单片机T0定时器应用1
1.实验任务 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示 2.电路原理图 图4.15.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2).把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对
[单片机]
使用定时器1以方式0产生周期为500us的方波连续脉冲
设单片机晶振频率为6MHz,要求使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲,并由P1.0输出,以查询方式完成。 求单片机高手帮忙! ;---------------------------------------------------------------- 分析: 方式0,求初始值时,稍麻烦点。 按照题目要求,需要定时250us。 因为晶振频率为6MHz,指令周期就是2us,那么计数值就是125。 因为方式0的最大计数值是 2^13,于是有: 初始值 = 8192-125 = 8067 = 1111 1100 00011 使用方式0,要求把1111110000011,分成高8位和低5位,故有:
[单片机]
cc2530是什么_cc2530能做什么
CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。 cc2530是什么? cc2530简介: CC2530 结合了领先的RF 收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其它强大的功能。CC2530 有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。CC2530 具有不同的运行模式,使得它尤其适应超低功耗要求的系统。运行模式之间的转换时间短进一步确保了低能源消耗。
[单片机]
长按键C语言程序
一共用了四个按钮. #define _KEYDOWN_TEST_TIME (20) unsigned char IsKeyDown(volatile unsigned char Value, unsigned char pin) { unsigned long CurState = 0, i; for(i = 0; i _KEYDOWN_TEST_TIME; ++i) CurState += _GET_BIT(Value, pin)? 0:1; //键盘接了上拉电阻,低电平才是按下 if(CurState == _KEYDOWN_TEST_TIME) return 1; return 0; } //以下所有值均是以 De
[单片机]
单片机按键长短按源程序(不需要通过等待来判定)
从做项目编写的程序里拆解出来 单片机源程序如下: uint m; static uchar flag_key=1; //按键松开标志 static uchar pass=0; //长按动作标志,为1时,长按已动作,为0时长按未动作 if(KEY==0) { flag_key=0; //按键按下标志 m++; } else flag_key=1; //按键松开标志 if((flag_key==1)&&(m 10)&&(m 500)) //按键松开,
[单片机]
stm32检测按键单击,双击,长按
硬件连接: 按键上拉 外设配置: 外部配置为下降沿中断,定时器中断时间为5ms。定时器中断抢占优先级必须高于外部中断 检测方法: 定义一个时间,在该时间段里检测到一个下降沿,认为是单击;低电平持续时间超过该时间,认为是长按;检测到两个下降沿认为是双击。 代码 #define KEY_PRESS_TIME 800 //检测时间段 uint16_t key_time_cnt = KEY_PRESS_TIME + 5; bool key_pressed = false; //单击标志 bool key_long_pressed = true; //长按标志 void
[单片机]
stm32定时器1的2路互补PWM
void TIM1_PWM_Ini(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //开启时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockC
[单片机]
Atmega16的定时器1使用
//经验正以下程序是正确的,可以实现LED 1s亮 1s灭 #include avr/io.h #include avr/interrupt.h #define uchar unsigned char #define uint unsigned int uint count; void init() { DDRB|=_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7); PORTB&=~(_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7)); //TCNT0=155;//初值为55,即记数到255-155=100次溢出并进入定时器0中断函数 TCNT1H=(65536-10000)/
[单片机]