初步学习MSP430——跑马灯

发布者:Yaqi最新更新时间:2020-02-24 来源: eefocus关键字:初步学习  MSP430  跑马灯 手机看文章 扫描二维码
随时随地手机看文章

/***********************************************

程序功能:实现流水灯以三种流动方式和四种流动速度

          的不同组合而进行点亮"流动"

------------------------------------------------

拨码开关设置:将LED位拨至ON,其余拨至OFF

测试说明:观察流水灯流动顺序和速度的变化

************************************************/

#include 


typedef unsigned int  uint;


uint i = 0,j = 0,dir = 0;

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


/****************主函数****************/

void main(void)

{

  

    /*下面六行程序关闭所有的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;

  

    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;

 

    _EINT();                        //使能全局中断

    LPM0;                           //CPU进入LPM0模式

}


/*******************************************

函数名称: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;

            break;

        case 1:

            TACTL &=~ (ID0 + ID1);

            TACTL |= ID_2;

            break;

        case 2:

            TACTL &=~ (ID0 + ID1);

            TACTL |= ID_1;

            break;

        case 3:

            TACTL &=~ (ID0 + ID1);

            TACTL |= ID_0;

            break;

        default:

            break;

        }

        if(flag != 3)   speed++;

        if(speed == 4) speed = 0;

    } 

}


关键字:初步学习  MSP430  跑马灯 引用地址:初步学习MSP430——跑马灯

上一篇:LCD1602动态显示--基于MSP430F149单片机
下一篇:初学MSP430——按键中断控制小灯翻转

推荐阅读最新更新时间:2024-11-09 12:41

MSP430 flash写入(三)
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above c
[单片机]
基于MSP430F5529的三种点灯方式(基本、定时、外部中断)
前言 好久没有更新一下MSP430F5529的博文了,发觉看的人有点少了,而且前段时间又因为电赛停了,就回归STM32f1的怀抱,毕竟32位的确实比16位的好,而且就用户而言,STM32肯定更占优势······今天就再次回归MSP430的怀抱,那么接下来就会先从基础的使用讲起,这里先是讲用三种方式来点亮LED。 一、msp430f5529三种点灯方式 在MSP430f5529中对于LED灯,均是高电平触发,输入高电平后就点亮,输入低电平就熄灭,这个不同于51和STM32,这是比较基础的。那么接下来就主要用三种方式让你快速点灯。 1、基本方式 基本方式就是直接设置一个延时,然后令它循环1点亮,这里我们点亮LED1(P1.
[单片机]
基于<font color='red'>MSP430</font>F5529的三种点灯方式(基本、定时、外部中断)
MSP430F149 反应速度测试仪 oled 显示
/*********************************** 利用MSP430设计一款“反应速度测试仪” 在P2.3口接有一高亮度LED(低电平点亮) P2.3口接有一按键(低电平表示按下)。 要求受试者在看到红灯亮后立即按键。 测量从亮灯到按键之间的时间并显示出来,就是受试者的反应时间 ***********************************/ #include msp430x14x.h #include iic.h //使用系统自带延时 #define CPU_F ((double)1000000) #define delay_ms(x) __delay_cycles((long)(CPU_F*
[单片机]
<font color='red'>MSP430</font>F149 反应速度测试仪 oled 显示
MSP430(0.96OLED)
文件font.h // font.h var foo = 'bar'; // An highlighted block /* * font.h * * Created on: 2021年6月28日 * Author: Duck */ #ifndef FONT_H_ #define FONT_H_ const unsigned char F6x8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// 0
[单片机]
MSP4305xx/6xx系列 低频振荡器REFO编程实例
MSP430 5x6x系列内部校准的低频REFO可用于成本敏感的应用场合,可以省去外部晶体。REFO内部校准为32.768kHz,可提供一个稳定的参考频率。 REFO可作为FLL的频率输入源使用。REFO与FLL相结合,提供了一个灵活的系统时钟设置范围,而不需要晶体。REFO不使用时不消耗电力。 本实例示范如何使用REFO,并将其作为ACLK SMLK MCLK时钟来使用,通过将此三个时钟输出到特定的管脚,便于示波器测量验证。 工程介绍: MCU型号: MSP430F6736A 编译平台: IAR for MSP430 6.40.1 实验项目: 测试 MCU 内部时钟 REFOCLK ,选择 REFOCLK
[单片机]
<font color='red'>MSP430</font>5xx/6xx系列 低频振荡器REFO编程实例
FPGA&MSP430实现等精度频率计
前段时间依次实现了FPGA的等精度频率计和FPGA与430的通信测试。 FPGA频率计:Verilog设计练习 基于FPGA的等精度频率计_Krism0912的博客-CSDN博客_用verilog设计等精度频率计 FPGA与430通信测试: FPGA与MSP430G2553通信 UART串口操作_Krism0912的博客-CSDN博客 由于FPGA中对数据运算过于麻烦,所以此次将上述两个成果进行了整合,将FPGA的数据通过串口传至MSP430后再进行运算。 在整合过程中碰到的一个百思不得其解的问题:串口测试中发现传输过去的Nx的值总是理论值的2倍。花了几个小时才最终弄清楚原因,下面稍做记录。 错误出现在FP
[单片机]
FPGA&<font color='red'>MSP430</font>实现等精度频率计
MSP430第二十五章:32位乘法器
1. 32位乘法器(MPY32)介绍 MPY32是不属于CPU的外围模块,这意味着它的活动不会影响CPU活动。乘法器寄存器是外围寄存器,用CPU指令加载和读取。 MPY32支持: 无符号乘法 有符号乘法 累计无符号乘法 累计有符号乘法 8、16、24、32位运算 分数运算 8位和16位操作兼容16位硬件乘法器 不需要“符号扩展”指令的8位和24位乘法 2. MPY32操作 MPY32支持8位、16位、24位和32位操作数进行无符号乘、有符号乘、无符号乘累积和有符号乘累积操作。操作数的大小由操作数被写入的地址以及是否以字或字节的形式写入来定义。操作的类型是根据第一个操作数写入的地址来选择的。硬件乘法器有两个32位的操作数
[单片机]
<font color='red'>MSP430</font>第二十五章:32位乘法器
MSP430寻址模式
MSP430的CPU支持7种源寻址和4种目的寻址 1.寄存器模式 可利用寄存器的8、16和20位,长度为1、2或者3个字长。 Byte操作:读源寄存器的低8位,然后将其写入目的寄存器对应的低8位,目的寄存器的8:19位会被清空而源寄存器不受影响; Word操作:读源寄存器的低16位,然后将其写入目的寄存器对应的低16位,目的寄存器的17:19位会被清空而源寄存器不受影响; Address-word操作:读源寄存器的所有位,然后将其写入目的寄存器对应的位; SXT例外:SXT是寄存器操作的唯一例外,这条指令将源寄存器的第7位符号拓展到目的寄存器的高8位,也就是8:19位
[单片机]
<font color='red'>MSP430</font>寻址模式
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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