LM3S1138入门2,跑马灯

发布者:徽宗古泉最新更新时间:2016-11-01 来源: eefocus关键字:LM3S1138入门  跑马灯 手机看文章 扫描二维码
随时随地手机看文章
很简单了哈,这里不罗嗦了。

LED.h头文件

#ifndef  _LED_H_
#define  _LED_H_


//  定义LED名称
#define  LED1       0x01
#define  LED2       0x02
#define  LED3       0x04


//  初始化指定的LED
extern  void  LED_Init(unsigned char  ucLED);


//  点亮指定的LED
extern  void  LED_On(unsigned char  ucLED);


//  熄灭指定的LED
extern  void  LED_Off(unsigned char  ucLED);


//  反转指定的LED
extern  void  LED_Toggle(unsigned char  ucLED);


#endif  //  _LED_H_

LED.c文件:

//  包含必要的头文件
#include  "LED.H"
#include 
#include 
#include 
#include 
#include 
#include 


//  将较长的标识符定义成较短的形式
#define  SysCtlPeriEnable       SysCtlPeripheralEnable
#define  SysCtlPeriDisable      SysCtlPeripheralDisable
#define  GPIOPinTypeOut         GPIOPinTypeGPIOOutput


/***************************************************************************************************
功能:初始化指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
            LED1
            LED2
            LED3
返回:无
***************************************************************************************************/
void  LED_Init(unsigned char  ucLED)
{
    if ( ucLED & LED1 )
    {
        SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD);                  //  使能GPIOD端口
        GPIOPinTypeOut(GPIO_PORTD_BASE , GPIO_PIN_0);           //  设置PD0为输入类型
        LED_Off(LED1);                                          //  熄灭LED1
    }

    if ( ucLED & LED2 )
    {
        SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG);                  //  使能GPIOG端口
        GPIOPinTypeOut(GPIO_PORTG_BASE , GPIO_PIN_2);           //  设置PG2输入类型
        LED_Off(LED2);                                          //  熄灭LED2
    }

    if ( ucLED & LED3 )
    {
        SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG);                  //  使能GPIOG端口
        GPIOPinTypeOut(GPIO_PORTG_BASE , GPIO_PIN_3);           //  设置PG3输入类型
        LED_Off(LED3);                                          //  熄灭LED3
    }
}


/***************************************************************************************************
功能:点亮指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
            LED1
            LED2
            LED3
返回:无
***************************************************************************************************/
void  LED_On(unsigned char  ucLED)
{
    if ( ucLED & LED1 )
    {
        GPIOPinWrite(GPIO_PORTD_BASE , GPIO_PIN_0 , 0x00);      //  PD0输出低电平
    }

    if ( ucLED & LED2 )
    {
        GPIOPinWrite(GPIO_PORTG_BASE , GPIO_PIN_2 , 0x00);      //  PG2输出低电平
    }

    if ( ucLED & LED3 )
    {
        GPIOPinWrite(GPIO_PORTG_BASE , GPIO_PIN_3 , 0x00);      //  PG3输出低电平
    }
}


/***************************************************************************************************
功能:熄灭指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
            LED1
            LED2
            LED3
返回:无
***************************************************************************************************/
void  LED_Off(unsigned char  ucLED)
{
    if ( ucLED & LED1 )
    {
        GPIOPinWrite(GPIO_PORTD_BASE , GPIO_PIN_0 , 0x01);          //  PD0输出高电平
    }

    if ( ucLED & LED2 )
    {
        GPIOPinWrite(GPIO_PORTG_BASE , GPIO_PIN_2 , 0x01 << 2);     //  PG2输出高电平
    }

    if ( ucLED & LED3 )
    {
        GPIOPinWrite(GPIO_PORTG_BASE , GPIO_PIN_3 , 0x01 << 3);     //  PG3输出高电平
    }
}


/***************************************************************************************************
功能:反转指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
            LED1
            LED2
            LED3
返回:无
***************************************************************************************************/
void  LED_Toggle(unsigned char  ucLED)
{
    unsigned char  ucVal;

    if ( ucLED & LED1 )
    {
        ucVal   =  GPIOPinRead(GPIO_PORTD_BASE , GPIO_PIN_0);   //  读取PD0的输出状态
        ucVal  ^=  0x01;                                        //  状态反转
        GPIOPinWrite(GPIO_PORTD_BASE , GPIO_PIN_0 , ucVal);     //  更新PD0的输出状态
    }

    if ( ucLED & LED2 )
    {
        ucVal   =  GPIOPinRead(GPIO_PORTG_BASE , GPIO_PIN_2);   //  读取PG2的输出状态
        ucVal  ^=  0x01 << 2;                                   //  状态反转
        GPIOPinWrite(GPIO_PORTG_BASE , GPIO_PIN_2 , ucVal);     //  更新PG2的输出状态
    }

    if ( ucLED & LED3 )
    {
        ucVal   =  GPIOPinRead(GPIO_PORTG_BASE , GPIO_PIN_3);   //  读取PG3的输出状态
        ucVal  ^=  0x01 << 3;                                   //  状态反转
        GPIOPinWrite(GPIO_PORTG_BASE , GPIO_PIN_3 , ucVal);     //  更新PG3的输出状态
    }
}

主函数main.c

//  基于《Stellaris外设驱动库》的例程:两只LED交替闪烁


//  包含必要的头文件
#include  "LED.H"
#include 
#include 
#include 
#include 
#include 
#include 


//  将较长的标识符定义成较短的形式
#define  SysCtlPeriEnable       SysCtlPeripheralEnable
#define  SysCtlPeriDisable      SysCtlPeripheralDisable
#define  GPIOPinTypeIn          GPIOPinTypeGPIOInput
#define  GPIOPinTypeOut         GPIOPinTypeGPIOOutput


//  定义KEY
#define  KEY_PERIPH             SYSCTL_PERIPH_GPIOG
#define  KEY_PORT               GPIO_PORTG_BASE
#define  KEY_PIN                GPIO_PIN_5


//  防止JTAG失效
void  JTAG_Wait(void)
{
    SysCtlPeriEnable(KEY_PERIPH);                               //  使能KEY所在的GPIO端口
    GPIOPinTypeIn(KEY_PORT , KEY_PIN);                          //  设置KEY所在管脚为输入

    if ( GPIOPinRead(KEY_PORT , KEY_PIN)  ==  0x00 )            //  如果复位时按下KEY,则进入
    {
        for (;;);                                               //  死循环,以等待JTAG连接
    }

    SysCtlPeriDisable(KEY_PERIPH);                              //  禁止KEY所在的GPIO端口
}


//  定义全局的系统时钟变量
unsigned long  TheSysClock  =  12000000UL;


//  延时
void  Delay(unsigned long  ulVal)
{
    while ( --ulVal  !=  0 );
}


//  系统初始化
void  SystemInit(void)
{
    SysCtlLDOSet(SYSCTL_LDO_2_50V);                             //  设置LDO输出电压

    SysCtlClockSet(SYSCTL_USE_OSC |                             //  系统时钟设置,采用主振荡器
                   SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_6MHZ |
                   SYSCTL_SYSDIV_1);

/*
    SysCtlLDOSet(SYSCTL_LDO_2_75V);                             //  配置PLL前将LDO电压设置为2.75V

    SysCtlClockSet(SYSCTL_USE_PLL |                             //  系统时钟设置,采用PLL
                   SYSCTL_OSC_MAIN |                            //  主振荡器
                   SYSCTL_XTAL_6MHZ |                           //  外接6MHz晶振
                   SYSCTL_SYSDIV_10);                           //  分频结果为20MHz
*/

    TheSysClock  =  SysCtlClockGet();                           //  获取系统时钟,单位:Hz

    LED_Init(LED1 | LED2|LED3);                                      //  初始化LED1和LED2
}


//  主函数(程序入口)
int  main(void)
{
    JTAG_Wait();                                                //  防止JTAG失效,重要!

    SystemInit();                                               //  系统初始化

    for (;;)
    {
        LED_On(LED1);
        Delay(200 * (TheSysClock / 4000));                      //  延时约200ms
        LED_Off(LED1);
        LED_On(LED2);
        Delay(200 * (TheSysClock / 4000));                      //  延时约200ms
        LED_Off(LED2);
        LED_On(LED3);
        Delay(200 * (TheSysClock / 4000));                      //  延时约200ms
        LED_Off(LED3);
    }
}

关键字:LM3S1138入门  跑马灯 引用地址:LM3S1138入门2,跑马灯

上一篇:LM3S1138入门3,中断
下一篇:LM3S1138入门1 LED

推荐阅读最新更新时间:2024-03-16 15:18

第23节:独立按键控制跑马灯的速度
开场白: 上一节讲了独立按键控制跑马灯的方向。这一节继续要教会大家一个知识点:如何通过一个中间变量把按键跟跑马灯的速度有效关联起来。 具体内容,请看源代码讲解。 (1)硬件平台:基于朱兆祺51单片机学习板。在上一节的基础上,增加一个加速按键和一个减速按键,用矩阵键盘中的S5键作为加速独立按键,用矩阵键盘中的S9键作为减速独立按键,记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。 (2)实现功能: 在上一节的基础上,第1个至第8个LED灯一直不亮。在第9个至第16个LED灯,依次逐个亮灯并且每次只能亮一个灯。每按一次独立按键S5,速度都会加快。每按一次独立按键S9,速度都会减慢。跟上一节一样,用S1来改变方向。
[单片机]
STM32F407-跑马灯
硬件准备(STM32F407ZGT6) 1.初始准备 1.1打开Template模板,在工程目录下新建HARDWARE文件夹 1.2 新建在HARDWARE路径中新建led.c , led.h两个文件,在工程中新建HARDWARE Groups,并将led.c添加进去,将led.h添加进头文件目录中。 1.3硬件连接 2.程序编写 2.1 库函数 头文件:stm32f4xx_gpio.h 源文件:stm32f4xx_gpio.c 1个初始化函数: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct
[单片机]
STM32F407-<font color='red'>跑马灯</font>
第22节:独立按键控制跑马灯的方向
开场白: 上一节讲了多任务并行处理两路跑马灯的程序。这一节要教会大家一个知识点:如何通过一个中间变量把按键跟跑马灯的任务有效的关联起来。 具体内容,请看源代码讲解。 (1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1键作为改变方向的独立按键,记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。 (2)实现功能: 第1个至第8个LED灯一直不亮。在第9个至第16个LED灯,依次逐个亮灯并且每次只能亮一个灯。按一次独立按键S1,将会更改跑马灯的运动方向。 (3)源代码讲解如下: #include REG52.H #define const_time_level_09_16 300 //第9个至第16
[单片机]
MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置
这个例子主要还是熟悉有关定时器A的寄存器配置以及IAR的配置方式。 /*********************************************** 程序功能:实现流水灯以三种流动方式和四种流动速度 的不同组合而进行点亮 流动 ------------------------------------------------ 拨码开关设置:将LED位拨至ON,其余拨至OFF 测试说明:观察流水灯流动顺序和速度的变化 ************************************************/ #include msp430x14x.h typedef unsigned int u
[单片机]
LM3S1138入门3,中断
是两个按键分别控制LED灯的亮和灭。程序很简单,其中LED.C在这里不粘贴了,只把主程序列出来。 // 包含必要的头文件 #include LED.H #include hw_types.h #include hw_memmap.h #include hw_ints.h #include hw_sysctl.h #include hw_gpio.h #include interrupt.h #include sysctl.h #include gpio.h // 将较长的标识符定义成较短的形式 #define SysCtlPeriEnable SysCtlPeripheralEnable
[单片机]
ZigBee-CC2530单片机 - 按键控制跑马灯的启停
程序源码 #include ioCC2530.h //引用CC2530头文件 #define LED1 (P1_0) //LED1端口宏定义 #define LED2 (P1_1) //LED1端口宏定义 unsigned char flag_Pause=0; //流水灯运行标志位,为1暂停,为0运行。 /************************************************************** 函数名称:delay 功 能:软件延时 入口参数:time--延时循环执行次数 出口参数:无 返 回 值:无 ************************************
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved