Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Jak zobrazit znaky a čísla na Display 1x16 2x16 4x16?
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Korado



Založen: Dec 10, 2014
Příspěvky: 7

PříspěvekZaslal: st prosinec 10 2014, 23:33    Předmět: Jak zobrazit znaky a čísla na Display 1x16 2x16 4x16? Citovat

Dobrý den,
začátkem prosince jsem zakoupil z TME vývojový kit Easy8051 v6 pro procesory Atmel na bázi uP 8051. Umí seriově progamovat pomocí On board programovacího interface procesory, které jsou na to vybavené .. např s-ková řada. Kit obsahuje i 1ks AT89s8253. Na boardu je také alfanumerický LCD display 2x16 znaků, zapojený v "nějakém" 4-bitovém modu. Kdysi jsem psal nějaké programy pro přípravky s 89C51 (ty v něm bohužel naprogramovat nelze), ale se zobrazováním na displayi moc zkušenosti nemám a zde použitý 4-bitový mod mi nic neříká. Na internetu jsem našel pouze Datasheet pro alfanum. LCD display LM 162551 firmy Sharp a i tam je to podáno pro mě nezkušeného dosti těžkopádně. Není zde někdo , kdo má se zobrazováním na display, ať již v normálním nebo oním 4-bitovém modu nějaké zkušenosti a mohl by mi poslat návod nebo nějaký DataSheet z kterého je postup snadno pochopitelný i začátečníkovi, případně příklad v assembleru s komentářem, jak se přistupuje po zběrnici na display a jak se docílí zobrazení požadovaného čísla či znaku. Vím, že display má konektoru Datovou sběrnici, řídící signály RS, W/R, En, ovládání jasu a kontrastu a v sobě má znakovou sadu, ze které se dá znak vybrat a zobrazit na pozici , která se musí nějak někam zadat , že se tam dá zadat i pár uživatelských znaků, ale víc toho nevím.
Za vaše odpovědi předem děkuji a nabízím za poštovné možnost naprogramování procesorů, které tento kit zvládne. Jsem z okolí města Ústí nad Orlicí a zájemcům z regionu to mohu naprogramovat na počkání, když mi dají příslušný HEX soubor.

Návod, Datasheet či příklady mi případně můžete poslat na mail: katanykorado@seznam.cz.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bastlir40



Založen: Aug 27, 2010
Příspěvky: 463
Bydliště: Příbram

PříspěvekZaslal: čt prosinec 11 2014, 0:34    Předmět: Citovat

Na stránkách GME najdeš většinou u každé součástky datasheet. Tam si najdi ten displej, který máš na vývoj. desce. Komunikace ve 4 bitovem modu znamená, že používáš jen vstupy D4 až D7 (piny 11 až 14). Assembler jsem nikdy nepochopil a co se týká Cčka, tak tam musíš mít knihovnu pro LCD. Víc ti určitě poradí nějaký borec v programování, kterých je tu dost ale já mezi ně bohužel nepatřím. Smile
_________________
Zdraví vás Mirek

www.mojeelektro.xf.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: čt prosinec 11 2014, 0:44    Předmět: Citovat

Já ty knihovny pro 8051 mám. Moje, ale snad pochopitelný. Důležitá je inicializace displeje při zapnutí, popř. při hot restartu procesoru, kdy se dá displej krásně zblbnout....
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Korado



Založen: Dec 10, 2014
Příspěvky: 7

PříspěvekZaslal: čt prosinec 11 2014, 0:54    Předmět: Citovat

Dík za reakci. No, já právě přesně nevím, co je to za typ, je to od firmy MIKROELEKTRONIKA, je na tom kitu zapojený ve 4-bitovém modu a nějaké typové označení neuvádějí a ani není vidět na desce displaye, vím jenom že je 2x16 a že je zapoojený pro 4-bitový režim. Mám kromě toho na tom kitu ještě jeden 2x16 ... jak jsem psal ten od Sharpa a ještě jeden 4x16, ale od toho jsem vyhledávačem žádný Datasheet nenašel ani v GM ani v TME ani jinde Sad .Napsat něco v Assembleru mi nedělá problém, ale musím vědět, co mám na tu "svorkovnici .... sběrnici " displaye posílat a jestli musím ty znaky vytahovat adresací z jeho paměti, nebo jestli se to dá posílat i nějak přímo do zobrazovací paměti RAM displaye a jak si mohu nadefinovat uživatelské znaky. Asi budou mít většinou LCD displaye stejný systém, ale potřeboval bych ho mít pro mě přijatelným a pochopitelným způsobem napsaný. Něco málo jsem k tomu našel, ale nic uceleného. Jinak mě zajímá i normální 8-bitový režim. V diskusích ještě píšou něco o nějakém řadiči HD 44780 .. ten asi bude na desce displaye a ten zpracovává posílané instukce.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Korado



Založen: Dec 10, 2014
Příspěvky: 7

PříspěvekZaslal: čt prosinec 11 2014, 1:04    Předmět: Citovat

Tak to bys byl moc laskav a udělal bys mi velikou radost, kdybys mi je mohl poslat, abych se v tom trochu porochňal, ..protože já to potřebuju pochopit, nechci jenom slepě používat podprogramy, o kterých bych neměl šajnu, jak fungují. Chci po delší pauze zase začít programovat nějaké aplikace v 51 assembleru a chci začít s automatickým otevíráním slepic a k tomu potřebuju i display, kvůli nastavování režimu. Na netu jsem našel poměrně slušný Simulátor s compilérem a programátor s ovladačem jsou v tom kitu. Mám doma i starý emulátor 51-ky, ale bohužel je na počítač s IDE konektorem a já mam už jenom PCI, tak nevím, jestli se na to dá udělat nějaká přechodka, abych ho mohl i nadále používat. Nevím ale bohužel, jaké mají tyto dva konektory zapojení signálů, abych si ji, když to půjde, mohl sám udělat Sad.
Potom bych rád udělal prodram pro nastavování úhlu natočení pomocí krového motoru .. např. pro solární panel.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: čt prosinec 11 2014, 1:06    Předmět: Citovat

Pošlu to sem, ale musíš vydržet, hned to nebude.
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Korado



Založen: Dec 10, 2014
Příspěvky: 7

PříspěvekZaslal: čt prosinec 11 2014, 1:37    Předmět: Citovat

Neboj, vydržím. Teď jsem sice našel popis funkce displayů, o kterých tu jde řeč, ale vnitřní instrukce displaye jsou tam pouze dobře popsané .. co dělají, ale není tam uveden jejich kód, nebo popis, v které pozici posílaného Byte/ čveřice bitů a jaké logické úrovni se jednotlivé bity mají nacházet Sad.

Uf, uf, tak teď jsem našel většinu toho, co jsem poteboval:


http://elektronika.kvalitne.cz/ATMEL/necoteorie/LCDmatice.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
gmike



Založen: Sep 26, 2009
Příspěvky: 94

PříspěvekZaslal: čt prosinec 11 2014, 6:43    Předmět: Citovat

Knihovnu v assembleru pro s8253 mám, můžu kdyžtak odpoledne poslat.
Jinak ten dislej je určitě s řadičem HD44780 nebo kompatibilním, jakmile vyhledáš np. "hd44780 programming" do googlu tak najdeš úplně všechno co potřebuješ. Například toto: http://www.8052.com/tutlcd2.php
Případně koupit toto: http://shop.ben.cz/cz/121169-prace-s-inteligentnimi-displeji-lcd.aspx

Pokud to myslíš s programováním vážně, tak jsi zvolil správný postup. U assembleru pochopíš co a jak v uC funguje. Ale do ničeho většího než ten displej a jednoduchý np. teploměr bych už v assembleru nešel. Vyznat se pak ve stovkách až tisících řádků kódu, řešit meziskoky a hledat chyby bych už znovu nechtěl dobrovolně podstupovat. Nainstaluj si Keil (jsou pro něho i simulátory alfanum. displeje), kup si toto
http://shop.ben.cz/cz/121280-c-pro-mikrokontrolery-atmel-at89s52.aspx
http://shop.ben.cz/cz/121320-programovani-mikrokontroleru-s-jadrem-8051-v-jazyce-c.aspx
a můžeš začít naplno. Sám jsem si to před časem zažil a byl jsem mile překvapen, jak se snadno, rychle a přehledně se dají psát kódy (v porovnání k ASM).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2657

PříspěvekZaslal: čt prosinec 11 2014, 7:54    Předmět: Citovat

Nazdar,

mohu-li Ti poradit, zkus se podívat sem: http://www.mikroe.com/mikroc/8051/specification/

Je to celé kompletní vývojové prostředí, můžeš si vybrat jazyk C, Pascal (ten jsem si vybral já, ale pro PICy) nebo Basic. Jsou u toho příklady, můžeš samozřejmě přepnout i do assembleru. Je k tomu vývojová deska - ta už ale něco stojí, SW je pro malé aplikace do asi 2kB zadarmo.
Má to hotové všechny knihovny, tzn. podle příkladu navolíš připojení datových vodičů k displeji, ovládacích vodičů a pak už je příkazem např. LCDOUT (1, 5, "Ahoj") zobrazíš na 1. řádku a 5. sloupci text Ahoj. Chceš-li poslat něco po RS232, tak buď má brouk fyzický RS232 a jen ho nadefinuješ a jedním příkazem to pošleš, nebo použiješ jejich knihovnu a vytvoříš si SW seriový port. Prostě je to hodně zaměřené na praktičnost. Na webu mají hromadu přídavných modulů (displeje LCD a LED, teploměry 18B20, čidla, komunikace, ...). Na webu taky mají už hotové projekty, např. teploměry apod., stačí je jen stáhnout.
Neříkám že nemají v programu chyby, ale obvykle stačí stáhnout novější verzi a je po problému.

Takhle vypadá příklad pro LCD v C pro Atmely (tady je pak odkaz na tento a další příklady:http://www.mikroe.com/downloads/get/2009/mikroc_pro_8051_examples.zip) :

/*
* Project name:
Lcd_Test (Demonstration of the LCD library routines)
* Copyright:
(c) Mikroelektronika, 2009.
* Revision History:
20071210:
- initial release;
* Description:
This code demonstrates how to use LCD 4-bit library. LCD is first
initialized, then some text is written, then the text is moved.
* Test configuration:
MCU: AT89S8253
http://www.atmel.com/dyn/resources/prod_documents/doc3286.pdf
Dev.Board: Easy8051v6 - ac:LCD
http://www.mikroe.com/easy8051/
Oscillator: External Clock 10.0000 MHz
Ext. Modules: Lcd 2x16
http://www.mikroe.com/store/components/various/#other
SW: mikroC PRO for 8051
http://www.mikroe.com/mikroc/8051/
* NOTES:
- Turn on LCD backlight switch on development board (SW7.6).
*/

// LCD module connections
sbit LCD_RS at P2_0_bit;
sbit LCD_EN at P2_1_bit;

sbit LCD_D4 at P2_2_bit;
sbit LCD_D5 at P2_3_bit;
sbit LCD_D6 at P2_4_bit;
sbit LCD_D7 at P2_5_bit;
// End LCD module connections

char txt1[] = "mikroElektronika";
char txt2[] = "Easy8051v6";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i; // Loop variable

void Move_Delay() { // Function used for text moving
Delay_ms(500); // You can change the moving speed here
}

void main(){

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
LCD_Out(1,6,txt3); // Write text in first row

LCD_Out(2,6,txt4); // Write text in second row
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Clear display

LCD_Out(1,1,txt1); // Write text in first row
LCD_Out(2,5,txt2); // Write text in second row

Delay_ms(2000);

// Moving text
for(i=0; i<4; i++) { // Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}

while(1) { // Endless loop
for(i=0; i<8; i++) { // Move text to the left 7 times
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}

for(i=0; i<8; i++) { // Move text to the right 7 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
}
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
monterjirka



Založen: Jun 14, 2003
Příspěvky: 2794
Bydliště: Blížejov

PříspěvekZaslal: čt prosinec 11 2014, 9:00    Předmět: Citovat

Korado napsal(a):
... Jinak mě zajímá i normální 8-bitový režim. V diskusích ještě píšou něco o nějakém řadiči HD 44780 .. ten asi bude na desce displaye a ten zpracovává posílané instukce.

Ten řadič je jakýsi standard, pro který existuje SW podpora.
Komunikace procesoru s tímto řadičem byla dost pěkně popsaná k KTE magazínu v seriálu o vývojovém modulu Chipon, tady se to dá najít a stahnout:
http://www.jvproject.cz/KTE.htm
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Korado



Založen: Dec 10, 2014
Příspěvky: 7

PříspěvekZaslal: čt prosinec 11 2014, 11:26    Předmět: Citovat

Moc dík za info, časem bych se rád dohrabal i k práci s USB a GSM moduly (seznam AT příkazů pro ně už někde mám (tak 8 roků), jenom ho najít Smile .
tzeď ještě koupit laserovou tiskárnu, abych si mohl dělat masky pro výrobu plošných spojů pomocí UV lampy a horkovzdušnou pistoli na práci se SMD součástkami a snad se časem rozhýbu po několikaleté pause.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: čt prosinec 11 2014, 15:06    Předmět: Citovat

Samozřejmě to není komplet, ale z poznámek se to snad dá pochopit.

Bity 4..7 displeje jsou připojeny na p2.0 až p2.3 , řídící signály jsou Bit_rs (p2.4) a Disp_e (dá se použít libovolný volný pin procesoru)


kód:


;============================
;   OVLADANI DISPLEJE
;============================
;
;Bit_rs = 0 ... instrukce
;Bit_rs = 1 ... data
;timeout 40us, 2ms pro smazani a nast. kurzoru

Init_disp:
;*********
;init 4-bitova sbernice, 2 radkovy displej

   ;napred horni byte 0010 xxxx - prepne do 4-bit modu
   ;potom znovu,ale uz cely 2x4bity
   
   ;0000 0001 smaz disp a kurzor na zacatek - 2ms !
   ;0000 0010 vrat kurzor na zacatek radku - 2ms !

   ;      1kt  Kurzor vlevo/vpravo, posun Text ne/ano    
   ;=================================================
   ;0000 0110 posun kurz vpravo, text se neposouva
   ;0000 0111 posun textu vlevo

   ;     1dcb zapne Diplej Kurzor Blikani
   ;=====================================
   ;0000 1111 zapnout disp, kurzor a blikani
   ;0000 1100 vypni kurzor a jeho blikani
   
   ;01aa aaaa - prepnuti na zapis + adresa v CG-ram
   ;1aaa aaaa - prepnuti na zapis + adresa v DD-ram
   ;dddd dddd + Bit_rs=1 > zapis dat do CG nebo DD ram
   ;==================================================
   ;1001 0000 nastav pozici v ddram na 16 (10000b)

   ;CG ram - 8 vlastnich znaku zzz= 000 .. 111
   ;zapis dat do CGRram > 01 zzz sss
   ;         sss je 8 sub-radku znaku po 5 bitech dat
   ;   data jsou xxx11111   
   ;t.j. 8x cykl rs=0+adresa, rs=1+data
   ;posledni radek je 00000 > misto pro kurzor
   
   ;3x znak "sloupec vybuzeni" 1,2,3 carky
   ;3x znak "znacka" - jen 1 carka v urovni 1.,2.,3. carky
   ;
   
   ;DD ram - diplej, pozice kurzoru
   ;   1.radek 00h
   ;   2.radek 40hff
   ;   3.radek 14h
   ;   4.radek 54h
   
   ;pockam na RESETy
   ;****************
   
   mov   a,#0
   setb   acc.4              ;r/s
   mov   p2,a
   clr   Disp_e
   call   Wait_1ms
   
   ;prepnuti na 4 bity
   ;******************
   mov   a,#0010b   ;HORNI byte inicializace displej
   clr   Bit_rs
   call   Posli_d4   ;pouziva aku
   
   ;call    Wait_1ms
   
   mov   a,#0
   clr   Bit_rs
   call   Posli_d4   ;pouziva aku

        call    Wait_1ms

   ;znovu init, tentokrat uz 4-bitove
   ;*********************************
   mov   Znak,#00101000b   ;0010 radky font x x
   clr   Bit_rs
   call   Posli_d8   ;pouziva Znak

   ;smazu displej,nastavim kurzor na zacatek
   ;****************************************
   call   Smaz_disp
   call   Vrat_kz
   call   Kurz_off
   ret

;----------------------------------------------------------------------
Clr_disp:   
Smaz_disp:
Smaz_dp:
;*********
       
   mov   Znak,#00000001b ;smaz disp a kurzor domu - 2ms !
   mov   Radek,#1
   jmp   Pd_ck1
   
Vrat_kz:
;*******
   mov   Znak,#00000010b ;vrat kurzor domu - 2ms !
   mov   Radek,#1
Pd_ck1:
   clr   Bit_rs
   call   Posli_d8   
   call   Wait_1ms
   call   Wait_1ms   
   ret   

Enter_dp:   ;skoci na dalsi radek
Dp_enter:
;********
   inc   Radek

   mov   a,Radek
   cjne   a,#5,Edp_2
   mov   Radek,#1   ;zpatky na prvni
Edp_2:
   jmp   Radek_dp

Smaz_r234:
;*********
        call    Smaz_rd2
        call    Smaz_rd3
        call    Smaz_rd4
        ret
           
Smaz_rd1:
;*********
        mov     Radek,#1
        jmp     Smaz_radek
           
Smaz_rd2:
;*********
        mov     Radek,#2
        jmp     Smaz_radek
       
Smaz_rd3:
;*********
        mov     Radek,#3
        jmp     Smaz_radek
       
Smaz_rd4:
;********
        mov     Radek,#4
        jmp     Smaz_radek       
       
Smaz_radek:
;**********
   mov   Sloupec,#0
   call   Radek_dp
   mov   r2,#20
Smz_1:   
   mov   Znak,#' '
   call   Zapis_dp
   djnz   r2,Smz_1
   ret
Radek_r1:
;*******
        mov     Radek,#1
        ;mov     Sloupec,#0
        jmp     Radek_dp

Radek_r2:
;*******
        mov     Radek,#2
        ;mov     Sloupec,#0
        jmp     Radek_dp
Radek_r3:
;*******
        mov     Radek,#3
        ;mov     Sloupec,#0
        jmp     Radek_dp
       
Radek_r4:
;*******
        mov     Radek,#4
        ;mov     Sloupec,#0
        jmp     Radek_dp       
         
Radek_dp:      ;skoci na patricny radek
;*******
   mov   a,Radek      ;1..4    

        cjne    a,#1,Rdp_1
        clr     a
        push    acc
        jmp   Rdp_5
Rdp_1:       
   cjne   a,#2,Rdp_2
   mov   a,#40h   ;00,40,10,50 pro 16x4
   push    acc
   jmp   Rdp_5      ;00,40,14,54 pro 20x4
Rdp_2:
   cjne   a,#3,Rdp_3
   mov   a,#14h
   push    acc
   jmp   Rdp_5
Rdp_3:
   cjne   a,#4,Rdp_5
   mov   a,#54h
   push    acc
   jmp   Rdp_5

Rdp_5:   
       
   ;v push acc je adresa
   ;*********************
   pop     acc
   add   a,Sloupec
   orl   a,#10000000b   ;1aaaaaaa
   mov   Znak,a
   mov   Sloupec,#0
   jmp   Pd_ck2

Shift_l:
   mov   Znak,#00000101b ;posun  vlevo + shift
   jmp   Pd_ck2      ; 00000 1 Incr/Decr Shift
      
No_shift:
Posun_dp:   
;********
   mov   Znak,#00000110b ;posun kurzoru vpravo,no shift
   jmp   Pd_ck2      ; 00000 1 Incr/Decr Shift

Kurz_off:   
;********
   mov   Znak,#00001100b ;vypne kurzor
   jmp   Pd_ck2

Kurz_on:   
;********
   mov   Znak,#00001111b ;zapne kurzor
   jmp   Pd_ck2

   
Pd_ck2:            ;0000 1 D C B
;======
   clr   Bit_rs      ;D = disp on/off, Cursor, Blink
   call   Posli_d8   
   ret

Kp_on:   
;*****
   mov   Znak,#00001110b ;zapne kurzor bey blikani 0000 1 D C B
   clr   Bit_rs      ;D = disp on/off, Cursor, Blink
   call   Posli_d8   
   ret

Zapis_mez:
Posli_mez:
Dp_mez:
;*********
;posle mezeru

        mov     Znak,#' '
        jmp     Zapis_dp

Dp_car:
Dp_carka:
;*********
;posle carku

        mov     Znak,#','
        jmp     Zapis_dp
       
Dp_dvoj:
Posli_dvojt:
;*********
;posle dvojtecku

        mov     Znak,#':'
        jmp     Zapis_dp       

Posli_h:
;*******
;posle h

        mov     Znak,#'h'
        jmp     Zapis_dp 
       
Posli_v:
;*******
;posle h

        mov     Znak,#'V'
        jmp     Zapis_dp 
       
Zapis_dp:
Posli_dp:
Dp_znak:
;********
   ;znak je v promenne Znak

        push    acc

   setb   Bit_rs
   call   Posli_d8   

        pop     acc


   ret
   
Dp_text:
;*******
   ;posle text na displej, adresa v DPTR, ukonceni ~ nebo $

   mov   Pom,#0
Dpt_1:
   clr   a
   movc   a,@a+dptr
   
        cjne   a,#'~',Dpt_2

   ;nacten koncovy znak
   inc   dptr
   ret

Dpt_2:   
        cjne   a,#'$',Dpt_3
       
   ;poslat DP_ENTER
   call    Dp_enter
   jmp    Dpt_4

Dpt_3:
   mov   Znak,a
   call   Zapis_dp
   
Dpt_4:   
   inc   Pom
   inc   dptr
   
   ;kontrola delky
   mov   a,Pom
   cjne   a,#Poc_znd,Dpt_1          ;MAX pocet znaku displeje   
   
        inc     dptr
   ret

   ;=============================
   ;=== ZAPIS DAT DO DISPLEJE ===
   ;=============================
   
Posli_d8:
;*******
;posle Znak 8 bitu na displej

   ;nejprve horni byte
   ;******************
   mov   a,Znak
   swap   a
   call   Posli_df

          ;dolni byte
   ;**********
   mov   a,Znak
   call   Posli_df

   ;cekaci smycka
   ;*************
   mov   r7,#Wait_disp   ;doba,nez to pochopi
Pdp_w3:
   djnz   r7,Pdp_w3
   ret
      
Posli_d4:
;********
;posle 4 bity dat ulozenych v aku + Bit_rs
;pomalejsi varianta, ceka po kazdem pulbyte
   
   orl   a,#11110000b   ;horni 4bity nepouzivam
        ;rl      a
   mov   c,Bit_rs
   mov   acc.4,c
   mov   p2,a
   setb   Disp_e      ;max. clk=250khz
            ;zapis sestupnou hranou
   call   Wait_5us
   clr   Disp_e
   
   mov   r7,#Wait_disp   ;doba,nez to pochopi
Pdp_w:
   djnz   r7,Pdp_w
   mov   p2,#0ffh
   ret

Posli_df:
;********
;posle 4 bity dat ulozenych v aku + Bit_rs
;zrychlena varianta bez cekaci smycky

   orl   a,#11110000b   ;horni 4bity nepouzivam
        ;rl      a
   mov   c,Bit_rs
   mov   acc.4,c
   mov   p2,a
   setb   Disp_e      ;max. clk=250khz
            ;zapis sestupnou hranou
   call   Wait_5us
   clr   Disp_e
   
   ;cekaci smycku musi generovat nadrazeny proces !

   mov   p2,#0ffh
   ret


_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Celeron



Založen: Apr 02, 2011
Příspěvky: 17821
Bydliště: Nový Bydžov

PříspěvekZaslal: čt prosinec 11 2014, 15:46    Předmět: Citovat

Tohle je na začátek asi nejjednodušší (8 bitů). Bez všech kravinek s kurzorem, uzivatelskejma znakama, rolováním a pod.
kód:
;**********************************************
;*                                            *
;*                test displeje           *
;*                                            *
;**********************************************

E_LCD             Bit   P3.1      ;vybavovaci vystup pro LCD
RS_LCD            Bit   P3.0      ;data nebo instrukce      
RW_LCD      bit   p3.3

;********************************      
;   Zacatek programu OK
;********************************
   ORG   0H
Start:
   call    Init              ;inicializace LCD

   mov   A,#0C0H      ;nastaveni 2. radku LCD
   call   LCD_W_INST

   mov   DPTR,#Uvod1   ;adresa tabulky Uvod1
rpokr1:
   CLR  A
   movc    A,@A+DPTR   ;nacti byte z tabulky
   cjne   A,#'`',Ok1    ;test znaku konec reklamy
   jmp   TEnd1
Ok1:
   inc   DPTR                    ;dalsi byte tabulky
   call    LCD_W_DATA   ;zapis A do LCD
   jmp   RPOKR1      ;pokracuj

Tend1:   
   mov    A,#80H      ;nastaveni 1. radku LCD
   call   LCD_W_INST
   mov   DPTR,#Uvod2   ;adresa tabulky Uvod1
rpokr2:
   CLR   A
   movc    A,@A+DPTR   ;nacti byte z tabulky
   cjne   A,#'`',Ok1    ;test znaku konec reklamy
   jmp   TEnd2
Ok2:
   inc   DPTR             ;dalsi byte tabulky
   call    LCD_W_DATA   ;zapis A do LCD
   jmp   RPOKR2      ;pokracuj

Tend2:
;********************************
   jmp   $      ;cekej   

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


BUSY:
   CLR     E_LCD      ;LCD DISABLE
   MOV    P1,#0FFH
   CLR     RS_LCD      ;INSTRUKCE
   SETB    RW_LCD      ;CTI STAV
   NOP
   NOP
   SETB    E_LCD      ;LCD ENABLE
BUSY1:
   JB   P1.7,BUSY1
   CLR   E_LCD      ;LCD DISABLE
   CLR   RW_LCD      ;VRAT NA ZAPIS
   RET
;--------------------------------
            ;LCD KAM CHCI PSAT)
            ;1. radek A= #1000XXXXB)
LCD_W_INST:         ;2. radek A= #1100XXXXB)
   CLR   RS_LCD      ;INSTRUKCE
   CLR   RW_LCD      ;ZAPIS
   MOV   P1,A        ;ODESLI INSTRUKCI
   SETB   E_LCD      ;LCD ENABLE   
   CALL   BUSY
   RET
;--------------------------------
             
LCD_W_DATA:
   SETB    RS_LCD   ;DATA   
   CLR      RW_LCD   ;ZAPIS
   MOV     P1,A      ;ODESLI DATA
   SETB    E_LCD   ;LCD ENABLE
   CALL    BUSY      ;VYSTUP NA DISPLEJ   
   RET

;********************************
INIT:
   CALL   PAUSE2    ;cekani po privedeni Ucc
   CLR      A
   MOV     B,#5
MODS:
   MOV     DPTR,#INITBL
   PUSH    ACC
   MOVC   A,@A+DPTR
   CALL    LCD_W_INST
   CALL    PAUSE
   POP      ACC
   INC      A
   DJNZ    B,MODS
   RET
;................................
Pause2:            ;zpozdeni asi 390ms
   mov   R4,#255
   mov   R2,#255
   mov   R7,#3
Znovu2:
   djnz   R4,$        ;256 x      
   mov   R4,#255
   djnz   R2,Znovu2    ;256 x 256 x
   mov   R2,#255
   mov   R4,#255
   djnz   R7,Znovu2    ;256 x 256 x 3
   Ret

Pause:            
   mov   R3,#155
   djnz   R3,$        ;zpozdeni asi 310 microsec
   Ret   
;................................
            ;inicializacni tabulka
INITBL:
          DB   00000001b    ;maze displej a vraci kurzor na poz.0   
          DB   00000010b    ;vypina posun a vraci kurzor na pozici 0.   
          DB   00000110b    ;smer pohybu kurzoru I/D vpravo, posun
                    ;displeje SH vypmut.   
          DB   00001100b    ;displej D zap, kurzor C, blikani B vyp   
          DB   00111100b    ;8 bitu, 2 radky, font 5x10
   
;********************************
;    texty
;*******************************

uvod1:   DB   '* TEXT 2 LINE *`'
uvod2:   DB   '* TEXT 1 LINE *`'
;********************************
   END
Omlouvám se za chaos, nějak se poondil tabelátor a mezery.
Počítej s tím, že LCD 2x16 ma řadič pro displej 2x 40, proto je mezi koncem 1 řádku a začátkem 2 řádku pamětová díra ale zapisovat a číst tam jde. Já tu paměť drze používal na jiný účely. Stejný to bude asi i u jednořádku a čtyřřádku, ty jsem nezkoumal.
Pokud chceš jet jen po 4 bitech musí se LCD inicializovat jako při 8 bitech a na konci teprv převrátit na 4 bity
Jirka
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3698
Bydliště: Praha

PříspěvekZaslal: čt prosinec 11 2014, 16:56    Předmět: Citovat

Tyhle knihovny jsou všechny dost podobné a jejich hlavním nedostatkem jsou čekací doby pro odměřování impulsů E a čekání na dokončení operace v HD44780.
kód:


   setb   Disp_e      ;max. clk=250khz
            ;zapis sestupnou hranou
   call   Wait_5us
   clr   Disp_e


...

   ;cekaci smycka
   ;*************
   mov   r7,#Wait_disp   ;doba,nez to pochopi
Pdp_w3:
   djnz   r7,Pdp_w3

Bývá to něco kolem 40 us na jeden zápis a někdy to může vadit. Řešením je odměřovat doby pomocí časovače nebo se zavěsit na přerušení od BUSSY.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Honza_dy



Založen: Aug 20, 2004
Příspěvky: 2172
Bydliště: Brno-venkov

PříspěvekZaslal: čt prosinec 11 2014, 17:19    Předmět: Citovat

Tady je výborný simulátor displeje s řadičem HD44780. Mě dost pomohl když jsem se učil displej ovládat přes PICAXE.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.24 sekund