📄 fet4xx_rtcwlcd.s43
字号:
ret
#else //__CROSSWORKS__
_Char2LCD:
Char2LCD
sub #'0',R15 ;subtract offset of char '0'
_BCD2LCD:
BCD2LCD
rla R15 ;transform for word table
mov LCD_Tab(R15),R15 ;LCD value to R15
_Direct2LCD:
Direct2LCD
rla R14 ;position for word table (2 bytes per char)
mov.b R15,LCDM2(R14) ;low byte to LCD
swpb R15
mov.b R15,LCDM3(R14) ;high byte to LCD
add #2,R14 ;increase R14 (LCD mem pointer)
ret
;-------------------------------------------------------------------------------
_setPoint:
setPoint
rla R15 ;position for word table (2 bytes per char)
bis.b #dp,LCDM2(R15) ;low byte to LCD
ret
;-------------------------------------------------------------------------------
_setColon:
setColon
rla R15 ;position for word table (2 bytes per char)
bis.b #colon,LCDM2(R15) ;Turn on colon
ret
#endif
;-------------------------------------------------------------------------------
_SetupClock:
SetupClock ;Configure modules and control registers
;-------------------------------------------------------------------------------
_SetupLCD:
SetupLCD
#if (LCD_SIZE == 7)
mov.b #LCDON+LCD4MUX+LCDP2+LCDP0,&LCDCTL ; Softbaugh LCD 4Mux, S0-S31
#else
mov.b #LCDON+LCD4MUX+LCDP2,&LCDCTL ; STK LCD 4Mux, S0-S15
#endif
#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
call #_DisplayNextData ; Switch to next display mode
; every few seconds
bic #LPM3,0(SP) ; clear LPM on Stack
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 2000h ;1000h
p equ 1000h ;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_sp DW 0 ; displays " "
DW j+p; ; displays "!"
DW b+f; ; displays """
DW a+b+c+d+e+f+g+j+m+p; ; displays "#"
DW a+f+g+m+c+d+j+p; ; displays "$"
DW c+f+k+q;` ; displays "%"
DW d+h+j+n+q; ; displays "&"
DW j; ; displays "'"
DW j+k+n+p; ; displays "("
DW h+j+p+q; ; displays ")"
DW g+h+j+k+m+n+p+q; ; displays "*"
DW g+j+m+p; ; displays "+"
DW q; ; displays ","
LCD_mi DW g+m; ; displays "-"
DW dp; ; displays "."
DW k+q; ; displays "/"
_LCD_Tab:
LCD_Tab DW a+b+c+d+e+f +k+q ; displays "0" with diagonal slash
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 colon ; displays ":"
DW colon+q ; 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 j+p +a+d ; 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 a+b+c+d+e+f ; displays "O" big
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+p ; displays "T"
DW c+d+e+f+b ; displays "U"
DW e+f+q+k ; displays "V"
DW e+f+q+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"
DW e+f+a+d+h+q ; displays "["
DW h+n ; displays "\"
DW a+d+b+c+k+n ; displays "]"
DW a+f+b ; displays "^"
DW d ; displays "_"
DW h ; displays "`"
_LCD_Tab_Length equ $ - _LCD_Tab
LCD_Tab_Length equ $ - LCD_Tab
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 + -