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

📄 msp430液晶与数码管同时显示简易走时钟.c

📁 MSP430系列单片机适用小程序
💻 C
字号:
//已经调试通过   南京航空航天大学   魏小龙
//LCD显示程序,使用于430实验板的电表液晶。可以直接下载到电路运行的
//走时钟程序   液晶与数码管同时显示  只有秒与分,(只是意思以一下,不准的哦)其他原理一样,希望网友自己编写。
//*****************************************************************************
//  MSP-FET430P440 Demo - LCD Put "6543210" on STK/EVK LCD 
//
//  Description; Put "6543210" on MSP-EVK430S320 LCD. 
//  ACLK = LFXT1 = 32768, MCLK = SMCLK = DCO = 32xACLK = 1.048576MHz
//  //*An external watch crystal is required on XIN/XOUT for ACLK*//	  
//
//                MSP430F449
//            -----------------
//        /|\|              XIN|-  
//         | |                 | 32kHz
//         --|RST          XOUT|-
//           |                 |
//         +-|R33          P5.1|     -----------------
//        1m |              -  |--> | + 7 6 5 4 3 2 1 |
//         +-|R23          P3.2|     -----------------
//        1m |             COM0|-----||||
//         +-|R13          COM1|------|||
//        1m |             COM2|-------||
//         +-|R03          COM3|--------|
//         | |                 |
//        Vss
//
//  M.Buccini
//  Texas Instruments, Inc
//  January 2002
//  Built with IAR Embedded Workbench Version: 1.25A
//*****************************************************************************

#include  <msp430x44x.h>
unsigned char disbuffer[8]={0,1,3,8,0xf,5,0x18,7};
char digit[20] = {1,0,0,0,0,2,1,8
};
char distab[10]={0xd7,0x06,0xe3,0xa7,0x36,0xb5,0xf5,0x07,0xf7,0xb7};
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,
	0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,
	0x39,0x5e,0x79,0x71,
	0xbf,0x86,0xdb,0xcf,
	0xe6,0xed,0xfd,0x87,
	0xff,0xef,0xf7,0xfc,
	0xb9,0xde,0xf9,0xf1,

	0x80,0x40,0x00,0x73,0xc0};

void delay(int v)
    {
        while(v!=0)v--;
    }

void disp(void)
    {
    unsigned char i=0,j=0;
    unsigned char temp_wei=0x0,temp_duan=0;
    P3DIR  =  0x1f;
    for(i=0;i<8;i++)
      {
        P3OUT  &=  ~BIT3;  
        temp_duan=seg[disbuffer[i]] ;
        for(j=0;j<8;j++)
            {
             if(temp_duan&0x80)   
                P3OUT  |=   BIT0;
             else
                P3OUT  &=  ~BIT0;
             temp_duan=temp_duan<<1;
             P3OUT  &=   ~BIT4;   P3OUT  |=  BIT4;       
            }
         P3OUT  |=   BIT3;      
         P3OUT  =  (P3IN&0xf8) | temp_wei;
         temp_wei++;
         delay(100);
      }
     for(i=0;i<8;i++)
     { P3OUT  &=  ~BIT0;   P3OUT  &=   ~BIT4;   P3OUT  |=  BIT4;     }
    }


void main(void)
{
   int i;
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  FLL_CTL0 |= XCAP14PF;                 // Configure load caps
//  LCDCTL = LCDON + LCD4MUX + LCDP2;     // STK LCD 4Mux, S0-S17
  LCDCTL = 0XFD;
  BTCTL = BTFRFQ1;                      // STK LCD freq 
  P5SEL = 0xFC;                         // Common and Rxx all selected
  for(i=0;i<20;i++)     
  LCDMEM[i]=0;
  
  for (i=1; i<9; ++i)                   // Display "6543210" 
  LCDMEM[i] = distab[digit[i-1]];//digit[i];
  
  TACTL = TASSEL1 + TACLR;              // SMCLK, clear TAR
  CCTL0 = CCIE;                         // CCR0 interrupt enabled
  CCR0 = 20000;
  TACTL |= MC1;                         // Start Timer_A in continuous mode
  _EINT();                              // Enable interrupts
 
  for (;;)                              
  {
    _BIS_SR(CPUOFF);                    // CPU off
    _NOP();                             // Required only for C-spy
  }
}

interrupt[TIMERA0_VECTOR] void Timer_A (void)
{  char i=0;
  //  P5OUT ^= 0x02;                        // Toggle P5.1
 disp(); 
  for(i=0;i<8;i++)
      disbuffer[8-i]=digit[i];
  CCR0 += 20000;                        // Add Offset to CCR0
  for(i=0;i<6;i++)
      LCDMEM[i+1]=distab[digit[i]];
  digit[0]++;
  if(digit[0]==50)
       {
       digit[0]=0;
       digit[1]++;
       if(digit[1]==10)
           {
           digit[1]=0;
           digit[2]++;
           if(digit[2]==6)
               {
               digit[2]=0;
               digit[3]++;
               if(digit[3]==10)
                    {
                    digit[3]=0;
                    digit[4]++;
                    if(digit[4]==6)
                         {
                         digit[4]=0;
               }
               }
               }
               }
       }
}

⌨️ 快捷键说明

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