![]() |
Applications of AVR single chip controllers AT90S, ATtiny, ATmega and ATxmega Experimental board with an ATtiny24/44/84 and an LCD |
;
; ***********************************************
; * tn24_lcd example source code for LCD access *
; * without interrupts with tn24_lcd_busy.inc *
; * (C)2018 http://www.av-asm-tutorial,net *
; ***********************************************
;
.nolist
.include "tn24def.inc" ; Define device ATtiny24
.list
;
; **********************************
; H A R D W A R E
; **********************************
; Device: ATtiny24A, Package: 14-pin-PDIP_SOIC
;
; ______
; 1 / |14
; VCC o--| |--o GND
; 2| |13
; LCD-RS o--| |--o PA0
; 3| |12
; LCD-RW o--| |--o PA1
; 4| |11
; RESET o--| |--o PA2
; 5| |10
; LCD-EN o--| |--o PA3
; 6| |9
; LCD-D7 o--| |--o LCD-D4
; 7| |8
; LCD-D6 o--| |--o LCD-D5
; |_______|
;
; **********************************
; P O R T S A N D P I N S
; **********************************
;
; (Port A port bits PA0..PA3 freely available)
;
; **********************************
; A D J U S T A B L E C O N S T
; **********************************
;
; Default controller clock frequency
; max clock frequency: 8 MHz
;
.equ clock=1000000 ; Define clock frequency
;
; Delay between init and output mask
; in multiples of 250 ms
;
.equ cLcdDelay = 20 ; Mask delay 5 seconds
;
; Switches for the use of LCD number
; conversion and display routines.
; If not used comment out the .set
; directives with ;
;
.set sLcdDec8 = 1 ; Display 8 bit decimals
.set sLcdDec16 = 1 ; Display 16 bit decimals
.set sLcdHex8 = 1 ; Display 8 bit hexadecimals
.set sLcdHex16 = 1 ; Display 16 bit hexadecimals
.set sLcdBin8 = 1 ; Display 8 bit binaries
.set sLcdBin16 = 1 ; Display 16 bit binaries
.set LcdNmbr8 = 123 ; Display as 8 bit
.set LcdNmbr16 = 12345 ; Display as 16-Bit-Zahl
;
; Generate own characters on the LCD
;
.set sLcdChars = 1 ; Generate special chars and display
;
; **********************************
; F I X & D E R I V. C O N S T
; **********************************
;
; **********************************
; R E G I S T E R S
; **********************************
;
; free: R0 to R15 (R0, R1 and R2 are used by
some include routines, but are restored)
; rmp must be defined (include routines)
.def rmp = R16 ; Define multipurpose register
; free: R17 to R29
; used: R31:R30 = Z temporarily for include routines
;
; **********************************
; S R A M
; **********************************
;
.dseg
.org SRAM_START
; (not used)
;
; **********************************
; C O D E - S E G M E N T
; **********************************
;
.cseg
.org 000000
;
; **********************************
; M A I N P R O G R A M I N I T
; **********************************
;
Main:
; Init stack
; ldi rmp,High(RAMEND) ; Only with ATtiny84!
; out SPH,rmp
ldi rmp,Low(RAMEND)
out SPL,rmp
; LCD init
rcall LcdInit
; Display numbers in diverse formats
.ifdef sLcdBin8 ; 8 bit binary?
rcall LcdLine1
ldi rmp,'0'
rcall LcdChar
ldi rmp,'b'
rcall LcdChar
ldi rmp,LcdNmbr8
rcall LcdBin8
ldi rmp,' '
rcall LcdChar
ldi rmp,'='
rcall LcdChar
.endif
.ifdef sLcdHex8 ; 8 bit hexadecimal?
; Display 8 bit-hexadecimal in line 1
ldi ZH,0 ; To line 1
ldi ZL,cLcdColumns-7 ; To column (N-7)
rcall LcdPos
ldi rmp,'$'
rcall LcdChar ; Write char on LCD
ldi rmp,LcdNmbr8 ; Load number
rcall LcdHex8
.ifdef sLcdDec8
ldi rmp,'=' ; Equals
rcall LcdChar
.endif
.endif
.ifdef sLcdDec8 ; Display 8 bit decimal?
; Display 8 bit decimal in line 1
ldi ZH,0 ; To line 1
ldi ZL,cLcdColumns-3 ; To the end of the line
rcall LcdPos
ldi rmp,LcdNmbr8 ; Load number
rcall LcdDec8
.endif
.ifdef sLcdHex16 ; Display 16 bit hexadecimal?
; Display 16 bit hexadecimal in line 2
ldi ZH,1 ; To line 2
ldi ZL,9 ; To column 10
rcall LcdPos
ldi rmp,'$' ; Dollar for hex
rcall LcdChar
ldi ZH,High(LcdNmbr16) ; Load number
ldi ZL,Low(LcdNmbr16)
rcall LcdHex16
.ifdef sLcdDec16
ldi rmp,'='
rcall LcdChar
.endif
.endif
.ifdef sLcdDec16 ; Display 16 bit decimal?
ldi ZH,1 ; Line 2
ldi ZL,cLcdColumns-5
rcall LcdPos
ldi ZH,High(LcdNmbr16)
ldi ZL,Low(LcdNmbr16)
rcall LcdDec16
.endif
.ifdef sLcdBin16 ; Display 16 bit binary?
rcall LcdLine3 ; To the start of line 3
ldi rmp,'='
rcall LcdChar
ldi rmp,' '
rcall LcdChar
ldi ZH,High(LcdNmbr16)
ldi ZL,Low(LcdNmbr16)
rcall LcdBin16
.endif
.ifdef sLcdChars ; Display special chars?
ldi ZH,High(2*CodeChars)
ldi ZL,Low(2*CodeChars)
rcall LcdChars
rcall LcdLine4 ; To line 4
ldi ZH,High(2*Codeline)
ldi ZL,Low(2*Codeline)
rcall LcdTextC
.endif
;
Loop:
rjmp Loop
;
; The LCD routines
; tn24_lcd_busy.inc set to 4*20
; and saved with a new name
;
.include "tn24_lcd_busy_4x20.inc"
;
; Special characters for LCD
;
.ifdef sLcdChars
;
; Tabelle der Codezeichen
CodeChars:
.db 64,0,0,0,0,10,10,12,8,16 ; Z = 0, micro
.db 72,0,0,14,17,17,17,10,27,0 ; Z = 1, Omega
.db 80,0,0,0,10,17,21,10,0,0 ; Z = 2, omega
.db 88,0,1,27,1,1,0,0,0,0 ; Z = 3, power-1
.db 0,0
Codeline:
.db '1',0,"F, R=8",1,", ",2,"=0.1s",3,0xFE,0xFE
.endif
;
; End of source code
;
To the top of that page |
---|