当前位置: 代码迷 >> 综合 >> ZigBee——实验二 外部中断实验
  详细解决方案

ZigBee——实验二 外部中断实验

热度:8   发布时间:2023-12-02 02:40:06.0

实验内容如下:

所需要的原理图:

实验内容讲解

首先初始化好要控制的LED灯,由题可知用到P0_1和P0_4

void Led_Init()
{P0SEL&=0x12;P0DIR|=0x12;
}

然后配置外部中断函数,这里我使用的是S4按键,P2_0口;

void zduan_Init()
{EA=1;IEN2|=0x02;//端口2中断使能P2IEN|=0x01;PICTL|=0x08;//配置端口2为下降沿
}

接下来就到数码管啦,这里u8是我宏定义的无符号unsigned char

u8  t_display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9
void Smg_show(u8 num)
{P1SEL&=~0x0c;P1DIR|=0x0c;//配置P1_2,P1_3;u8 i=0;u8 data=t_display[num];for(;i<8;i++)//8位,1位1位的给电平过去{if(0x80&data)//取最高位{P1_3=1;}else{P1_3=0;}data<<=1;//下一位P1_2=0;P1_2=1;}
}

配置以上内容之后就可以开始写中断里面的函数了,宏定义S4为P2_0;

#pragma vector=P2INT_VECTOR
__interrupt void P2_zduan(void)
{if(P2IFG&0x01){delay();//延时消抖if(S4==0)//判断按键是否按下{show_num++;//数字进行加,0-9show_num%=10;led2=~led2;led3=~led3;//两个led反转Smg_show(show_num);//显示函数}}P2IFG=0;P2IF=0;
}

到这里已经是最后一步啦,编写main函数,初始化,led灯全灭

void main()
{Led_Init();zduan_Init();Smg_show(show_num);//显示函数led2=1;led3=1;while(1){}
}