[an error occurred while processing this directive] [an error occurred while processing this directive]
Кусок из проекта, вдруг поможет
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Сергей Гудков 20 февраля 2002 г. 00:05
В ответ на: Ответ: Да, при высокой контрастности чётко видны все пиксели. отправлено Лёха 19 февраля 2002 г. 09:39

#include "allmac.s90"
#include
#include "define.h"
#define PORT_LCD PORTC

//for GLCD
#define DISPLAY_DELAY 1000
#define DISPLAY_ON 0xaf
#define DISPLAY_OFF 0xae
#define DISPLAY_START_LINE 0xc0
#define DISPLAY_SET_PAGE 0xb8
//#define DISPLAY_SET_COLUMN 0x00
#define DISPLAY_SELECT_FORWARD 0xa0
#define DISPLAY_SELECT_REVERSE 0xa1
#define DISPLAY_STATIC_DRIVE_ON 0xa5
#define DISPLAY_STATIC_DRIVE_OFF 0xa4
#define DISPLAY_SELECT_DUTY32 0xa9
#define DISPLAY_SELECT_DUTY16 0xa8
#define DISPLAY_READ_MODIFY_WRITE 0xe0
#define DISPLAY_END_READ_MODIFY_WRITE 0xee
#define DISPLAY_RESET 0xe2

;****************************************************************************
MODULE LCD
EXTERN column
;ШИНА 8 BIT
;ОБОЗНАЧЕНИЕ ЛИНИЙ: P_A0, P_WR, P_CS, PORT_LCD
;P_A0 - ЛИНИЯ УПРАВЛЕНИЯ LCD
P_A0_1 MACRO
SBI PORTB,5
ENDM
P_A0_0 MACRO
CBI PORTB,5
ENDM

;P_WR - ЛИНИЯ УПРАВЛЕНИЯ LCD
P_WR_1 MACRO
SBI PORTB,7
ENDM
P_WR_0 MACRO
CBI PORTB,7
ENDM

;P_CS - ЛИНИЯ УПРАВЛЕНИЯ LCD
P_CS_1 MACRO
SBI PORTB,6
ENDM
P_CS_0 MACRO
CBI PORTB,6
ENDM
PUBLIC LCD_INSTR
PUBLIC LCD_INSTR_COLUMN
PUBLIC LCD_DATA
#define LCD_DIVIDE 62
RSEG CODE
;**************************
LCD_DATA: ;OUTPUT R16 IN PORT_LCD
LDS R17,column
INC R17
STS column,R17
OUT PORT_LCD,R16
CPI R17,LCD_DIVIDE
JNC LCD_CS2
SJMP LCD_CS1

;**************************
LCD_INSTR: ;OUTPUT R16 IN PORT_LCD
OUT PORT_LCD,R16
P_A0_0
SJMP LCD_CS12

;**************************
LCD_INSTR_COLUMN: ;OUTPUT R16 IN PORT_LCD ONLY FOR X-POS
STS column,R16
CPI R16,LCD_DIVIDE
JNC LCDI1
OUT PORT_LCD,R16
P_A0_0
RCALL LCD_CS1
CLR R16
SJMP LCDI2
LCDI1: SUBI R16,LCD_DIVIDE
LCDI2: OUT PORT_LCD,R16
P_A0_0
SJMP LCD_CS2

;**************************
LCD_CS1:;SIGNAL FOR DRIVER1
P_CS_0
LDI R16,4
LCD1: DJNZ R16,LCD1
P_WR_0
P_WR_1
LDI R16,4
LCD3: DJNZ R16,LCD3
P_CS_1

LCD0: P_A0_1
;BASE DELAY LCD
LDI R16,4;2
LCD4: DJNZ R16,LCD4
WDT
RET

;**************************
LCD_CS2:;SIGNAL FOR DRIVER2
P_WR_0
P_WR_1
SJMP LCD0

;**************************
LCD_CS12:;SIGNAL FOR DRIVER1 & DRIVER2
P_WR_0
P_CS_0
P_CS_1
P_WR_1
SJMP LCD0
;**************************
ENDMOD

;****************************************************************************
MODULE glcdInit_ASM
PUBLIC glcdInit_ASM
//PUBLIC glcdReset_ASM
PUBLIC glcdClear_ASM
PUBLIC glcdBMP_ASM
EXTERN LCD_INSTR
EXTERN LCD_DATA
EXTERN column
EXTERN tabBMP
RSEG CODE
glcdInit_ASM
LDI R16,DISPLAY_RESET
RCALL LCD_INSTR
; LDI R16,DISPLAY_SELECT_FORWARD
; RCALL LCD_INSTR
; LDI R16,DISPLAY_STATIC_DRIVE_OFF
; RCALL LCD_INSTR
; LDI R16,DISPLAY_SELECT_DUTY32
; RCALL LCD_INSTR
LDI R16,DISPLAY_ON
RCALL LCD_INSTR
RCALL glcdClear_ASM
RET

;glcdReset_ASM
; LDI R16,DISPLAY_RESET
; SJMP LCD_INSTR

;**************************
glcdClear_ASM
;PARAN IN: R16=0 - ALL STRING, R16=1 - 3 LOW STRING
;CLEAR DISPLAY
LDI R19,4 ;4 STRING
CLR R20 ;FIRST STRING
TST R16
JZ INIT2
LDI R19,3 ;3 STRING
LDI R20,1 ;FIRST STRING
INIT2: MOV R16,R20
INC R20
ORI R16,DISPLAY_SET_PAGE
RCALL LCD_INSTR
RCALL LCD_INSTR ;COLUMN=0
STS column,R16
LDI R18,NUMBER_POINT
INIT1: RCALL LCD_DATA
DJNZ R18,INIT1
DJNZ R19,INIT2
RET
;**************************
glcdBMP_ASM
;PARAN IN:
;DRAW BMP
LDI R19,4 ;4 STRING
CLR R20 ;FIRST STRING
LDWI ZH,ZL,tabBMP
BMP2: MOV R16,R20
INC R20
ORI R16,DISPLAY_SET_PAGE
RCALL LCD_INSTR
RCALL LCD_INSTR ;COLUMN=0
STS column,R16
LDI R18,NUMBER_POINT
BMP1: LDC_INC 16
RCALL LCD_DATA
DJNZ R18,BMP1
DJNZ R19,BMP2
RET

ENDMOD


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru