MSP430实现计时器的源代码

发布者:石头上种庄稼最新更新时间:2020-07-25 来源: 51hei关键字:MSP430  计时器  初值 手机看文章 扫描二维码
随时随地手机看文章

和上一篇文章一样,用到了 TM1638。计时器初值设为 23:57:45,计时到 23:59:59 时重置为 0点 0分 0秒。


(和上次的定时器一样,主函数中的delay是我自己写的,是为了便于调试,并没有真正起到延时1s的作用)

源の代码:

#include "TM1638.h"
#include "msp430f6638.h"
#include "stdint.h"

uint8_t num[8];    //各个数码管显示的值
uint8_t led_flag[8];
const uint8_t tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x00};

void init_port(void) {
    P3DIR |= BIT5;
    P3DIR |= BIT4 + BIT2;

    P1DIR |= BIT0;    // ACLK set out to pins
    P1SEL |= BIT0;

}

const uint8_t tab2[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

void TM1638_Write(unsigned char DATA) {    //写数据函数
    unsigned char i;
    DIO_OUT;
    for(i=0;i<8;i++) {
      CLK_low;
      if(DATA & 0x01)
          DIO_high;
      else
          DIO_low;
      CLK_high;
      DATA >>= 1;
    }
}

unsigned char TM1638_Read(void) {    //读数据函数
    unsigned char i;
    unsigned char temp=0;
    DIO_IN;
    STB_low;
    for(i=0;i<8;i++) {
          temp >>= 1;
          CLK_low;
          _delay_us(100);
          if(DIO_READ)
              temp |= 0x80;
          else
              temp &= 0x7f;
          CLK_high;
    }
    return temp;
}

void Write_COM(unsigned char cmd) {    //发送命令字
    CLK_high;
    STB_high;
    STB_low;
    TM1638_Write(cmd);
    STB_high;
}



void Write_DATA(unsigned char add,unsigned char DATA) {    //指定地址写入数据
    Write_COM(0x44);
    STB_low;
    TM1638_Write(0xc0|add);
    TM1638_Write(DATA);
    STB_high;
}

void init_TM1638(void) {
    unsigned char count = 0;
    unsigned char times = 1;
    while(times--) {
        Write_allLED(tab2[count]);
        count++;
        if(count == 16)
            count = 0;
        _delay_ms(100);
    }
    Write_allLED(0xff);
    _delay_ms(100);
    Write_allLED(0);
}

void delay() {
    for (int i=0; i<10; i++)
      for (int j=0; j<1000; j++);
}


void Write_allLED(unsigned char DATA) {
    unsigned char i;
    Write_COM(0x8F);//显示控制
    Write_COM(0x40); //数据命令
    STB_low;
    TM1638_Write(0xc0);
    for(i=0;i<16;i++)
    TM1638_Write(DATA);
    STB_high;
}


void main(void) {

    WDTCTL = WDTPW+WDTHOLD;
    init_port();
    init_TM1638();
        
    int hourA = 2;
    int hourB = 3;
    int minuteA = 5;
    int minuteB = 7;
    int secondA = 4;
    int secondB = 5;
        
    while(1) {
        secondB++;
        if(secondB == 10) {
            secondB = 0;
            secondA++;
            if(secondA == 6) {
                secondA = 0;
                minuteB++;
                if(minuteB == 10) {
                    minuteB = 0;
                    minuteA++;
                    if(minuteA == 6) {
                        minuteA = 0;
                        hourB++;
                        if(hourB == 10) {
                            hourB = 0;
                            hourA++;
                        }
                        if(hourA == 2 && hourB == 4) {
                            hourA = 0;
                            hourB = 0;
                        }
                    }
                }
            }
        }

        Write_DATA(4*2,tab[hourA]);
        Write_DATA(5*2,tab[hourB]);
        Write_DATA(6*2,tab[15]);
        Write_DATA(7*2,tab[minuteA]);
        Write_DATA(0*2,tab[minuteB]);
        Write_DATA(1*2,tab[15]);
        Write_DATA(2*2,tab[secondA]);
        Write_DATA(3*2,tab[secondB]);

        delay();

    }
   
}

关键字:MSP430  计时器  初值 引用地址:MSP430实现计时器的源代码

上一篇:MSP430f5529之PWM控制舵机程序
下一篇:MSP430单片机AD9851 AD9850源码

推荐阅读最新更新时间:2024-11-13 06:08

单片机 脉搏心率检测 MSP430G2553 Pulse Sensor 红外对射
红外对射方法+Pulse Sensor方法总结 刚开始用的红外对射做的: 功能: //硬件组成: //MSP430G2553单片机+DS18B20温度传感器+OLED显示器+脉搏测量电路(带灯)+蜂鸣器报警+按键设置 // //功能: //(1)OLED显示器主页显示脉搏、手指温度、报警上限、报警下限; //(2)五个按键:按键一:切换设置上限和设置下限; // 按键二:保存一次脉搏值,一共可以存十次,存新的自动清除最旧的数据; // 按键三:查看存的脉搏数值; // 按键四:设置的时候加数值功能,查看存储的时候上翻页功能; //
[单片机]
单片机 脉搏心率检测 <font color='red'>MSP430</font>G2553 Pulse Sensor 红外对射
MSP430单片机定时器学习笔记
_BIS_SR(LPM2_bits + GIE) //进入LPM3低功耗模式和开总中断允许 中断 #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A(void) { } TACTL timerA控制寄存器 TAR timerA计数器 CCTL0 捕获/比较控制寄存器0 CCRO 捕获/比寄存器0(具有最高中断优先级别,单独使用一个中断向量) CCTL1 捕获/比较寄存器1 CCR1 捕获/比较寄存器1 CCTL2 捕获/比较寄存器2 CCR2 捕获/比较寄存器2 TAIV 中断向量寄存器 其中,定时器,CCR2,CCR1三者共用一个中
[单片机]
MSP430之八路ADC单次采集的程序
本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC12SC置位一次就可以,但是就需要注意当进入中断后如果不手动禁止中断会一直停留在循环中,因此在采集到需要的数据后需要将ADC关闭或者中断使能禁止才能重新回到主函数,这一点需要注意。   八路单次采集的程序如下:   [cpp] view plain copy/***************************************   八路AD多路单次采集基亚5110液晶显示   采集模式:多路单次   
[单片机]
MSP430FR6989系列教程 -- 第二章 系统时钟
1,系统时钟源的种类 MSP430FR6989有五个时钟源,分别如下: LFXTCLK:低频振荡器,例如32.768kHz晶振。可以通过软件配置由外部方波信号驱动。 HFXTCLK:高频振荡器, 4 MHz - 24 MHz 范围内晶振使用。可以通过软件配置由外部方波信号驱动。 DCOCLK:具有可选频率的内部数控振荡器 (DCO) VLOCLK:典型频率为 10 kHz 的内部超低功耗低频振荡器 MODCLK:典型频率为 5 MHz 的内部低功耗振荡器。 大家可以根据项目的需求配置时钟源,在LaunchPad开发板中外部时钟使用LFXTCLK外接32.768k的晶振,原理图如下: 2,系统时钟信号 对
[单片机]
<font color='red'>MSP430</font>FR6989系列教程 -- 第二章 系统时钟
MSP430单片机之RTC-实时时钟
  RTC-Real Time Clock是430单片机的实时时钟模块,可以配置成实时时钟模式(万年历)或者一般目的的32位计数器模式,其中实时时钟模式提供了年月日、时分秒,可以选择BCD码或者二进制格式,并且具有可编程的闹钟。RTC模块支持中断。相关寄存器请参阅430系列单片机user's guide(我用的是5438A)。   1.计数器模式   实时时钟控制器寄存器1 RTCMODE位被重置时,计数器模式被选择,通过软件设置可以得到一个32位的计数器。从时钟模式切换到计数器模式是通过重置计数值:RTCNT1、RTCNT2、RTCNT3、RTCNT4 和 预换算计数器:RT0PS、RT1PS。   计数器的增量计数器来
[单片机]
MSP430F2274 LCD1602显示模块
/********************************************************************************************************** * 功能: 实现LCD1602显示 Welcome to! 字符 * * 描述: LCD1602三根控制引脚由NPN三极管反向控制,D0~D7直接与MSP430相连接 * * 禁止 LCD1602读操作.三极管C极接LCD三根控制引接,三极管E极接地,三 * * 极管B极由口线控制.如此实现 3V 反向控制 5V.
[单片机]
Ubuntu 下TinyOS msp430 Toolchain mspgcc升级
目前,TinyOS官网发布的TinyOS2.1.1,其内部支持的mspgcc还是老版本3.2.3,对于TI 430系列高端单片机都不支持,支持的也仅为msp430x1611等低端系列。为了把TinyOS移植到更高端的单片机上,比如msp430f2618,就必须升级MSP Toolchain。 Sourceforge上已经更新了最新版本的mspgcc4,这个本版全面的支持TI 430全系列,最新支持GCC版本为4.4.3 ,支持GDB本版为7.0.1,Insight最新版本为6.8-1。更多的性能改进可以参考http://mspgcc4.sourceforge.net/。 首先,安装必要的软件包,这些可以使用debian的a
[单片机]
MSP430系统时钟寄存器详解
1、时钟源说明 ACLK辅助时钟:ACLK是LFXT1CLK(低频时钟源)信号经过1、2、4、8分频得到的。ACLK可由软件选为各个外围模块的时钟信号,一般用于低速外设。 MCLK系统主时钟:MCLK可由软件选择来自LFXT1CLK(低频时钟源)、XT2CLK(高频时钟源)、DCOCLK(数字控制RC振荡器)三者之一,然后经过1、2、4、8分频得到。MCLK主要用于CPU和系统。 SMCLK子系统时钟:可由软件选择来自LFXT1CLK(低频时钟源)和DCOCLK(数字控制RC振荡器),或者、XT2CLK(高频时钟源)和DCOCLK(数字控制RC振荡器)具体由器件决定,,然后经过1、2、4、8分频得到。SMCLK主要用于
[单片机]
<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