宏定义
#include "ioCC2530.h" #define LED1 P1_0 #define LED2 P1_5 #define LED3 P1_3 #define LED4 P1_4 #define uint unsigned int #define uchar unsigned char
初始化
void Init(void) { //P1SEL &= ~0x1B; //设置P1_0、P1_5、P1_3和P1_4为普通I/O P1DIR |=0x39; //设置P1_0、P1_5、P1_3和P1_4为为输出口 LED1=LED2=LED3=LED4=0; //全部熄灭LED }
延迟
uint flag_Pause=0; void delay(uint); void delay(uint time) { uint i; uchar j; for(i = 0; i < time; i++) { for(j = 0; j < 240; j++) { asm("NOP"); // asm是内嵌汇编,nop是空操作,执行一个指令周期 asm("NOP"); asm("NOP"); while(flag_Pause); // 根据flag_Pause的值确定是否在此循环 } } }
跑马灯
void LSD(void) { LED2=1; //点亮LED2 LED1=LED3=LED4=0; //熄灭LED2、LED3和LED4 delay(1200); // 延时 LED1=1; //点亮LED1 LED2=LED3=LED4=0; //熄灭LED1、LED3和LED4 delay(1200); // 延时 LED4=1; //点亮LED4 LED1=LED2=LED3=0; //熄灭LED1、LED2和LED3 delay(1200); // 延时 LED3=1; //点亮LED4 LED1=LED2=LED4=0; //熄灭LED1、LED2和LED4 delay(1200); // 延时 }
中断
#pragma vector = P1INT_VECTOR __interrupt void P1_INT(void) { if (P1IFG & 0x04) //如果P1_2口中断标志位置位 { if(flag_Pause ==0) { flag_Pause =1; } else { flag_Pause =0; } P1IFG &= ~0x04; //清除P1_2口中断标志位 } P1IF=0; //清除P1口中断标志位 }
主函数
void main(void) { Init(); //初始化 /***********************新增外部中断初始化******************/ IEN2 |=0x10; //使能P1口中断 P1IEN |=0x04; //使能P1_2口中断 PICTL |=0x02; // P1_3到P1_0口下降沿触发中断 EA =1; // 使能总中断 /*************************************************************/ while(1) //程序主循环 { LSD(); } }