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

📄 test44x_lcd_led_time2.c

📁 MSP430f449实时时钟及LCD/LED显示
💻 C
字号:
      #include  "msp430x44x.h " 

static  unsigned char sec;            //秒寄存器
static  unsigned char min;            //分寄存器
static  unsigned char hour;           //小时寄存器
static  unsigned char led_disp_bit=0x40;//LED显示位寄存器
//----------------------------------------------------------
const   unsigned char lcd_table[12]={ 
0x7b,       //*"0"*//
0x12,       //*"1"*//
0x4f,       //*"2"*//
0x1f,       //*"3"*//                 //LCD显示代码表
0x36,       //*"4"*//
0x3d,       //*"5"*//
0x7d,       //*"6"*//
0x13,       //*"7"*//
0x7f,       //*"8"*//
0x3f,       //*"9"*//
0x00,       //*"no"*//
0x00,       //*"no"*//
};
const   unsigned char led_table[12]={
0xd7,       //*"0"*//
0x14,       //*"1"*//
0xcd,       //*"2"*//
0x5d,       //*"3"*//                //LED显示代码
0x1e,       //*"4"*//
0x5b,       //*"5"*//
0xdb,       //*"6"*//
0x15,       //*"7"*//
0xdf,       //*"8"*//
0x5f,       //*"9"*//
0x00,       //*"no"*//
0x00,       //*"no"*//
};

void rtc(void);             
void display_rtc(void);
void display_dec(unsigned char  i,unsigned char  j);
void led_display(unsigned char i);
//-------------------------------------------------------------
//---------------主程序----------------------------------------
//-------------------------------------------------------------
void main(void)
{  
    int i;
    WDTCTL = WDTPW + WDTHOLD;
    BTCTL=BTSSEL+BT_ADLY_500+BTFRFQ1;        //BT 0.5S中断
    IE2|=BTIE;
    P5SEL=0xfc;
    LCDCTL=LCDON+LCD4MUX+LCDP2;              //LCD模块初始化
    P3DIR=0xff;                              //端口3初始化
    P4DIR=0x03;                              //端口4初始化
    P3OUT=0x00;                              //LED清屏
    P4OUT|=0x02;//P4的P4.1位置位
    P4OUT&=~0x02;//P4的P4.1位复位
    P3OUT=0xff;
    P4OUT|=0x01;
    P4OUT&=~0x01;
    TACTL=TASSEL0+TACLR;                     //Timer_a 3ms中断
    CCTL0=CCIE;
    CCR0=100;
    TACTL|=MC0;
    for (i=0; i<8; ++i)                      //LCD 清屏 
    LCDMEM[i] = 0x00;
    _EINT();                                 //允许中断
//*mainloop*//
    for(;;)
    {
       _BIS_SR(LPM3_bits);                   //进入低功耗模式3
       _NOP();   
    }
}   
    
//------------------------------------------------------
// Basic Timer interrupt service routine
interrupt[BASICTIMER_VECTOR] void basic_timer(void)
{
    rtc();                                   //时钟处理
    display_rtc();                           //时钟LCD显示
} 
//------------------------------------------------------
//  Timer_A interrupt service routine
interrupt[TIMERA0_VECTOR] void Timer_A (void)
{
  led_disp_bit=led_disp_bit>0x01?led_disp_bit>>1:0x40;   //LED显示处理
  switch(led_disp_bit)                 //选择led的刷新位//3ms刷新一位
    {
    case 1:led_display(led_table[hour/10]);break; 
    case 2:led_display(led_table[hour%10]+0x20);break;
    case 4:led_display(led_table[min/10]);break;
    case 8:led_display(led_table[min%10]+0x20);break;
    case 16:led_display(led_table[(sec>>1)/10]);break;
    case 32:led_display(led_table[(sec>>1)%10]);
    }    
}
//-------------------------------------------------------
//-------时钟处理程序------------------------------------
//-------------------------------------------------------
void  rtc (void)                                
{ 
  if (++sec < 120)
    return;
  sec = 0;
  if (++min < 60)
    return;
  min = 0;
  if (++hour < 24)
    return;
  hour = 0; 
} 
//--------------------------------------------------------
//--------时钟LCD显示程序---------------------------------
//--------------------------------------------------------
void display_rtc(void)
{ int i;
  i=sec;
  i=i>>1;
  display_dec(0,i);
  i=min;
  display_dec(2,i);
  i=hour;
  display_dec(4,i); 
  LCDMEM[6]=0x00;  
}
//--------------------------------------------------------
//--------LCD显示处理程序---------------------------------
//--------------------------------------------------------
void display_dec(unsigned char  i,unsigned char  j)
{
 LCDMEM[i]=lcd_table[j%10]+0x80;
 LCDMEM[i+1]=lcd_table[j/10];
}
//--------------------------------------------------------
//-------LED 1位显示程序----------------------------------
//-------I 为显示代码值-----------------------------------
void led_display(unsigned char i)
{
P3OUT=i;
P4OUT=0x02;
P4OUT&=~0x02;
P3OUT=~led_disp_bit;
P4OUT=0x01;
P4OUT&=~0x01;
P3OUT=0x00;
}

⌨️ 快捷键说明

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