Rotina em ASM pro LCD NOKIA 6100 COLOR

Software e Hardware para uC Texas

Moderadores: andre_luis, 51

Rotina em ASM pro LCD NOKIA 6100 COLOR

Mensagempor gafar » 23 Out 2006 09:32

Pessoal,
Esta rotina envia uma imagem de 60x60 (RGB) para o LCD Nokia 6100 color, usando um MSP430F1232. Se tiver um micro com maior capacidade de memória poderá ser usada pra enviar imagem em resolução de 132x132 com 65k de cores(16bits).

;******************************************************************************
; MSP-FET430x110
; Esta rotina envia dados para o display do celular da nokia 6100
;******************************************************************************
#include "msp430x12x.h"
#
#define sclk BIT1
#define dce BIT0
#define sda BIT2
#define reset BIT3
#define portlcd P3OUT
#define portlcddir P3DIR

vermelho equ 0e000h
verde equ 1c00h
azul equ 03000h
magenta equ 0e300h
amarelo equ 1f00h
cyan equ 0fc00h
branco equ 0ff00h
preto equ 0000h
contraste equ 3400h
posi_x equ 4100h
posi_y equ 8100h ;3100h
linha_s equ 0600h

; R5-inicio de endereços
; R6-dados carregados
; R7-contador
; R8-contador
; R9-pause
; R10-numero de byte desejado a ser enviado
;------------------------------------------------------------------------------
ORG 0E000h ;
;------------------------------------------------------------------------------
RESET mov.w #300h,SP ; Initialize 'x1121 stackpointer
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
SetupBC bis.b #XTS,&BCSCTL1 ; LFXT1 = HF XTAL
SetupOsc bic.b #OFIFG,&IFG1 ; Clear OSC fault flag
mov.w #0FFh,R15 ; R15 = Delay
SetupOsc1 dec.w R15 ; Additional delay to ensure start
jnz SetupOsc1 ;
bit.b #OFIFG,&IFG1 ; OSC fault flag set?
jnz SetupOsc ; OSC Fault, clear flag again
bis.b #SELM1+SELM0,&BCSCTL2 ; MCLK = LFXT1
mov.b #11111111b,P1DIR ; seta como saida
mov.b #11111111b,P2DIR ; seta como saida
mov.b #11111111b,P3DIR ; seta como saida
mov.b #00000000b,P1OUT ; limpa port
mov.b #00000000b,P2OUT ; limpa port
mov.b #00000000b,P3OUT ; limpa port


bis.b #dce,&portlcd ; dce = 1
bic.b #sclk,&portlcd ; clk = 0
bis.b #reset,&portlcd ; reset = 1
bis.b #BIT0,&P2OUT
call #Init_lcd
jmp Inicio


Init_lcd bic.b #reset,&P3OUT ;colocar nivel 0 do BIT7 no reset LCD NOKIA
call #To_aqui ; delay
call #To_aqui
call #To_aqui

bis.b #reset,&P3OUT

mov #0100h,R6 ;reset
call #Comando

mov #1100h,R6 ;sleep
call #Comando

mov #2900h,R6 ;lcd on
call #Comando
call #To_aqui
call #To_aqui

mov #0300h,R6 ;booster
call #Comando
call #To_aqui
call #To_aqui

mov #1300h,R6 ;normal
call #Comando

; mov #2100h,R6 ;inv_off
; call #Comando

mov #0ba00h,R6 ;data order
call #Comando

mov #3a00h,R6 ;set color
call #Comando
mov #0200h,R6 ;rgb
call #Dados

mov #02500h,R6 ;set contrast
call #Comando
mov #contraste,R6 ;
call #Dados
;ret

mov #2d00h,R6 ;RGBSET
call #Comando

call #W_tabela ;LUT
call #W_tabela ;LUT
call #W_tabela_1 ;LUT


ret

;----------------------------------------------------------------------


Inicio
mov #3600h,R6 ;memory data acess
call #Comando
mov #4800h,R6 ;rgb ;68
call #Dados

call #Pos_x
call #Pos_y

mov #2c00h,R6 ;dados
call #Comando

mov #0000,R5 ; zera R5

; call #Loope ; envia as core pro lcd
call #Palhaco

Tosta call #Pisca
jmp Tosta


;----------------------------------------------------------------------------
; envia cores pro painel

Loope
mov #branco,R6 ; cor do painel
call #Dados ; carrega dois byte em r6
inc R5
cmp #4096d*4,R5
jne Loope
ret
;----------------------------------------------------------------




;***************************************************************

Palhaco

call #Pos_x1
call #Pos_y1

mov #2c00h,R6 ;dados
call #Comando
;******************************************************
mov #4096d,R5 ; contador de bytes ;********************
mov #Imagem,R10
;******************************************************
repete:
mov @R10,R6 ; carrega r6 com conteudo da memoria
swpb r6
call #Dados ; envia dado
inc R10
dec R5
jne repete
ret


;----------------------------------------------------------------
Pos_x
mov #2a00h,R6 ;set x
call #Comando
mov #0200h,R6 ;
call #Dados
mov #8100h,R6 ;
call #Dados
ret
Pos_y
mov #2b00h,R6 ;set y
call #Comando
mov #0200h,R6 ;
call #Dados
mov #8100h,R6 ;
call #Dados
ret

Pos_x1
mov #2a00h,R6 ;set x
call #Comando
mov #0200h+4100H,R6 ;
call #Dados
mov #4100H+4100H,R6 ;69
call #Dados
ret
Pos_y1
mov #2b00h,R6 ;set y
call #Comando
mov #0200h+4200H,R6 ;
call #Dados
mov #8400H,R6 ;
call #Dados
ret


;-----------------------------------------------------------------------
W_tabela
mov #0000h,R6 ;
call #Dados
mov #0200h,R6 ;
call #Dados
mov #0400h,R6 ;
call #Dados
mov #0600h,R6 ;
call #Dados
mov #0900h,R6 ;
call #Dados
mov #0b00h,R6 ;
call #Dados
mov #0d00h,R6 ;
call #Dados
mov #0f00h,R6 ;
call #Dados
ret

W_tabela_1
mov #0000h,R6 ;
call #Dados
mov #0400h,R6 ;
call #Dados
mov #0b00h,R6 ;
call #Dados
mov #0f00h,R6 ;
call #Dados
ret

;------------------------------------------------------------------------
; esta rotina envia uma word via protoclo I2C
; R6 contem dado a ser enviado R8, R7 reg auxilar
;------------------------------------------------------------------------
Comando bic.b #dce,&portlcd ; sce = 0
nop
bic.b #sda,&portlcd ; data = 0
nop
bis.b #sclk,&portlcd ; clock =1
nop
bic.b #sclk,&portlcd ; clock = 0
jmp manda

Dados bic.b #dce,&portlcd ; sce = 0
nop
bis.b #sda,&portlcd ; data = 1
nop
bis.b #sclk,&portlcd ; clock =1
nop
bic.b #sclk,&portlcd ; clock = 0

manda
clr R7

Rota call #Rotabit
bis.b #sclk,&portlcd ; clock =1
nop
bic.b #sclk,&portlcd ; clock = 0

inc R7
cmp #08d,R7
jne Rota
bis.b #dce,&portlcd ; sce = 1
ret

To_aqui inc R9
cmp #0000fh,R9
jne To_aqui
clr R9
ret

;-----------------------------------------------------------------------------
Rotabit
;------------------------------------------------------------------------
rla R6
jnc Envia
bis.b #sda,&portlcd ; data = 1
ret
Envia
bic.b #sda,&portlcd ; data = 0
ret
;--------------------------------------------------------------
Pisca xor.b #001h,&P2OUT ; Toggle P1.0
; mov.b #04,r4

Wait mov.w #060000,R15 ; Delay to R15
L11 dec.w R15 ; Decrement R15
jnz L11 ; Delay over?
; dec r4
; jnz Wait
ret ; Again

;----------- Interrupção--------------------------------------------------------------
WDT_ISR
RET
;-----------------------------------------------------------------------------
; Interrupt Vectors Used MSP430x11x1
;-----------------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET Vector
DW RESET ;
ORG 0FFF4h ; WDT Vector
DW WDT_ISR ;

;-----------------------------------------------------------------------------
; Tabela do palhaco em hexadecimal
;-----------------------------------------------------------------------------

ORG 0E500H
Imagem
Colocar aqui o arquivo da imagem de 60x60 256 cores

DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFh
END
Avatar do usuário
gafar
Bit
 
Mensagens: 26
Registrado em: 23 Out 2006 08:07
Localização: São Paulo SP

Voltar para Texas

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x