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