点灯3

#include <ioCC2530.h> //引入CC2530所对应的头文件(包含各SFR的定义)

#define D7 P1_0 //定义D7为P1_0口控制
#define D6 P1_1 //定义D6为P1_1口控制
#define K4 P0_1
#define K5 P0_4
#define R P0_1
#define G P1_3
#define B P0_6

static int counter=1000;
void led_init(void);
void led_test(void);
void delay_ms(int ms);
/*主函数
——————————————————-*/
void main(void)
{
led_init();

while(1)
{
;
}
}

/*led初始化
——————————————————-*/
void led_init(void)
{
P1SEL &= ~0x0B; //P1.0 P1.1 P1.3为普通 I/O 口
P1DIR |= 0x0B; //输出

P0SEL &=~ 0x62; //P0.1 0.5 0.6为普通 I/O 口
P0DIR |= 0x62;//输出
P0_5=0; //feng ming qi
D7 = 1; //关LED
D6 = 1;

P0IEN |= 0X12; //P0.1中断使能
PICTL |= 0X01; //P0口下降沿触发
IEN1 |= 0x20; //允许P0口中断
P0IFG = 0X00; //初始化中断标志位
P0IF = 0;
EA = 1; //总中断使能0

}

/*led闪烁函数
——————————————————-*/
void led_test(void)
{
int b=P0IFG&0x10;

int c=P0IFG&0x02;

if(c)
counter++;
if(b)
counter–;
int a=counter%3;
switch(a)
{
case 0:
R=0;G=1;B=1;break;
case 1:
R=1;G=0;B=1;break;
case 2:
R=1;G=1;B=0;break;
}

}

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)
{
EA=0;
//P0IFG = 0;
//P0IF = 0; //通常情况这里应该是关掉中端,并且把这两句话放到函数结束
// D6 = 0;
// delay_ms(2000);
led_test();
// D6 = 1;
P0IFG = 0;
P0IF = 0;
EA=1;
}
void delay_ms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<555;j++);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据