cc2530单片机启动IAR软件建立工程并在工程中编写程序,同时实现以下功能1.按下第一次按键,LED1灯每隔一秒闪烁不停,LED2熄灭,2.按下第二次按键LED2灯每隔一秒闪烁不停,LED1灯熄灭,按下第三次按键,回到第一次按键现象,以此往复循环
时间: 2024-04-30 07:24:20 浏览: 151
以下是基于CC2530单片机的IAR软件工程实现,实现按下按键控制LED灯的闪烁:
1. 打开IAR软件,依次点击菜单栏上的 "Project" -> "Create New Project",或者使用快捷键 "Ctrl+Shift+N" 新建工程。
2. 在弹出的 "Create New Project" 对话框中,选择 "CC2530F256" 作为设备类型,输入工程名称,选择工程存储路径,点击 "Ok" 按钮。
3. 在弹出的 "Select Configuration" 对话框中,选择 "Debug" 配置,点击 "Ok" 按钮。
4. 在弹出的 "Select Toolchain" 对话框中,选择 "IAR C/C++ Compiler for 8051",点击 "Ok" 按钮。
5. 在 "Workspace" 窗口中,选择 "Project" 目录,右键点击并选择 "Add New Project",或者使用快捷键 "Ctrl+Shift+A" 添加工程源文件。
6. 在弹出的 "Add New File" 对话框中,选择 "C/C++ Source File",输入源文件名称,点击 "Ok" 按钮。
7. 在 "Workspace" 窗口中选择新建的源文件,开始编写程序。
8. 编写程序如下:
```c
#include<ioCC2530.h>
#define LED1 P1_0 // 定义LED1连接的引脚
#define LED2 P1_1 // 定义LED2连接的引脚
#define KEY1 P1_2 // 定义KEY1连接的引脚
#define KEY2 P1_3 // 定义KEY2连接的引脚
void Delay(unsigned int n); // 声明延时函数
void main(void)
{
P1SEL &= ~(BIT0 | BIT1 | BIT2 | BIT3); // 将P1_0~P1_3引脚设为GPIO
P1DIR |= BIT0 | BIT1; // 将P1_0和P1_1引脚设为输出
P1DIR &= ~(BIT2 | BIT3); // 将P1_2和P1_3引脚设为输入
P1IE |= BIT2 | BIT3; // 将P1_2和P1_3引脚设为中断源
P1IES |= BIT2 | BIT3; // 将P1_2和P1_3引脚设为下降沿触发中断
EA = 1; // 开启总中断
while(1) // 主循环
{
if(KEY1 == 0) // 判断KEY1是否被按下
{
LED1 = 1; // 点亮LED1
LED2 = 0; // 熄灭LED2
while(KEY1 == 0) // 等待KEY1松开
{
Delay(1000); // 延时1秒
LED1 = ~LED1; // LED1状态取反
}
}
else if(KEY2 == 0) // 判断KEY2是否被按下
{
LED1 = 0; // 熄灭LED1
LED2 = 1; // 点亮LED2
while(KEY2 == 0) // 等待KEY2松开
{
Delay(1000); // 延时1秒
LED2 = ~LED2; // LED2状态取反
}
}
}
}
void Delay(unsigned int n) // 延时函数
{
unsigned int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < 100; j++);
}
#pragma vector = P1_VECTOR // P1端口中断服务函数
__interrupt void P1_ISR(void)
{
if(P1IFG & BIT2) // 判断P1_2引脚是否触发中断
{
Delay(10); // 延时去抖
if(KEY1 == 0) // 判断KEY1是否被按下
{
LED1 = 1; // 点亮LED1
LED2 = 0; // 熄灭LED2
while(KEY1 == 0) // 等待KEY1松开
{
Delay(1000); // 延时1秒
LED1 = ~LED1; // LED1状态取反
}
}
P1IFG &= ~BIT2; // 清除P1_2引脚中断标志位
}
else if(P1IFG & BIT3) // 判断P1_3引脚是否触发中断
{
Delay(10); // 延时去抖
if(KEY2 == 0) // 判断KEY2是否被按下
{
LED1 = 0; // 熄灭LED1
LED2 = 1; // 点亮LED2
while(KEY2 == 0) // 等待KEY2松开
{
Delay(1000); // 延时1秒
LED2 = ~LED2; // LED2状态取反
}
}
P1IFG &= ~BIT3; // 清除P1_3引脚中断标志位
}
}
```
9. 编译程序,生成可执行文件,下载到CC2530单片机上,即可实现按下按键控制LED灯的闪烁。
阅读全文