ARM——LED灯实验

 完成LED灯的操控:

#ifndef __LED_H__                                              
#define __LED_H__                                              
                                                               
typedef struct{                                                
    volatile unsigned int MODER;                               
    volatile unsigned int OTYPER;                              
    volatile unsigned int OSPEEDR;                             
    volatile unsigned int PUPDR;                               
    volatile unsigned int IDR;                                 
    volatile unsigned int ODR;                                 
}gpio_t;                                                       
#define GPIOE ((gpio_t*)0x50006000)                            
#define GPIOF ((gpio_t*)0x50007000)                            
#define RCC_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28)  
                                                               
//LED1初始化                                                   
void led1_init(void);                                          
//LED1点亮                                                     
void led1_on(void);                                            
//LED1熄灭                                                     
void led1_off(void);                                           
//LEd2初始化                                                   
void led2_init(void);                                          
//LED1点亮                                                     
void led2_on(void);                                            
//LED1熄灭                                                     
void led2_off(void);                                           
//LED1初始化                                                   
void led3_init(void);                                          
//LED1点亮                                                     
void led3_on(void);                                            
//LED1熄灭                                                     
void led3_off(void);                                           
#endif                                                         
                                                               
                                                               

 功能代码:实现LED1、2、3三个灯的初始化以及点亮和熄灭

#include "led.h"                                                         
                                                                         
                                                                         
//LED1初始化                                                             
void led1_init(void)                                                     
{                                                                        
    //RCC4位置1                                                         
    RCC_AHB4_ENSETR |= (0x1<<4);                                         
    //MODER[21:20]位置01                                               
    GPIOE->MODER |=(0x1<<20);                                            
    GPIOE->MODER &=(~(0x1<<21));                                         
    //OTYPER[10]置0                                                     
    GPIOE->OTYPER &=(~(0x1<<10));                                        
    //OSPEEDR[21:20]位置00                                             
    GPIOE->OSPEEDR &=(~(0x3<<20));                                       
                                                                         
    //PUPDR[21:20]位置00                                          
    GPIOE->PUPDR &=(~(0x3<<20));                                         
}                                                                        
//LED2初始化                                                             
void led2_init(void)                                                     
{                                                                        
    //RCC4位置1                                                         
    RCC_AHB4_ENSETR |= (0x1<<5);                                         
    //MODER[21:20]位置01                                               
    GPIOF->MODER |=(0x1<<20);                                            
    GPIOF->MODER &=(~(0x1<<21));                                         
    //OTYPER[10]置0                                                     
    GPIOF->OTYPER &=(~(0x1<<10));                                        
    //OSPEEDR[21:20]位置00                                             
    GPIOF->OSPEEDR &=(~(0x3<<20));                                       
                                                                         
    //PUPDR[21:20]位置00                                          
    GPIOF->PUPDR &=(~(0x3<<20));                                         
}                                                                        
//LED3初始化                                                             
void led3_init(void)                                                     
{                                                                        
    //RCC4位置1                                                         
    RCC_AHB4_ENSETR |= (0x1<<4);                                         
    //MODER[21:20]位置01                                               
    GPIOE->MODER |=(0x1<<16);                                            
    GPIOE->MODER &=(~(0x1<<17));                                         
    //OTYPER[10]置0                                                     
    GPIOE->OTYPER &=(~(0x1<<8));                                         
    //OSPEEDR[21:20]位置00                                             
    GPIOE->OSPEEDR &=(~(0x3<<16));                                       
                                                                         
    //PUPDR[21:20]位置00                                          
    GPIOE->PUPDR &=(~(0x3<<16));                                         
}                                                                        
//LED1点亮                                                               
void led1_on(void)                                                       
{                                                                        
                                                                         
    //ODR[10]位置1                                                   
    GPIOE->ODR |= (0x1<<10);                                             
}                                                                        
//LED1熄灭                                                               
void led1_off(void)                                                      
{                                                                        
                                                                         
    //ODR[10]位置0                                                    
    GPIOE->ODR &=(~(0x1<<10));                                           
}                                                                        
//LED2点亮                                                               
void led2_on(void)                                                       
{                                                                        
                                                                         
    //ODR[10]位置1                                                   
    GPIOF->ODR |= (0x1<<10);                                             
}                                                                        
//LED2熄灭                                                               
void led2_off(void)                                                      
{                                                                        
                                                                         
    //ODR[10]位置0                                                    
    GPIOF->ODR &=(~(0x1<<10));                                           
}                                                                        
//LED1点亮                                                               
void led3_on(void)                                                       
{                                                                        
                                                                         
    //ODR[10]位置1                                                   
    GPIOE->ODR |= (0x1<<8);                                              
}                                                                        
//LED1熄灭                                                               
void led3_off(void)                                                      
{                                                                        
                                                                         
    //ODR[10]位置0                                                    
    GPIOE->ODR &=(~(0x1<<8));                                            
}                                                                        

 测试代码:实现三个灯循环启灭

#include "led.h"

extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
    int i,j;
    for(i = 0; i < ms;i++)
        for (j = 0; j < 1800; j++);
}


int main()
{
    led1_init();
    led2_init();
    led3_init();
    while(1)
    {
        led1_on();
        delay_ms(5000);
        led1_off();
        delay_ms(5000);
        led2_on();
        delay_ms(5000);
        led2_off();
        delay_ms(5000);
        led3_on();
        delay_ms(5000);
        led3_off();
        delay_ms(5000);

    }
    return 0;
}                                                
                                                 
                                                 
                                                 
                                                 
                                                 

 功能测试结果:LED1、2、3三个灯循环亮灭

 

 

 

你可能感兴趣的:(ARM,单片机,c语言,c++)