Pfad: Home => AVR-DE => Anwendungen => LCD-Ansteuerung mit AVR => Beispiel 4-Bit
LCD klein AVR-Anwendungen

LCD-Ansteuerung mit AVR in Assembler

Beispielanwendung von "lcd.inc" 4-Bit
Logo

Beispielanwendung der lcd.inc im 4-Bit-Modus an einem ATtiny24

Der Assembler-Quellcode, wie er hier angezeigt wird, ist hier downloadbar.

;
; *********************************
; * Test der LCD include routinen *
; * (C)2018 avr-asm-tutorial.net  *
; *********************************
;
.nolist
.include "tn24adef.inc" ; Define device ATtiny24A
.list
;
; **********************************
;        H A R D W A R E
; **********************************
;
; Device: ATtiny24A, Package: 14-pin-PDIP_SOIC
;            ________
;         1 /        |14
;  + 5 V o--|VCC  GND|--o 0 V
; LCD-RS o--|PB0  PA0|--o PA0
; LCD-E  o--|PB1  PA1|--o PA1
;  RESET o--|RES  PA2|--o PA2
; LCD-RW o--|PB2  PA3|--o PA3
; LCD-D7 o--|PA7  PA4|--o LCD-D4
; LCD-D6 o--|PA6  PA5|--o LCD-D5
;           |________|
;
; **********************************
;   A D J U S T A B L E   C O N S T
; **********************************
;
; Parameter-Satz der Einstellungen
  .equ clock = 1000000 ; Taktfrequenz Prozessor in Hz
; LCD-Groesse:
  .equ LcdLines = 4 ; Anzahl Zeilen (1, 2, 4)
  .equ LcdCols = 20 ; Anzahl Zeichen pro Zeile (8..24)
; LCD-Ansteuerung
  .equ LcdBits = 4 ; Busbreite (4 oder 8)
  ; Wenn 4-Bit-Ansteuerung:
    .equ Lcd4High = 1 ; Busnibble (1=Oberes, 0=Unteres)
  .equ LcdWait = 0 ; Ansteuerung (0 mit Busy, 1 mit Warteschleifen)
; LCD-Datenports
  .equ pLcdDO = PORTA ; Daten-Ausgabe-Port
  .equ pLcdDD = DDRA ; Daten-Richtungs-Port
; LCD-Kontrollports und -pins
  .equ pLcdCEO = PORTB ; Control E Ausgabe-Port
  .equ bLcdCEO = PORTB2 ; Controll E Ausgabe-Portpin
  .equ pLcdCED = DDRB ; Control E Richtungs-Port
  .equ bLcdCED = DDB2 ; Control E Richtungs-Portpin
  .equ pLcdCRSO = PORTB ; Control RS Ausgabe-Port
  .equ bLcdCRSO = PORTB0 ; Controll RS Ausgabe-Portpin
  .equ pLcdCRSD = DDRB ; Control RS Richtungs-Port
  .equ bLcdCRSD = DDB0 ; Control RS Richtungs-Portpin
; Wenn LcdWait = 0:
  .equ pLcdDI = PINA ; Daten-Input-Port
  .equ pLcdCRWO = PORTB ; Control RW Ausgabe-Port
  .equ bLcdCRWO = PORTB1 ; Control RW Ausgabe-Portpin
  .equ pLcdCRWD = DDRB ; Control RW Richtungs-Port
  .equ bLcdCRWD = DDB1 ; Control RW Richtungs-Portpin
; Wenn Dezimalwandlung:
.equ LcdDecimal = 1
; Wenn Hexwandlung:
.equ LcdHex = 1
; Wenn nur Simulation im SRAM:
  ;.equ avr_sim = 1 ;  1=Simulieren, 0 oder ndef=Nicht simulieren
;
; **********************************
;  F I X  &  D E R I V.  C O N S T
; **********************************
;
;
; **********************************
;       R E G I S T E R S
; **********************************
;
.def rmp = R16
;
; **********************************
;           S R A M
; **********************************
;
.dseg
.org SRAM_START
.byte 16
;
; **********************************
;         C O D E
; **********************************
;
.cseg
.org 000000
;
; **********************************
; R E S E T  &  I N T - V E C T O R S
; **********************************
;	rjmp Main ; Reset vector
;	reti ; EXT_INT0
;	reti ; PCI0
;	reti ; PCI1
;	reti ; WATCHDOG
;	reti ; ICP1
;	reti ; OC1A
;	reti ; OC1B
;	reti ; OVF1
;	reti ; OC0A
;	reti ; OC0B
;	reti ; OVF0
;	reti ; ACI
;	reti ; ADCC
;	reti ; ERDY
;	reti ; USI_STR
;	reti ; USI_OVF
;
; **********************************
;  I N T - S E R V I C E   R O U T .
; **********************************
;
; Add all interrupt service routines
;
; **********************************
;  M A I N   P R O G R A M   I N I T
; **********************************
;
Main:
  ldi rmp,Low(RAMEND)
  out SPL,rmp ; Init LSB stack pointer
  rcall LcdInit
  ldi ZH,High(2*Codezeichen)
  ldi ZL,Low(2*Codezeichen)
  rcall LcdSpec
  ldi ZH,High(2*InitText)
  ldi ZL,Low(2*InitText)
  rcall LcdText
; ...
  ;sei ; Enable interrupts
;
; **********************************
;    P R O G R A M   L O O P
; **********************************
;
Loop:
  rjmp loop
;
; Include LCD-Routinen
.include "lcd.inc"
;
InitText:
.db "lcd.inc 4-bit busy",0x0D,0xFF
.db "Display 4x20",0x0D,0xFF
.db "Spezialzeichen:",0x0D
.db 0x00,' ',0x01,' ',0x02,' ',0x03,' ',0x04,' ',0x05,' ',0x06,' ',0x07,0xFF
.db 0xFE,0xFF

;
; Tabelle der Codezeichen
Codezeichen:
.db 64,0,0,12,6,31,6,12,0,0 ; Z = 0, Pfeil rechts
.db 72,0,0,6,12,31,12,6,0,0 ; Z = 1, Pfeil links
.db 80,0,4,14,31,21,4,4,4,0 ; Z = 2, Pfeil hoch
.db 88,0,4,4,4,21,31,14,4,0 ; Z = 3, Pfeil runter
.db 96,0,0,15,3,5,9,16,0,0 ; Z = 4, Pfeil rechts hoch
.db 104,0,0,16,9,5,3,15,0,0 ; Z = 5, Pfeil rechts runter
.db 112,0,0,1,18,20,24,30,0,0 ; Z = 6, Pfeil links runter
.db 120,0,0,30,24,20,18,1,0,0 ; Z = 7, Pfeil links hoch
.db 0,0 ; Ende der Tabelle
;

; End of source code
;



Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über das Kommentarformular an mich.

Zum Anfang dieser Seite

©2018 by http://www.avr-asm-tutorial.net