📄 fet4xx_rtcwlcd.s43
字号:
rla R14 ;position for word table (2 bytes per char)
mov.b R12,LCDM2(R14) ;low byte to LCD
swpb R12
mov.b R12,LCDM3(R14) ;high byte to LCD
add #2,R14 ;increase R14 (LCD mem pointer)
ret
_setPoint:
setPoint
rla R12 ;position for word table (2 bytes per char)
bis.b #dp,LCDM2(R12) ;low byte to LCD
ret
;-------------------------------------------------------------------------------
_SetupClock:
SetupClock ;Configure modules and control registers
;-------------------------------------------------------------------------------
_SetupLCD:
SetupLCD
mov.b #LCDON+LCD4MUX+LCDP2,&LCDCTL ; STK LCD 4Mux, S0-S15
#ifdef P5SEL_
mov.b #0FCh,&P5SEL ; Enable R(LCD) + COM Lines
#endif
SetupBT mov.b #BT_ADLY_1000,&BTCTL ;Basic Timer interrupt = 1 second
bis.b #BTFRFQ1,&BTCTL ;set fLCD = ACLK / 128
mov.b #BTIE,&IE2 ;enable Basic Timer interrupt
ClearRAM
mov.b #00h,SEC ;preload SEC # rolls over
mov.b #00h,MIN ;preload MIN # to 12:00 @
mov.b #012h,HOUR ;preload HOUR # 1st second
mov.b #01h,DAY ;preload DAY
mov.b #01h,MONTH ;preload MONTH
mov.b #03h,YEAR ;preload YEAR
ClearLCD mov #20,R15 ;20 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
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 #UpdateClock ;update hours and minutes each
;second even if not displayed
reti
;-------------------------------------------------------------------------------
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; LCD Definitions
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
LCD_TYPE
; Top Digit at LCD
;SB LCD
ta equ 10h
tb equ 01h
tc equ 04h
td equ 08h
te equ 40h
tf equ 20h
tg equ 02h
tdp equ 80h
_TLCD_Tab:
TLCD_Tab DB ta+tb+tc+td+te+tf ; displays "0"
DB tb+tc ; displays "1"
DB ta+tb+td+te+tg ; displays "2"
DB ta+tb+tc+td+tg ; displays "3"
DB tb+tc+tf+tg ; displays "4"
DB ta+tc+td+tf+tg ; displays "5"
DB ta+tc+td+te+tf+tg ; displays "6"
DB ta+tb+tc ; displays "7"
DB ta+tb+tc+td+te+tf+tg ; displays "8"
DB ta+tb+tc+td+tf+tg ; displays "9"
DB ta+tb+tc+te+tf+tg ; displays "A"
DB tc+td+te+tf+tg ; displays "B"
DB ta+td+te+tf ; displays "C"
DB tb+tc+td+te+tg ; displays "D"
DB ta+td+te+tf+tg ; displays "E"
DB ta+te+tf+tg ; displays "F"
even ; succeeding .text sections must be even aligned!
;SB LCD
a equ 08h
b equ 04h
c equ 02h
d equ 01h
e equ 20h
f equ 40h
dp equ 10h
colon equ 80h
g equ 4000h
h equ 8000h
j equ 0800h
k equ 0400h
m equ 0200h
n equ 0100h
q equ 1000h
p equ 2000h
;--- character definitions
; decode special Char to be placed at end of the table
CHAR_SPACE equ LCD_sp
_CHAR_SPACE equ LCD_sp
CHAR_MINUS equ LCD_mi
_CHAR_MINUS equ LCD_mi
_LCD_Tab:
LCD_Tab DW a+b+c+d+e+f ; displays "0"
DW b+c ; displays "1"
DW a+b+d+e+g+m ; displays "2"
DW a+b+c+d+g+m ; displays "3"
DW b+c+f+g+m ; displays "4"
DW a+c+d+f+g+m ; displays "5"
DW a+c+d+e+f+g+m ; displays "6"
DW a+b+c ; displays "7"
DW a+b+c+d+e+f+g+m ; displays "8"
DW a+b+c+d+f+g+m ; displays "9"
DW dp ; displays ":"
DW g+m ; displays ";"
DW k+n ; displays "<"
DW d+g+m ; displays "="
DW h+q ; displays ">"
DW a+b+m+p ; displays "?"
DW a+b+d+e+f+g+m ; displays "@"
DW a+b+c+e+f+g+m ; displays "A"
DW c+d+e+f+g+m ; displays "B"
DW a+d+e+f ; displays "C"
DW b+c+d+e+g+m ; displays "D"
DW a+d+e+f+g ; displays "E"
DW a+e+f+g ; displays "F"
DW a+c+d+e+f+m ; displays "G"
DW b+c+e+f+g+m ; displays "H"
DW b+c ; displays "I"
DW b+c+d+e ; displays "J"
DW e+f+g+k+n ; displays "K"
DW d+e+f ; displays "L"
DW b+c+e+f+h+k ; displays "M"
DW e+f+h+n+c+b ; displays "N"
DW c+d+e+g+m ; displays "O"
DW a+b+e+f+g+m ; displays "P"
DW a+b+c+d+e+f+n ; displays "Q"
DW e+f+a+b+m+g+n ; displays "R"
DW a+c+d+f+g+m ; displays "S"
DW a+j+q ; displays "T"
DW c+d+e+f+b ; displays "U"
DW e+f+p+k ; displays "V"
DW e+f+p+n+c+b ; displays "W"
DW h+n+q+k ; displays "X"
DW h+k+p ; displays "Y"
DW a+k+q+d ; displays "Z"
LCD_sp DW 0 ; displays " "
LCD_mi DW g+m ; displays "-"
LCD_Tab_End
even ; succeeding .text sections must be even aligned!
;-------------------------------------------------------------------------------
; Interrupt vectors
;-------------------------------------------------------------------------------
#if !defined(__CROSSWORKS__)
COMMON INTVEC
#else
RSEG INTVEC
KEEP
#endif
ORG BASICTIMER_VECTOR ;Basic Timer Vector
DW BT_ISR
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -