Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Nokia 3310 LCD 84x48 graphical display works fine Kategorie: Hardware (von Carsten - 4.01.2006 9:35)
 Als Antwort auf Nokia 3310 LCD 84x48 graphical display works fine von Stefan Op de Beek - 4.01.2006 0:27
Carsten nutzt:  CC1-M-Unit V1.2/2.0
Looks very nice! Compliments! Where did you find the datasheet of the display?

Carsten

> I connected a Nokia 3310 LCD display to the C-Control. I had to convert 5 to 3 V using a LM317 and a 74HC245. The display is quite dumb in terms of characters etc. It is just a graphical display and character sets must be loaded in the microcontroller itself. The display is controlled using SPI protocol. Quite simple: data is clocked in to the data input each high->low cycle of the clock. As a demonstration I donwloaded a bitmap on the display as can be seen on picture.
>
> For your interest, the source code:
> '--------------------------
> '------ I/O PORTS ---------
> '--------------------------
> ' 1 vdd
> ' 2 sclk
> ' 3 sdin
> ' 4 d/c
> ' 5 sce
> ' 6 gnd
> ' 7 vout
> ' 8 res
> define nok_sclk port[13]
> define nok_sda port[12]
> define nok_dc port[11]
> define nok_cs port[10]
> define nok_res port[9]
> define i as byte
> define row as byte
> define column as byte
> define iloop as byte
> define oloop as byte
> define tmp as byte
> define tmp2 as byte
> define x as word
> define val as byte
>
> goto main
>
> '------ SHOW A HEX NIBBLE -------------------------
> FUNCTION HEXNIBBLE(TEMP as byte)
> if TEMP<10 then
> put (TEMP+48)
> ELSE
> put (TEMP+55)
> END IF
> END FUNCTION
> '-------------------------------------------------
> '--   SHOW CONTENT OF VAL AS HEX VALUE           -
> '-------------------------------------------------
> FUNCTION SHOW_HEX(VAL as byte)
> define TEMP as byte
> TEMP=VAL/16
> HEXNIBBLE(TEMP)
> TEMP=VAL MOD 16
> HEXNIBBLE(TEMP)
> END FUNCTION
>
>
>
> FUNCTION DELAY (DEL as byte)
> for oloop=0 to DEL '10ms steps
> for iloop=1 to 200
> NEXT
> NEXT
> END FUNCTION
>
>
> function NLCD_Write (data as byte, mode as bit)
>         put data
>           ' Pull nok_dc true or false depending on mode
>           if (mode) then
>              nok_dc = true
>           else
>              nok_dc = false
>           end if
>           nok_cs = false
>           ' Clock in 8 bits of data
>           for i = 1 to 8
>               nok_sclk = false
>               if  (data and 80h) = 0 then
>                  nok_sda = false
>               else
>                   nok_sda = true
>               end if
>               nok_sclk = true
>               data = data shl 1
>           next i
>          
>           nok_cs = true
> End Function
>
> function NLCD_GotoXY (xnokia as byte, ynokia as byte)
>           NLCD_Write( 40h or ( ynokia and 7h ), false)
>           NLCD_Write( 80h or ( xnokia and 7fh ), false)
> end function
>
> function NLCD_Clear()
> '  Data bit is false
>         nok_sda = false
>           '  Data mode
>           nok_dc = true
>           nok_cs = false
>          
>           for row= 1 to 6
>               ' 6 rows
>               for column = 1 to 84
>                   ' 84 columns or "pages"
>                   for i=1 to 8
>                       ' Clock for the 8 bits of the "page"
>                       nok_sclk = false
>                       nok_sclk = true
>                   next i
>               next column
>           next row
> end function
>
> function NLCD_Init()
>           ' Set initial status of LCD pins
>           nok_sclk = false
>           nok_sda = false
>           nok_dc = false
>           nok_cs = false
>           nok_res = false
>
>           ' Toggle LCD Reset
>           DELAY(1)
>           nok_res = false
>           DELAY(25)
>           nok_res = true
>          
>           nok_cs = true
>           ';; Extended commands
>           NLCD_Write (21h, false)
>           ';; LCD Vop
>           NLCD_Write (c5h, false)
>             ';; Temp coef
>           NLCD_Write (6h, false)
>            ';; LCD Bias 1:48
>           NLCD_Write (13h, false)
>           ';; Standard commands
>           NLCD_Write (20h, false)
>            ';; Normal Mode
>           NLCD_Write (0ch, false)
>          
>           ' Clear and position at top of LCD
>           NLCD_Clear();
>           NLCD_GotoXY(0,0);
>
> end function
>
> #main
> NLCD_Init()
> ' NLCD_GotoXY (0,0)
> FOR x = 1 TO 504
>    val = Looktab(bmp_table,x)
>          
>    NLCD_Write(val,true)
> next x
> end
>
> Table bmp_table
>  00 00 00 00 00h F8h F8h 60h 80h F8h F8h 00h
> C0h E0h 20h 20h E0h C0h 00h F8h
> F8h 80h C0h 60h 20h 00h E8h E8h
> 00h 40h A0h A0h E0h C0h 00h 00h
> 00h 00h 10h 18h 48h F8h B0h 00h
> 10h 18h 48h F8h B0h 00h 60h 30h
> F8h F8h 00h 00h F0h F8h 08h F8h
> F0h 00h 00h 00h 00h F8h F8h 00h
> 00h 00h 00h 00h E0h F0h 18h 08h
> 08h 18h 10h 00h F8h F8h 08h 08h
> F8h F0h 00h 00h
> 00h 07h 07h 00h 01h 07h 07h 00h
> 03h 07h 04h 04h 07h 03h 00h 07h
> 07h 01h 03h 87h 84h 80h 07h 07h
> 00h 03h 07h 04h 07h 07h 80h 80h
> 80h 00h 02h 06h 04h 07h 03h 00h
> 02h 06h 04h 07h 03h 00h 00h 80h
> 07h 07h 00h 00h 03h 07h 04h 07h
> 03h 00h 00h 00h 80h 07h 07h 04h
> 04h 84h 04h 00h 01h 03h 06h 84h
> 04h 06h 82h 80h 87h 07h 04h 04h
> 07h 03h 00h 00h  
> 00h 00h 3Ch 42h 42h 42h 3Ch 00h
> 7Eh 02h 02h 02h 7Ch 00h 00h 00h
> 00h 1Eh 21h 40h 40h 40h 21h 00h
> 10h 10h 10h 00h 1Eh 21h 40h 40h
> 40h 21h 00h 3Ch 42h 42h 42h 3Ch
> 00h 7Eh 02h 02h 02h 7Ch 02h 7Fh
> 42h 00h 7Eh 04h 02h 00h 3Ch 42h
> 42h 42h 3Ch 00h 7Fh 00h 00h 00h
> 00h 7Fh 03h 1Ch 60h 1Ch 03h 7Fh
> 00h 41h 60h 50h 48h 47h 00h 00h
> 00h 00h 00h 00h  
> 01h 01h FFh 00h C0h 70h 18h 08h
> 08h 18h 30h E0h 80h 00h 00h 00h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h 80h 80h 80h 80h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h 00h 00h 00h 00h
> 00h 00h 00h 00h  
> 01h 01h FFh 1Eh 03h 00h 00h 00h
> 00h 00h 00h 00h 07h 1Ch F0h 80h
> 00h 00h 00h 00h 00h 00h 00h 80h
> E0h 38h 0Eh 03h 01h 00h 00h 00h
> 00h 01h 01h 06h 18h 70h C0h 80h
> 00h 00h 80h F0h 10h 18h 08h 08h
> 18h 10h 60h 40h 00h 00h 00h 00h
> 80h 40h 40h 40h 40h 80h 00h 00h
> 80h 40h 40h 40h 80h 00h 00h 00h
> 00h 00h 00h C0h 00h C0h 40h 40h
> 40h 40h 80h 00h  
> 81h 81h FFh 80h 80h 80h 80h 80h
> 80h 80h E0h 80h 80h 80h 80h 83h
> 82h 82h E6h 84h 86h 82h 81h 81h
> 80h 80h E0h 80h 80h 80h 80h 80h
> 80h 80h E0h 80h 80h 80h 80h 81h
> 81h 81h E0h 80h 80h 80h 80h 80h
> 80h 80h E0h 80h 80h 80h 00h 00h
> 11h 22h 22h 24h 24h 18h 00h 0Fh
> End Table
>

 Antwort schreiben

Bisherige Antworten:

Re: Nokia 3310 LCD 84x48 graphical display works fine (von Stefan Op de Beek - 6.01.2006 9:55)