按键点灯
/*第1次按下SW1键时,LED1点亮;第2次按下SW1键时,LED2点亮;第3次按下SW1键时,
LED1和LED2都熄灭;第4次按下SW1键时,LED1点亮;这样依次循环*/
#include <ioCC2530.h>
#define LED1 P1_0 //P1.0端口控制LED1发光二极管
#define LED2 P1_1 //P1.1端口控制LED1发光二极管
#define SW1 P1_2 //P1.2端口与按键SW1相连
unsigned char count; //用于计算按键按下次数
//**********************************************************************************
void initial_gpio()
{ P1SEL &= ~0x07; //设置P1.0 P1.1 P1.2为GPIO
P1DIR |= 0X03; //设置P1.0 P1.1端口为输出
P1DIR &= ~0X04; //设置P1.2端口为输入
P1=0X00; //关闭LED灯
P1INP &= ~0X04; //P1.2端口为"上拉/下拉"模式
P2INP &= ~0X40; //对所有P1端口设置为"上拉"
}
//**********************************************************************************
void initial_interrupt()
{ EA = 1; //使能总中断
IEN2 |= 0X10; //使能P1端口中断源
P1IEN |= 0X04; //使能P1.2位中断
PICTL |= 0X02; //P1.2中断触发方式为:下降沿触发
}
//**********************************************************************************
#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{ if(P1IFG==0x04) //判断P1.2是否产生中断
{ count++;
switch(count)
{ case 1: LED1=1;break; //点亮LED1
case 2: LED2=1;break; //点亮LED2
default: P1=0X00;count=0x00;break; //灭掉LED1~LED4,并把count清零
} }
P1IF = 0; //清除P1端口中断标志位
P1IFG = 0x00; //清除P1.2中断标志位
}
//**********************************************************************************
void main(void)
{ initial_gpio(); //GPIO初始化
initial_interrupt(); //中断初始化
while(1)
{ ; }
}
串口发送信息
/**********************************************************************************
程序名称:USART_RX_TX.c
功能描述:CC2530开发板通过串口向PC机发送字符串"What is your name",PC机接收到串口信息后,
发送名字给开发板,并以#号作为结束符;开发板接收到PC信息后,再向PC机发送"Hello +名字"字符串。
要求采用到USART中断和奇偶校验技术.
注意事项:
1.可以采用接收中断和接收中断标志位查询两种方式,本程序为中断方式,程序文件名为usart_rx.c为查询方式程序。
2.PC机串口调试器发送数据为16进制格式,也可以为字符格式,但case 0x01:等比较语句要修改为case '1':方式
3.
编程时间:2015-3-7
编程作者:
**********************************************************************************/
#include <ioCC2530.h>
char data[]="What is your name?\n";
char name_string[20];
unsigned char temp,RX_flag,counter=0;
//*********************************************************************************
void delay(unsigned int i)
{ unsigned int j,k;
for(k=0;k<i;k++)
{ for(j=0;j<500;j++);
}
}
//*********************************************************************************
void initial_usart()
{ CLKCONCMD &= ~0X7F; //晶振设置为32MHz
while(CLKCONSTA & 0X40); //等待晶振稳定
CLKCONCMD &= ~0X47; //设置系统主时钟频率为32MHz
PERCFG = 0X00; //usart0 使用备用位置1 TX-P0.3 RX-P0.2
P0SEL |=0X3C; //P0.2 P0.3 P0.4 P0.5用于外设功能
P2DIR &= ~0xC0; //P0优先作为UART方式
U0CSR |= 0XC0; //uart模式 允许接收
U0GCR = 9;
U0BAUD = 59; //波特率设为19200
URX0IF = 0; //uart0 tx中断标志位清零
IEN0 = 0X84; //接收中断使能 总中断使能
}
//*********************************************************************************
void uart_tx_string(char *data_tx,int len)
{ unsigned int j;
for(j=0;j<len;j++)
{ U0DBUF = *data_tx++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
//*********************************************************************************
#pragma vector = URX0_VECTOR
__interrupt void UART0_RX_ISR(void)
{ URX0IF = 0;
temp = U0DBUF;
RX_flag=1;
}
//*********************************************************************************
void main(void)
{ initial_usart(); //调用UART初始化函数
uart_tx_string(data,sizeof(data)); //发送What is your name?
while(1)
{ if(RX_flag == 1)
{ RX_flag = 0;
if(temp !='#')
{ name_string[counter++] = temp; //存储接收数据:名字+#
}
else
{ U0CSR &=~0X40; //禁止接收
uart_tx_string("Hello ",sizeof("Hello ")); //名字接收结束,发送Hello字符串+空格
delay(1000);
uart_tx_string(name_string,counter); //发送名字字符串
counter=0;
U0CSR |=0X40; //允许接收
}
}
}
}
五秒闪烁
//LED1灯每隔5s闪烁一次
#include <ioCC2530.h>
#define LED1 P1_0 //P1.0端口控制LED1发光二极管 第3个
unsigned int count; //定义中断次数变量
//**********************************************************************************
void initial_t1()
{ T1IE = 1; //使能T1中断源
T1CTL = 0X05; //启动定时器1,设8分频 自由运行模式
TIMIF |= 0X40; //使能T1溢出中断
EA = 1; //使能总中断
}
//**********************************************************************************
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
//IRCON = 0X00; //清中断标志位,硬件会自动清零,即此语句可省略
if(count>300)
{ count = 0x00;
LED1 = !LED1; }
else
{ count++; }
}
//**********************************************************************************
void main(void)
{
CLKCONCMD &= ~0X7F; //晶振设置为32MHz
while(CLKCONCMD & 0x40); //等待晶振稳定
initial_t1(); //调用T1初始化函数
P1SEL &= ~0x01; //设置P1.0为GPIO
P1DIR |= 0X01; //定义P1.0端口为输出
LED1=0; //关闭LED1
while(1);
}
版权声明:本文为CSDN博主「安之海」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_50006364/article/details/121909586
暂无评论