无线传感网——zigbee基础实验定时器实现长按与短按
#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 = 0; //长定时累计变量
unsigned char K_Press = 0; //按键按下标志
/*=======================简单的延时函数========================*/
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; //使能定时器1中断
T1OVFIM = 1; //使能定时器1溢出中断
EA = 1; //使能总中断
T1CTL = 0x0e; //分频系数是128,模模式
}
/*====================定时器1中断服务函数=====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
T1STAT &= ~0x01; //清除定时器1通道0中断标志
if(K_Press != 0) //按键按下
{
count_t++; //计算按下按下的时间值
}
}
/*====================按键扫描处理函数========================*/
void Scan_Keys()
{
if(SW1 == 0)
{
Delay(100); //去抖动处理
if(SW1 == 0)
{
K_Press = 1; //标志按键正在按下
while(SW1 == 0); //等待按键松开
K_Press = 0; //标志按键已经松开
if(count_t > 10) //按键长按
{
D6 = ~D6;
}
else //按键短按
{
D4 = ~D4;
}
count_t = 0; //按键计数值清零
}
}
}
/*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
Init_Timer1(); //初始化定时器1
while(1)
{
Scan_Keys(); //扫描按键
}
}
以上是 无线传感网——zigbee基础实验定时器实现长按与短按 的全部内容, 来源链接: utcz.com/z/516056.html