📄 实验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 |
;
;
; Yang Rui
; Lierda, Inc
; NOVEMBER 2003
; Built with IAR Embedded Workbench Version: 1.26B
;--------------------------------------------------------------
;----------------RAM单元定义-----------------------------------
;--------------------------------------------------------------
second equ 200h ;秒
min equ 201h ;分
hour equ 202h ;时
flag equ 203h ;标志寄存器
led_disp_data equ 204h ;led 显示缓冲
led_disp_bit equ 205h ;led显示位选
counter equ 20ch ;显示计数
dip equ 210h ;小数点
;-------------------------------------------------------------
;;首先,对系统进行初始化。关看门狗、置端口的输入输出状态、以及中断情况态
;;接着,对用到的ram区进行初始化、对标志位初始化。
;----------------------------------------------
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 ;1s int
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
;--------------------------------------------------
;----------- 主程序区 -------------
;--------------------------------------------------
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
;-------------------------------------------------------
;---------清显示存储区.
;-------------------------------------------------------
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 7bh ;0
db 12h ;1
db 4fh ;2
db 1fh ;3
db 36h ;4
db 3dh ;5
db 7dh ;6
db 13h ;7
db 7fh ;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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -