c语言实现三盏灯的控制
#ifndef __LED_H__
#define __LED_H__typedef struct
{volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDER;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsigned int BSRR;
}gpio_t;#define GPIOE ((gpio_t*)0x50006000)
#define GPIOF ((gpio_t*)0x50007000)void led1_init();
void led2_init();
void led3_init();void led1_ctl(int flag);
void led2_ctl(int flag);
void led3_ctl(int flag);
#endif
#include "led.h"
void delay_ms(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}
}
int main()
{*(unsigned int *)0x50000A28 |= (0x3<<4);led1_init();led2_init();led3_init();while(1){//LED1亮led1_ctl(1);led2_ctl(0);led3_ctl(0);delay_ms(100);//LED2亮led1_ctl(0);led2_ctl(1);led3_ctl(0);delay_ms(100);//LED3亮led1_ctl(0);led2_ctl(0);led3_ctl(1);delay_ms(100);}return 0;
}
#include "led.h"void led1_init()
{GPIOE->MODER &= (~(0x3<<20));GPIOE->MODER |= (0x1<<20);GPIOE->OTYPER &= (~(0x1<<10));GPIOE->OSPEEDER &= (~(0x3<<20));GPIOE->PUPDR &= (~(0x3<<20));
}
void led2_init()
{GPIOF->MODER &= (~(0x3<<20));GPIOF->MODER |= (0x1<<20);GPIOF->OTYPER &= (~(0x1<<10));GPIOF->OSPEEDER &= (~(0x3<<20));GPIOF->PUPDR &= (~(0x3<<20));
}
void led3_init()
{GPIOE->MODER &= (~(0x3<<16));GPIOE->MODER |= (0x1<<16);GPIOE->OTYPER &= (~(0x1<<8));GPIOE->OSPEEDER &= (~(0x3<<16));GPIOE->PUPDR &= (~(0x3<<16));
}
//LED1控制
void led1_ctl(int flag)
{if(flag==1){GPIOE->ODR |= (0x1<<10);}else if(flag==0){GPIOE->ODR &= (~(0x1<<10));}
}
//LED2控制
void led2_ctl(int flag)
{if(flag==1){GPIOF->ODR |= (0x1<<10);}else if(flag==0){GPIOF->ODR &= (~(0x1<<10));}
}
//LED3控制
void led3_ctl(int flag)
{if(flag==1){GPIOE->ODR |= (0x1<<8);}else if(flag==0){GPIOE->ODR &= (~(0x1<<8));}
}
实验效果