Atmel AT89C2051 LCD sample project
نمونه در ادامه مطلب.
Atmel AT89C2051 LCD sample project
This shows how to interface an Hitachi 2×16 LCD display to a 2051. To minimise the usage of processor pins the LCD will be driven in 4 bit mode.
LCD project running sample program.
LCD mounted on a 1 inch prototype board. A DT004 is used as a mother board and a DT104 is used as the processor board.
Circuit of the Simmbus to LCD interface
Mounting of the LCD 14 pin single inline header connector to a Dontronics 1 inch prototype board. The connections from the LCD connector to the Simmbus is done on the back of the board.
The pot is for LCD contrast.
Back view showing jumpers.
Sample program used to get the display shown above in the photos.
;Written by Peter Averill ;LCD demo program ; $mod2051 CR EQU 0dh ; carriage return LF EQU 0ah ; line feed ;lcd equates rs equ p1.2 en equ p1.3 db4 equ p1.4 db5 equ p1.5 db6 equ p1.6 db7 equ p1.7 count equ r0 datcom bit 0 DSEG AT 0020H ORG 0030H ; stack origin stack: DS 20H ; stack depth ; CSEG ORG 0000H ; power on/reset vector Jmp cold_start ORG 0003H ; external interrupt 0 vector Reti ; undefined ORG 000BH ; timer 0 overflow vector reti ORG 0013H ; external interrupt 1 vector Reti ; undefined ORG 001BH ; timer 1 overflow vector reti ; undefined ORG 0023H ; serial I/O interrupt vector reti ; ORG 40H ; begin constant data space setup: DB 033h,032h,028h,00eh db 002h,001h,0ffh mess: db 'Victoria Uni',0ffh mess1: db 'Electronics',0ffh ; ; USING 0 ; register bank zero cold_start: mov sp, #(stack-1) ; initialize stack pointer mov a,#0ffh call delay_ms clr datcom ;send commands mov dptr, #setup ;lcd setup string call send_string setb datcom ;send data mov dptr, #mess call send_string mov a,#0c0h ;select second row of lcd clr datcom ;send command call send_char mov dptr, #mess1 setb datcom ;send data call send_string repeat: jmp repeat ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; send_string: ; Transmit string pointed to by DPTR. ; String may be of any length, but must be null-terminated. Push acc push dpl push dph ss1: clr a movc a, @a+dptr ; get character inc a jz ss2 ; check for terminator dec a call send_char ; send character inc dptr ; point to next character jmp ss1 ss2: pop dph pop dpl pop acc ret ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; send_char: mov c,datcom mov rs,c clr en mov c,acc.4 mov db4,c mov c,acc.5 mov db5,c mov c,acc.6 mov db6,c mov c,acc.7 mov db7,c setb en clr en push acc mov a,#4h call delay_ms pop acc mov c,acc.0 mov db4,c mov c,acc.1 mov db5,c mov c,acc.2 mov db6,c mov c,acc.3 mov db7,c setb en clr en mov a,#4h call delay_ms ret ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_ms: ; Delay for one mS times the value in the accumulator. Push acc push b mov b, #0 dd: djnz b, $ ; 500 uS @ 12 MHz djnz b, $ ; 500 uS @ 12 MHz djnz acc, dd pop b pop acc ret ; end