MSP430之点灯入门

/***************************************************
程序功能:控制8个LED闪烁,控制灯的流向以及流速
---------------------------------------------------
***************************************************/
#include<msp430x14x.h>

/*下面关闭所有的IO口*/
#define close_IO P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF;P3DIR = 0XFF;P3OUT = 0XFF;P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF;    P6DIR = 0XFF;P6OUT = 0XFF;

typedef unsigned int  uint;

uint i = 0,j = 0,dir = 0;
uint flag = 0,speed = 0;  //flag--灯光流动方式,speed--灯光流动速度

/****************主函数****************/
void main(void)
{
    void P_setting();
    close_IO;
    P_setting();
    _EINT();                        //使能全局中断
    LPM0;                           //CPU进入LPM0模式
}
/*将设置进行封装*/
void P_setting(void){
 
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    P6DIR |= BIT2;P6OUT |= BIT2;    //关闭电平转换
    P5OUT &= ~BIT7;
    CCTL0 = CCIE;                   //使能CCR0中断
    CCR0 = 50000;
    
    TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式
    P2DIR = 0xff;                   //设置P2口方向为输出
    P2OUT = 0xff;
    
    }

/*******************************************
函数名称:Timer_A
功    能:定时器A的中断服务函数,在这里通过标志
          控制流水灯的流动方向和流动速度
********************************************/

#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
    if(flag == 0)
    {
        P2OUT = ~(0x80>>(i++));    //灯的点亮顺序D8 -> D1
    }
    else if(flag == 1)
    {
        P2OUT = ~(0x01<<(i++));    //灯的点亮顺序D1 -> D8
    }
    else
    {
        if(dir)                   //灯的点亮顺序  D8 -> D1,D1 -> D8,循环绕圈                        
        {
            P2OUT = ~(0x80>>(i++));
        }
        else
        {
            P2OUT = ~(0x01<<(i++));
        }
    }
 
    if(i == 8)
    {
        i = 0;
        dir = ~dir;
    }
 
    j++;
    if(j == 40)
    {
        i = 0;
        j = 0;
        flag++;
        if(flag == 4) flag = 0;
        switch(speed)
        {
        case 0:
            TACTL &=~ (ID0 + ID1);    //增计数模式
            TACTL |= ID_3;            //8分频
            break;
        case 1:
            TACTL &=~ (ID0 + ID1);
            TACTL |= ID_2;              //4分频
            break;
        case 2:
            TACTL &=~ (ID0 + ID1);
            TACTL |= ID_1;               //2分频
            break;
        case 3:
            TACTL &=~ (ID0 + ID1);
            TACTL |= ID_0;              //1分频
            break;
        default:
            break;
        }
        if(flag != 3)   speed++;
        if(speed == 4) speed = 0;
    }
}

《经过测试适用于f149系列》

时间: 2024-08-10 15:07:22

MSP430之点灯入门的相关文章

msp430入门编程05

msp430中C语言的运算符和表达式 msp430中C语言的程序结构06 msp430中C语言的函数及实现07 msp430中C语言操作端口I/O10 msp430中C语言的模块化头文件及实现11 msp430中C语言的模块化头文件及库文件12 msp430入门学习 msp430入门编程

ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序

Mini6410上最简单的LED点灯裸机程序 : 实验环境: 根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个SecureCRT代替超级终端. 一定要,把AXD也设置上. secureCRT的配置:选择Serial串口,波特率115200,端口号:USB转串(去驱动程序查端口号,今天插了一个COM4,一个COM5) 实验步骤: 配置好了以后,打开CodeWarrior编译mini6410-led.bin文件

MSP430入门程序之(02)WDT(看门狗模式)

#include "in430.h"#include "io430x14x.h"//定义使用主频#define CPU_F ((double)8000000) //定义延时函数#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))#define _EI

MSP430入门程序之(01)时钟与延时

//芯片MSP430F149#include "io430.h"//定义使用主频#define CPU_F ((double)8000000) //定义延时函数#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) void main( void ){ unsigned

(1)MSP430F5529学习入门

为想学MSP430单片机的初学者,或者,你是刚转到电子硬件嵌入式开发,如果你的电子基础课程已经完成,想尽快掌握MSP430单片机,又纠结于怎样尽快闯入MSP430学习过程的问题,现总结整理出新手开始学习MSP430的一些问题,和学习中有关注意事项和方法. 供有心学习MSP430单片机的童鞋参考吧. 当然,闯入MSP430学习,你需要有一些单片机的理论基础,和比较强的C语言功底,学习MSP430单片机最好的方法是文武并进:“文”指学好片内模块的资源知识:“武”则指动手能能力.基础知识+动手实操,是

MSP430单片机学习视频

MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗.具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor). MSP430单片机称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路.数字电路模块和微处理器集成在一个芯片上,以提供"单片机"解决方案.该系列单片机多应用于需要电池供电的便携式仪器仪表中.       与51单片机相比较,430单片机的视频教程要少得多,主要有以下几种: 1.郭天祥&q

「ZigBee模块」组网实验-无线点灯

ZigBee入门小实验——无线点灯 写在前面:无线点灯实验不涉及协议栈,只是对Basic RF的应用,但是其中关于数据收发的思想和协议栈类似,可以借鉴.这个代码和实验过程都是参考某教程的,然后有加上自己的理解......欢迎纠错(*^__^*) 一.设备 两个ZigBee模块 一个方口USB线(这个只是供电用,要看自己模块用什么接口,不一定是方口的,用电池也行) 一个编译器 二.几个名词解释 CCM -Counter with CBC-MAC(mode of operation) 就知道和加密有

【Espruino】NO.03 从点灯开始

点灯程序应该是每个入门者都经历过的第一个程序吧,当然"hello world"算是鼻祖了.看到板子上的LED小灯亮灭变化,心里应该充满了幸福感,对于新手来说额,大侠就更不用多说了,一天一小步,慢慢积累. 板载的LED使用了A13.A14.A15三个I/O引脚: 根据图示,当I/O输出高电平时,LED亮:反之,LED灭:此刻高电平为3.3V,低电平为0,因为是数字方式驱动. 这里要介绍一个函数digitalWrite(),函数原型如下: 描述:设置给定引脚的高低状态,无返回值: func

msp430项目编程30

msp430中项目---电压检测系统 1.SVS工作原理 2.电路工作原理 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习 msp430中项目---无线通信系统31 1.SPI工作原理 2.nrf24l01工作原理 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430中项目---电阻测量系统32                  Ad 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结 msp430中