This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【MSP430 LaunchPad设计心得】+简易电子钟

Other Parts Discussed in Thread: MSP430G2553

发一个简单点的,供初学的孩子使用。

芯片用的是g2553,LCD1602显示,整分的时候显示温度。直接放代码了哈。

/******************************************************************
  File Name :  Launchpad g2553 LCD1602液晶测试程序
  Frequency : 1.000000MHz
  Time  : 2011/08/13  18:16
  Modify Time   :       2012/04/29
  Author : Fuwei
******************************************************************/

#include "msp430g2553.h"

#define uchar unsigned char
#define uint unsigned int

extern void Initialize_LCD();
extern void LCD_ShowString(uchar x, uchar y, char *str);
extern void LCD_ShowChar(uchar x, uchar y, char c);

char hour = 20, minute = 6, second = 0;
char hour1, hour0, minute1, minute0, second1, second0;

long temp;
long IntDegC;
char Temp2, Temp1, Temp0;

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
 
  //液晶显示端口初始化
  P2DIR |= 0x07;
  TACTL = TASSEL_1 + MC_2 + TAIE;           // ACLK, contmode, interrupt
 
  _EINT();
  
  for(;;)
  {
    ADC10CTL1 = INCH_10 + ADC10SC;    // Temp Sensor ADC10CLK
    ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON;
    __delay_cycles(5);                // Wait for Ref to settle
    ADC10CTL0 |= ENC + ADC10SC;       // Samp and convert start
    __delay_cycles(100);              // Wait for conversion
    ADC10CTL0 &= ~ENC;                // Disable ADC conversion
    ADC10CTL0 &= ~(REFON + ADC10ON);  // Ref and ADC10 off

    // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
    temp = ADC10MEM;
    IntDegC = ((temp - 673) * 4230) / 1024;
    Temp2 = IntDegC % 1000 / 100;
    Temp1 = IntDegC % 100 / 10;
    Temp0 = IntDegC % 10;
        
    __delay_cycles(1000000);           // delay 1 second
  }
}

// Timer_A3 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
{
  switch( TA0IV )
  {
  case  2: break;
  case  4: break;                         
  case 10:
          second += 2;
         
          if((hour >= 23) && (minute >= 59) && (second >= 59))
            hour = 0;
         
          if((minute >= 59) && (second >= 59))
          {
            minute = 0;
            hour++;
          }
         
          if(second >= 59)
          {
            second = 0;
            minute++;
            Initialize_LCD();
            LCD_ShowString(0, 0, "Temperature:");
            LCD_ShowString(8, 1, ". 'C"); 
            LCD_ShowChar(6, 1, Temp2 + '0');
            LCD_ShowChar(7, 1, Temp1 + '0');
            LCD_ShowChar(9, 1, Temp0 + '0');
          }
          else
          {
            second1 = second / 10;
            second0 = second % 10;
            minute1 = minute / 10;
            minute0 = minute % 10;
            hour1 = hour / 10;
            hour0 = hour % 10;
           
            Initialize_LCD();
            LCD_ShowString(0, 0, "Time :");
            LCD_ShowString(4, 1, ":  :");
           
            LCD_ShowChar(2, 1, hour1 + '0');
            LCD_ShowChar(3, 1, hour0 + '0');
            LCD_ShowChar(5, 1, minute1 + '0');
            LCD_ShowChar(6, 1, minute0 + '0');
            LCD_ShowChar(8, 1, second1 + '0');
            LCD_ShowChar(9, 1, second0 + '0');
          }
          break;
  }
}