按键查询
即硬件上电后,程序开始运行,当检测到按键按下,触发按键语句,执行按键触发的事件;
玩单片机需要清楚两件东西,第一个是单片机的电路图,另一个则是单片机的寄存器;
CC2530是51的升级版,我们的寄存器在网上也有很多,直接百度查就有了;
电路图
寄存器
本实验用到的相关寄存器:
P0DIR(P1DIR相同):设置各个I/O的方向,0为输入,1为输出
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
P0_7方向 |
P0_6方向 |
P0_5方向 |
P0_4方向 |
P0_3方向 |
P0_2方向 |
P0_1方向 |
P0_0方向 |
程序
下面来两个程序实例,看看效果吧
//*********************************************
/*使用按键控制LED1的闪烁效果
/*①系统复位后LED熄灭
/*②按下一次SW1按键后,LED开始闪烁
/*③再按下一次SW1按键后,LED停止闪烁并熄灭
/*
/*
//********************************************/ #include "ioCC2530.h"
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2//宏定义需要用到的硬件 typedef unsigned char uint8;
typedef unsigned int uint16; uint8 flag=; void delay(uint16 time)//延时函数
{
uint16 i;
while(time--)
{
for(i=;i<;i++);
}
} void port()//初始化LED和按键
{
P1DIR = 0x1b;//0001 1011 LED灯设置为输出
P1 &=~ 0x1b;//给LED等赋予低电平,初始化为灭
P1DIR &=~ 0x04;//按键口为0,设置为输入
} void Key()//按键查询函数
{
if(SW1==)
{
if(SW1==)
{
while(!SW1);
flag=!flag;
}
}
} void LED_Blink()//按键闪烁
{
P1 = 0x1b;
delay();
P1 &=~ 0x1b;
delay();
} main()
{
port();
while()
{
Key();//调用按键查询函数
if(flag==)
{
LED_Blink();
}
else
{
P1 &=~ 0x1b;
}
}
}
//****************************************
/*使用按键控制LED灯流水效果
/*①系统复位后,LED开始以流水灯的方式进行
/*②当按下按键时,流水灯停止运行,LED保持按键按下时的状态
/*③当按键松开后,流水灯继续之前的运行
/*
/********************************************/ #include"ioCC2530.h"
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2 typedef unsigned char uchar;
typedef unsigned int uint;
uchar flag=; void delay(uint time)
{
uint i;
while(time--)
{
for(i=;i<;i++);
if(SW1==)
{
while(!SW1);
}
}
} void port()
{
P1DIR = 0x1b;
P1 &=~ 0x1b;
P1DIR &=~0x04;
} main()
{
port();
while()
{
if(flag==)
{
D4=;D3=;D6=;D5=;
delay();
flag++;
}
if(flag==)
{
D4=;D3=;D6=;D5=;
delay();
flag++;
}
if(flag==)
{
D4=;D3=;D6=;D5=;
delay();
flag++;
}
if(flag==)
{
D4=;D3=;D6=;D5=;
delay();
flag=;
}
}
}