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

📄 fet410_lcd05.s43

📁 MSP430常用的程序源代码,很全的,一定适合你(初学者)!
💻 S43
📖 第 1 页 / 共 2 页
字号:
;-------------------------------------------------------------------------------
ToLCD         cmp    #09Dh,R15                 ;pointer incremented for 4th
                                               ;digit = 1/2 digit position?
              jeq    Halfdigit                 ;yes, jump to test/set leading 1       
              and    #000Fh,R13                ;blank upper 12 bits
              add    R13,R13                   ;double R13 since is word data
                                               ;where addresses = 2 bytes apart 
              add    R13,R13                   ;double R13 again since 2 words
                                               ;per digit in static mode
              mov    LCD_Tab(R13),LCDTEMP      ;low word into temp memory
              mov.b  LCDTEMP,0(R15)            ;low byte of low word to LCD
              swpb   LCDTEMP                   ;swap bytes in temp memory
              mov.b  LCDTEMP,1(R15)            ;high byte of low word to LCD
              incd   R13                       ;double increment to high word of
                                               ;digit
              mov    LCD_Tab(R13),LCDTEMP      ;high word into temp memory                                    
              mov.b  LCDTEMP,2(R15)            ;low byte of high word to LCD
              swpb   LCDTEMP                   ;swap bytes in temp memory
              mov.b  LCDTEMP,3(R15)            ;high byte of high word to LCD
              add    #4,R15                    ;increase R15 (LCD mem pointer) 
                                               ;by 4 since 4 bytes per digit
EndLCD        ret                              ;return to Pass_Bytes routine

;-------------------------------------------------------------------------------
;            Test if 1 is to be displayed in 1/2 digit position and display it
;            If leading zero then nothing is displayed
;-------------------------------------------------------------------------------
Halfdigit     cmp.b  #1,R13                    ;digit to display = 1?
              jne    EndHalf                   ;no, jump to not display digit
              bis.b  #10h,-1(R15)              ;yes, set h bit in 12th byte(0-11)
                                               ; = 1/2 digit (leading 1) bit
EndHalf       mov.b  #LCDM1,R15                ;set pointer to start of LCD mem.
              ret                              ;return to Pass_Bytes routine

;-------------------------------------------------------------------------------
Setup         ;Configure modules and control registers 
;-------------------------------------------------------------------------------
StopWDT       mov    #WDTPW+WDTHOLD,&WDTCTL    ;stop Watchdog Timer
SetupFLL2     bis.b  #XCAP18PF,&FLL_CTL0       ;set load capacitance for xtal
              mov    #10000,R15
FLL_Wait      dec    R15                       ;delay for FLL to lock
              jnz    FLL_Wait		 
SetupLCD      mov.b  #065h,&LCDCTL             ;static LCD, segments = 0 - 23
SetupBT       mov.b  #BT_ADLY_1000,&BTCTL      ;Basic Timer interrupt = 1 second
              bis.b  #BTFRFQ1+BTFRFQ0,&BTCTL   ;set fLCD = ACLK / 256
              mov.b  #BTIE,&IE2                ;enable Basic Timer interrupt
SetupPorts    mov.b  #0FFh,&P1DIR              ;set port to outputs
SetupPx       mov.b  #0FFh,&P2DIR              ;set port to outputs
              mov.b  #0FFh,&P3DIR              ;set port to outputs
              mov.b  #0FFh,&P4DIR              ;set port to outputs
              mov.b  #0FFh,&P5DIR              ;set port to outputs
              mov.b  #0FFh,&P6DIR              ;set port to outputs
              
ClearRAM      bis.b  #10h,COLON                ;set bit used to flash colon
              mov.b  #59h,SEC                  ;preload SEC        # rolls over
              mov.b  #59h,MIN                  ;preload MIN        # to 12:00 @     
              mov.b  #11h,HOUR                 ;preload HOUR       # 1st second
ClearLCD      mov    #15,R15                   ;15 LCD memory bytes to clear
Clear1        mov.b  #0,LCDM1(R15)             ;write zeros in LCD RAM locations
                                               ;so clear display
              dec    R15                       ;all LCD mem clear?
              jc     Clear1                    ;more LCD mem to clear, use JC
                                               ;to get memory location 0
              eint                             ;enable interrupts
              ret          
              
;-------------------------------------------------------------------------------
;             Basic Timer causes 1 second interrupt. Mode bits changed on stack
;             so CPU is returned in active upon return from the interrupt
;-------------------------------------------------------------------------------
BT_ISR        call   #Clock                    ;update hours and minutes each
                                               ;second even if not displayed
              xor.b  COLON,&LCDM8              ;blink ":" between min and hour
              reti
              		 
;-------------------------------------------------------------------------------
;             Define characters for VI-302 3.5 digit static LCD
;-------------------------------------------------------------------------------
a             equ    0001h
b             equ    0010h
c             equ    0100h
d             equ    1000h
e             equ    0001h
f             equ    0010h 
g             equ    0100h                     
h             equ    1000h                     ;decimal point or special
                                               ;character

              EVEN                             ;align words on even boundry
LCD_Tab       DW     a+b+c+d                   ;displays "0" low word
              DW     e+f                       ;displays "0" high word 
              DW     b+c                       ;displays "1" low word
              DW     0                         ;displays "1" high word (empty) 
              DW     a+b+d                     ;displays "2" low word
              DW     e+g                       ;displays "2" high word              
              DW     a+b+c+d                   ;displays "3" low word
              DW     g                         ;displays "3" high word              
              DW     b+c                       ;displays "4" low word
              DW     f+g                       ;displays "4" high word              
              DW     a+c+d                     ;displays "5" low word
              DW     f+g                       ;displays "5" high word              
              DW     a+c+d                     ;displays "6" low word
              DW     e+f+g                     ;displays "6" high word              
              DW     a+b+c                     ;displays "7" low word
              DW     0                         ;displays "7" high word (empty)             
              DW     a+b+c+d                   ;displays "8" low word
              DW     e+f+g                     ;displays "8" high word              
              DW     a+b+c+d                   ;displays "9" low word
              DW     f+g                       ;displays "9" high word              

;-------------------------------------------------------------------------------
;             41x Interrupt vectors
;-------------------------------------------------------------------------------
              ORG    0FFFEh                    ;MSP430 RESET Vector
              DW     RESET
              ORG    0FFE0h                    ;Basic Timer Vector
              DW     BT_ISR                                         
              END     

⌨️ 快捷键说明

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