?? fet440_lcd05.s43
字號:
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
;-------------------------------------------------------------------------------
; 4xx 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 + -