?? 實(shí)驗(yàn)11_led&lcd時鐘顯示.s43
字號:
#include "msp430x44x.h "
;-------------------------------------------------------------
;MSP-Test44x Demo lcd ,led dishplay the timer
;
; MSP430F449
; -----------------
; /|\| XIN|-
; | | | 74HC373(1)&(2)
; LCD --|RST XOUT|- -------------
; ---------- | | | |
; | COM0|<---|COM0 P3.1|------>|D0 |
; | . | . | . . | . | |
; | COM3|<---|COM3 P3.7|------>|D7 |
; | S0 |<---|S0 P4.0|------>| |
; | . | . | P4.1|------>| |
; | S14|<---|S14 |
;
;
;--------------------------------------------------------------
;----------------RAM單元定義-----------------------------------
;--------------------------------------------------------------
second equ 200h ;秒
min equ 201h ;分
hour equ 202h ;時
flag equ 203h ;標(biāo)志寄存器
led_disp_data equ 204h ;led 顯示緩沖
led_disp_bit equ 205h ;led顯示位選
counter equ 20ch ;顯示計(jì)數(shù)
dip equ 210h ;小數(shù)點(diǎn)
;-------------------------------------------------------------
;;首先,對系統(tǒng)進(jìn)行初始化。關(guān)看門狗、置端口的輸入輸出狀態(tài)、以及中斷情況態(tài)
;;接著,對用到的ram區(qū)進(jìn)行初始化、對標(biāo)志位初始化。
;----------------------------------------------
ORG 01100h ; Program Start
;-----------------------------------------------
Reset
mov.w #0a00h,SP ; Initia ize stackpointer
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
mov.b #0ffh,&P2DIR
mov.b #0ffh,&P3DIR
mov.b #00h,&P3OUT
mov.b #0ffh,&P4DIR
biS.b #03h,&P4OUT
mov.b #0a6h,&BTCTL ;0a6=1s int ;0a5=0.5s
bis.b #BTIE,&IE2 ;Enable Basic Timer interrupt
mov.w #TASSEL1+TACLR,&TACTL ;led 刷新一位定時
mov.w #CCIE,&CCTL0
mov.w #2400,&CCR0 ;3ms
bis.w #MC0,&TACTL
eint
call #lcd_display_ona ;open lcd
clr.b &second
clr.b &min
clr.b &hour
clr.b &led_disp_data
clr.b &led_disp_bit
clr.b R8
;--------------------------------------------------
;----------- 主程序區(qū) -------------
;--------------------------------------------------
mainloop
nop
nop
nop
nop
nop
call #led_chang ;led disp buffer chang
call #led_display ;led display
call #lcd_display ;lcd display
jmp mainloop
;----------------------------------------------------
;---------------- led顯示子程序 ------------------
;----------------------------------------------------
led_chang
br led_take(R8)
EVEN
led_take
dw second_table_h
dw second_table_l
dw min_table_h
dw min_table_l
dw hour_table_h
dw hour_table_l
second_table_h
mov.b &second,R14
mov.b #2fh,&led_disp_bit
jmp take_h
second_table_l
mov.b &second,R14
mov.b #1fh,&led_disp_bit
mov.b #00h,&dip
jmp take_l
min_table_h mov.b &min,R14
mov.b #3bh,&led_disp_bit
jmp take_h
min_table_l mov.b &min,R14
mov.b #37h,&led_disp_bit
mov.b #20h,&dip
jmp take_l
hour_table_h mov.b &hour,R14
mov.b #3eh,&led_disp_bit
jmp take_h
hour_table_l mov.b &hour,R14
mov.b #3dh,&led_disp_bit
mov.b #20h,&dip
jmp take_l
take_h mov.b R14,R13
rra.b R13
rra.b R13
rra.b R13
rra.b R13
and.b #0fh,R13
mov.b led_table(R13),&led_disp_data
ret
take_l
mov.b R14,R13
and.b #0fh,R13
mov.b led_table(R13),&led_disp_data
add.b &dip,&led_disp_data
ret
;----------------------------------------------------
;---------------- led顯示子程序 -----------------
;----------------------------------------------------
led_display
mov.b &led_disp_data,&P3OUT ;send data
bis.b #02h,&P4OUT ;open data choose
bic.b #02h,&P4OUT ;close data choose
mov.b &led_disp_bit,P3OUT
bis.b #01h,&P4OUT ;open bit choose
bic.b #01h,&P4OUT ;close data choose
ret
;----------------------------------------------------
;---------------- lcd顯示子程序 ----------------
;----------------------------------------------------
lcd_display mov.b #80h,&dip
mov.b #LCDM1,R15
dis_second mov.b &second,R13
rra.b R13
rra.b R13
rra.b R13
rra.b R13
and.b #0fh,R13
mov.b lcd_table(R13),R14
mov.b R14,1(R15)
mov.b &second,R13
and.b #0fh,R13
mov.b lcd_table(R13),R14
mov.b R14,0(R15)
dis_min mov.b &min,R13
rra.b R13
rra.b R13
rra.b R13
rra.b R13
and.b #0fh,R13
mov.b lcd_table(R13),R14
mov.b R14,3(R15)
mov.b &min,R13
and.b #0fh,R13
mov.b lcd_table(R13),R14
;bis.b #80h,R14
mov.b R14,2(R15)
dis_hour mov.b &hour,R13
rra.b R13
rra.b R13
rra.b R13
rra.b R13
and.b #0fh,R13
mov.b lcd_table(R13),R14
mov.b R14,5(R15)
mov.b &hour,R13
and.b #0fh,R13
mov.b lcd_table(R13),R14
;bis.b #80h,R14
mov.b R14,4(R15)
ret
;--------------------------------------------------
lcd_display_ona
mov.b #0FCh,&P5SEL ;Enable R(LCD) + COM Lines
mov.b #LCDON+LCD4MUX+LCDP1,&LCDCTL ;STK LCD 4Mux, S0-S19
;Basic Timer : SSEL=0 DIV=0 Reset=1,ACLK,32768/256 = 128Hz (7.8ms debounce time)
;Basic Timer reset disabled
;enable basic timer intrpt
call #show_clr ;clear LCD
clr R9
ret
;--------------------------------------------------
;----------------- Timera_int ------------------
;--------------------------------------------------
Timera_int
inc.b R8
inc.b R8
cmp.b #0ch,R8
jnz Timer_int_end
clr.b R8
Timer_int_end reti
;--------------------------------------------------
;----------------- BASIC TIMER int ------------
;--------------------------------------------------
BASIC_INT xor.b #01h,&flag
setc
BASIC_END dadc.b &second
cmp.b #60h,&second
jlo clock_end
clr.b &second
dadc.b &min
cmp.b #60h,&min
jlo clock_end
dadc.b &hour
clr.b &min
cmp.b #24h,&hour
jlo clock_end
clr.b &hour
clock_end reti
;--------------------------------------------------
;;-------顯示處理子程序
;--------------------------------------------------
lcd_display_deal
clr R5
next_word_display
mov.b #0FFH,LCDMEM(R5)
inc R5
cmp.b &counter,R5
jnz next_word_display
ret
;-------------------------------------------------------
;---------清顯示存儲區(qū).
;-------------------------------------------------------
show_clr
mov.b #00h,R6 ; clear display memory
show_clr1
mov.b #00h,LCDMEM(R6)
inc.b R6
cmp.b #0ah,R6
jnz show_clr1
ret
delay mov.b #0ffh,R9
ttt nop
nop
dec.b R9
jnz ttt
ret
;----------------------------------------------------------
;--------------led顯示代碼 --------------------------------
;----------------------------------------------------------
led_table
db 0d7h ;0
db 14h ;1
db 0cdh ;2
db 5dh ;3
db 1Eh ;4
db 5bh ;5
db 0dbh ;6
db 15h ;7
db 0dfh ;8
db 05fh ;9
DB 97H
DB 0DAH
DB 0C3H
DB 0CCH
DB 0CFH
DB 08BH
;-----------------------------------------------------------
;---------------lcd顯示代碼--------------------------------
;-----------------------------------------------------------
lcd_table
db 0b7h ;0
db 12h ;1
db 8fh ;2
db 1fh ;3
db 3ah ;4
db 3dh ;5
db 0bdh ;6
db 13h ;7
db 0bfh ;8
db 3fH ;9
;----------------------------------------------------------
; Interrupt Vector Table
;----------------------------------------------------------
RSEG INTVEC ; MSP430 RESET Vector
;----------------------------------------------------------
DW BASIC_INT ;0FFE0h
DW Reset ;0FFE2h
DW Reset ;0FFE4h
DW Reset ;0FFE6h
DW Reset ;0FFE8h
DW Reset ;0FFEAh
DW Timera_int ;0FFECh
DW Reset ;0FFEEh
DW Reset ;0FFF0h
DW Reset ;0FFF2h
DW Reset ;0FFF4h
DW Reset ;0FFF6h
DW Reset ;0FFF8h
DW Reset ;0FFFAh
DW Reset ;0FFFCh
DW Reset ;0FFFEh
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -