⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 MSP430系列 RTC源程序下载 使用430实现闹钟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
      nao_hour--;                                                   // 闹钟小时减减
      if(nao_hour == 0xff)                                             // 闹钟小时是否等于0
        nao_hour = 23;                                              // 闹钟小时等于24                                                         
    }
  }
  if((key_code == 0x02) && (function_flag == 0))                    // 没有功能键按下时
  {
    clock_flag = 2;                                                 // 清除闹钟标志位
    flag = 1;                                                       // 换屏标志位被按下
    if(num_flag == 1)                                               // 换屏位1
     ping_flag = 1;
    if(num_flag == 2)                                               // 换屏位2
     ping_flag = 2;
    if(num_flag == 3)                                               // 换屏位3
     ping_flag = 3;
  }
  if((key_code == 0x04) && (function_flag == 0))                    
  {
    clock_flag = 2;                                                 // 清除闹钟标志位
  }
  key_code = 0;                                                     // 键值清零
}
/**************************************************
** 函数名称:闰年判断函数
** 工作环境: IAR 3.42A 
** 作者:     谷丰
** 生成日期: 2008.08.20
** 功能:判断年是否是闰年
** 相关文件:
** 修改日志:
***************************************************/
void leap_year(void)
{
    tian = tianshu[month];                                          // 读出每月天数表
    if(day < tian)
      tian_flag = 0;
    if(month == 2)
    {
      if((year%4 == 0)&&(year%100 != 0) || (year%400 == 0))         // 判断是否是闰年
       {
         tian = 29;                                                // 闰年2月天数修正
       }
       else
       {
         tian = 28;                                                // 闰年2月天数修正
       }
    }
}
/**************************************************
** 函数名称:时分秒加函数
** 工作环境: IAR 3.42A 
** 作者:     谷丰
** 生成日期: 2008.08.20
** 功能:时分秒、年月日加
** 相关文件:
** 修改日志:
***************************************************/
void rtc()
{ 
  if(++sec < 60)                                                    // 秒加一
    return;
  sec = 0;
  if(++min < 60)                                                    // 分加一
    return;
  min = 0;
  if(++hour < 24)                                                   // 小时加一
    return;
  hour = 0;
  if(++day <= tian)                                                 // 天数加一
    return;
  day = 1;                                                          // 月加一      
  if(++month <= 12)
    return;
   month = 1;
  if(++year < 2100)                                                 // 年加一
    return;
  year = 2000;   
}
/**************************************************
** 函数名称:LCD显示函数
** 工作环境: IAR 3.42A 
** 作者:     谷丰
** 生成日期: 2008.08.20
** 功能:LCD显示、闪烁、换屏
** 相关文件:
** 修改日志:
***************************************************/
void rtc_show(void)
{
  if((function_ping1 != 0) && (function_ping2 == 0) && (function_ping3 == 0))
  {
    change_ping = 0;                                                // 第一屏
  }
  else if((function_ping1 == 0) && (function_ping2 != 0) && (function_ping3 == 0))
  {
    change_ping = 1;                                                // 第二屏
  }
  else if((function_ping1 == 0) && (function_ping2 == 0) && (function_ping3 != 0))
  {
    change_ping = 2;                                                // 第三屏 
  }
  if(change_ping == 1)
  {
    if(function_ping2 == 0)                                         // 正常显示
    {
      LCDMEM[0] = digit[sec%10]; 
      LCDMEM[1] = digit[sec/10]; 
      LCDMEM[2] = digit[min%10];
      LCDMEM[3] = digit[min/10];     
      LCDMEM[4] = digit[hour%10];
      LCDMEM[5] = digit[hour/10];
    }
    if(function_ping2 == 1)                                         // 秒闪烁
    {
      if(twinkle_num == 0)                                          // 闪烁标志位
      {
        LCDMEM[0] = digit[sec%10];
        LCDMEM[1] = digit[sec/10]; 
      }
      else
      {
        LCDMEM[0] = 0;
        LCDMEM[1] = 0;
      }
      LCDMEM[2] = digit[min%10];
      LCDMEM[3] = digit[min/10];
      LCDMEM[4] = digit[hour%10];
      LCDMEM[5] = digit[hour/10];   
    }
    if(function_ping2 == 2)                                         // 分闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[2] = digit[min%10];
        LCDMEM[3] = digit[min/10];
      }
      else
      {
        LCDMEM[2] = 0;
        LCDMEM[3] = 0;
      }
      LCDMEM[0] = digit[sec%10];
      LCDMEM[1] = digit[sec/10];
      LCDMEM[4] = digit[hour%10];
      LCDMEM[5] = digit[hour/10];
    }
    if(function_ping2 == 3)                                         // 小时闪烁
    {
      if(twinkle_num == 0)                                                
      {
        LCDMEM[4] = digit[hour%10];
        LCDMEM[5] = digit[hour/10]; 
      }
      else                                                          
      {
        LCDMEM[4] = 0;
        LCDMEM[5] = 0;
      }
      LCDMEM[0] = digit[sec%10];
      LCDMEM[1] = digit[sec/10];
      LCDMEM[2] = digit[min%10];
      LCDMEM[3] = digit[min/10];
    }
  }
  if(change_ping == 0)
  {
    if(function_ping1 == 0)                                         // 正常显示
    {
      LCDMEM[0] = digit[(day)%10];
      LCDMEM[1] = digit[(day)/10];     
      LCDMEM[2] = digit[(month)%10];
      LCDMEM[3] = digit[(month)/10];   
      LCDMEM[4] = digit[year%10];                    
      LCDMEM[5] = digit[(year/10)%10]; 
    }
    if(function_ping1 == 1)                                          // 天闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[0] = digit[day%10];
        LCDMEM[1] = digit[day/10]; 
      }
      else
      {
        LCDMEM[0] = 0;
        LCDMEM[1] = 0;
      }
      LCDMEM[2] = digit[(month)%10];
      LCDMEM[3] = digit[(month)/10];   
      LCDMEM[4] = digit[year%10];                    
      LCDMEM[5] = digit[(year/10)%10]; 
    }
    if(function_ping1 == 2)                                          // 月闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[2] = digit[(month)%10];
        LCDMEM[3] = digit[(month)/10]; 
      }
      else
      {
        LCDMEM[2] = 0;
        LCDMEM[3] = 0;
      }
      LCDMEM[0] = digit[day%10];
      LCDMEM[1] = digit[day/10];
      LCDMEM[4] = digit[year%10];                    
      LCDMEM[5] = digit[(year/10)%10];
    }
    if(function_ping1 == 3)                                         // 年闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[4] = digit[year%10];                    
        LCDMEM[5] = digit[(year/10)%10];
      }
      else
      {
        LCDMEM[4] = 0;                    
        LCDMEM[5] = 0; 
      }
      LCDMEM[0] = digit[(day)%10];
      LCDMEM[1] = digit[(day)/10];     
      LCDMEM[2] = digit[(month)%10];
      LCDMEM[3] = digit[(month)/10]; 
    }
  }
  if(change_ping == 2)
  {
    if(function_ping3 == 0)                                         // 正常显示
    {
      LCDMEM[0] = digit[nao_sec%10];
      LCDMEM[1] = digit[nao_sec/10];     
      LCDMEM[2] = digit[nao_min%10];
      LCDMEM[3] = digit[nao_min/10];   
      LCDMEM[4] = digit[nao_hour%10];                    
      LCDMEM[5] = digit[nao_hour/10]; 
    }
    if(function_ping3 == 1)                                        // 闹钟秒闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[0] = digit[nao_sec%10];
        LCDMEM[1] = digit[nao_sec/10]; 
      }
      else
      {
        LCDMEM[0] = 0;
        LCDMEM[1] = 0;
      }
      LCDMEM[2] = digit[nao_min%10];
      LCDMEM[3] = digit[nao_min/10];   
      LCDMEM[4] = digit[nao_hour%10];                    
      LCDMEM[5] = digit[nao_hour/10]; 
    }
    if(function_ping3 == 2)                                        // 闹钟分闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[2] = digit[nao_min%10];
        LCDMEM[3] = digit[nao_min/10]; 
      }
      else
      {
        LCDMEM[2] = 0;
        LCDMEM[3] = 0;
      }
      LCDMEM[0] = digit[nao_sec%10];
      LCDMEM[1] = digit[nao_sec/10];
      LCDMEM[4] = digit[nao_hour%10];                    
      LCDMEM[5] = digit[nao_hour/10];
    }
    if(function_ping3 == 3)                                       // 闹钟小时闪烁
    {
      if(twinkle_num == 0)
      {
        LCDMEM[4] = digit[nao_hour%10];                    
        LCDMEM[5] = digit[nao_hour/10];
      }
      else
      {
        LCDMEM[4] = 0;                    
        LCDMEM[5] = 0; 
      }
      LCDMEM[0] = digit[nao_sec%10];
      LCDMEM[1] = digit[nao_sec/10];     
      LCDMEM[2] = digit[nao_min%10];
      LCDMEM[3] = digit[nao_min/10]; 
    }
  }
}
/**************************************************
** 函数名称:基本定时器中断函数
** 工作环境: IAR 3.42A 
** 作者:     谷丰
** 生成日期: 2008.08.20
** 功能:秒+,5s换屏,闹钟闪烁,修改闪烁
** 相关文件:
** 修改日志:
***************************************************/  
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer (void)
{  
  if(clock_flag == 1)                                              // 闹钟存在
    P1OUT ^= BIT0;                                                 // LED闪烁
  if(clock_flag == 2)                                              // 闹钟清除
    P1OUT &= ~BIT0;                                                // 关闭LED 
  cnt++;                                                           // 1s计数器加
  if(cnt == 4)                                                     // 是否等于4
  {
    rtc();                                                         // 秒加一
    cnt = 0;                                                       // 清零
  } 
  change_num++;                                                    // 换屏计数器
  twinkle_num = ~twinkle_num;                                      // 闪烁标志位 
  if(change_num == 60)                                             // 屏幕切换计数器到时复位
  {
    change_num = 0;                                                // 
  }
  if(((change_num > 0) && (change_num < 20) || (change_num == 0)) || ((ping_flag == 1) && (flag == 1)))
  {
    if((ping_flag == 1) && (flag == 1))                            // 按键时在第一屏
    {
      change_num = 20;                                             // 切换到第二屏
      flag = 0;                                                    // 按键标志位清零
    }
    change_ping = 0;                                               // 第一屏
    num_flag = 1;                                                  // 屏切换标志位1
  }
  if(((change_num > 20) && (change_num < 40) || (change_num == 20)) || ((ping_flag == 2) && (flag == 1)))
  {
    if((ping_flag == 2) && (flag == 1))                            // 按键时在第二屏
    {
      change_num = 40;                                             // 切换到第三屏
      flag = 0;
    }
    change_ping = 1;                                               // 第二屏
    num_flag = 2;                                                  // 屏切换标志位2
  }
  if(((change_num > 40) && (change_num < 60) || (change_num == 40)) || ((ping_flag == 3) && (flag == 1))) 
  {
    if((ping_flag == 3) && (flag == 1))                            // 按键时在第二屏
    {
      change_num = 0;                                              // 切换到第1屏
      flag = 0;
    }
    change_ping = 2;                                               // 第三屏
    num_flag = 3;                                                  // 屏切换标志位3
  }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -