; ***************************************************************************** ; This program shifts the display pattern of four seven-segment displays with ; each pattern displayed for one second. ; Author: Dr. Han-Way Huang ; Date: January 5, 2005 ; ***************************************************************************** #include "c:\miniide\hcs12.inc" pat_port equ PORTB ; Port that drives the segment pattern pat_dir equ DDRB ; direction register of the segment pattern sel_port equ PTP ; Port that select the digit sel_dir equ DDRP ; direction register of the select port org $1500 movb #$FF,pat_dir ; configure pattern port for output movb #$3F,sel_dir ; configure digit select port for output ldx #disp_tab ; use X as the pointer first ldab #250 loop movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " decb beq nxtLP1 ldx #disp_tab ; start from the begin of 0 bra loop nxtLP1 ldab #250 ldx #disp_tab+8 loop2 movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " decb beq nxtLP2 ldx #disp_tab+8 ; start from the begin of 1 0 bra loop2 nxtLP2 ldab #250 ldx #disp_tab+16 loop3 movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " decb beq nxtLP3 ldx #disp_tab+16 ; reset to 2 1 0 bra loop3 nxtLP3 ldaa #10 ldx #forever loop41 ldab #250 loop42 movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " movb 1,x+,pat_port ; output the digit pattern movb 1,x+,sel_port ; output the digit select value ldy #1 ; wait for 1 ms jsr delayby1ms ; " decb beq nxtLP4 pshd tfr x,d subd #8 tfr d,x puld bra loop42 nxtLP4 deca beq nxtLP3 jmp loop41 #include "c:\miniide\delay.asm" ; ***************************************************************** ; seven-segment display table (pattern, digit select) ; ***************************************************************** disp_tab dc.b $3F,$FE,$00,$FD,$00,$FB,$00,$F7 ; 0 dc.b $06,$FE,$3F,$FD,$00,$FB,$00,$F7 ; 1 0 dc.b $5B,$FE,$06,$FD,$3F,$FB,$00,$F7 ; 2 1 0 forever dc.b $4F,$FE,$5B,$FD,$06,$FB,$3F,$F7 ; 3 2 1 0 dc.b $66,$FE,$4F,$FD,$5B,$FB,$06,$F7 ; 4 3 2 1 dc.b $6D,$FE,$66,$FD,$4F,$FB,$5B,$F7 ; 5 4 3 2 dc.b $7D,$FE,$6D,$FD,$66,$FB,$4F,$F7 ; 6 5 4 3 dc.b $07,$FE,$7D,$FD,$6D,$FB,$66,$F7 ; 7 6 5 4 dc.b $7F,$FE,$07,$FD,$7D,$FB,$6D,$F7 ; 8 7 6 5 dc.b $6F,$FE,$7F,$FD,$07,$FB,$7D,$F7 ; 9 8 7 6 dc.b $3F,$FE,$6F,$FD,$7F,$FB,$07,$F7 ; 0 9 8 7 dc.b $06,$FE,$3F,$FD,$6F,$FB,$7F,$F7 ; 1 0 9 8 dc.b $5B,$FE,$06,$FD,$3F,$FB,$6F,$F7 ; 2 1 0 9 end