本次实验是通过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);
- }
- }
|