本次实验是通过K3和K4按键,控制两个LED,在官方例子中按键控制采用了查询管脚电平的方法。
我在本次实验中K3采用查询法控制LED,而K4采用IRQ中断的查询方式控制LED。
实验用的软件是KEIL5-MDK,光盘里面的教程很详细。
下面是原程序:#include "includes.h"
void myDelay (INT32U ulTime)
{
INT32U i;
i = 0;
while (ulTime--) {
for (i = 0; i < 5000; i++);
}
}
int main (void)
{
SystemCoreClockUpdate();
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
| SIM_SCGC5_PORTB_MASK
| SIM_SCGC5_PORTC_MASK
| SIM_SCGC5_PORTD_MASK
| SIM_SCGC5_PORTE_MASK );
PORT_ENABLE_CLK(MKL_PORTA);
PORT_ENABLE_CLK(MKL_PORTB);
PORT_ENABLE_CLK(MKL_PORTD);
IO_FUN_SEL(MKL_PORTB,18,1);
IO_FUN_SEL(MKL_PORTB,19,1);
IO_FUN_SEL(MKL_PORTD,1,1);
IO_FUN_SEL(MKL_PORTA,4,1);
IO_IRQ_CONFIG(MKL_PORTA,4,2);
IO_FUN_SEL(MKL_PORTD,6,1);
GPIO_DDR_OUTPUT(MKL_PORTB,18);
GPIO_DDR_OUTPUT(MKL_PORTB,19);
GPIO_DDR_OUTPUT(MKL_PORTD,1);
GPIO_SET(MKL_PORTB,18);
GPIO_SET(MKL_PORTB,19);
GPIO_SET(MKL_PORTD,1);
while(1){
if(!GPIO_GET_VALUE(MKL_PORTD,6))
{
GPIO_TOGGLE(MKL_PORTB,19);
myDelay(200);
}
if(PORTA_ISFR << 4)
{
PORTA_ISFR = (1 << 4);
GPIO_TOGGLE(MKL_PORTB,18);
}
GPIO_TOGGLE(MKL_PORTD,1);
myDelay(200);
}
}
|