Moje LCD zobrazuje pouze pevný blok

C

charizard1987

Guest
Ahoj, já jsem plánování, aby můj robot vnímat teplotu, pak se při určité teplotě, LED světlo, ventilátor pracovat a na displeji LCD teplotu.I am using PIC16f877a, pin spojení mezi LCD a PIC vypadá to,
LCD => PIC
DB0 ~ DB7 => RB1 ~ RB7 (portB)
RS => RD7
E => RC7
Nicméně, když zkusím spustit, LCD prostě show pevný blok v první linii.Po Poradce při potížích pro docela někdy, nemohl jsem najít kořen problému, může mi někdo pomoct s tímto?Tady je můj kód.Dívám se na datasheet, se píše, že port B má slabé vytáhnout, musím vypnout?

Díky.

//================== Patří ============================= ====
# Include <pic.h>

//=============== Konfigurace ==============================
__CONFIG (0x3F32);

//=============== Definovat IO port =============================
# Define lcd PORTB / / RB1-RB7
# Define RS RD7
# Definovat E RC7
# Define CHANNEL0 0b10000001 / / AN0
# Define Fana RC1
# Define Leda RC2
# Define ledB RC3

//============== FUNCTION PTOTOTYPE =========================
neplatné e_pulse (void);
neplatné zpoždění (unsigned short i);
neplatné send_char (unsigned char data);
neplatné send_config (unsigned char data);
neplatné lcd_goto (unsigned char data);
neplatné lcd_clr (void);
neplatné dis_num (unsigned long data);
neplatné přírůstek (unsigned long data);
neplatné read_adc (void);
unsigned short read_temp (void);

//==================== HLAVNÍ =========================== =====
unsigned short výsledek;
unsigned short temp, tempa;

void main (void)
(
ADRESH = 0; / / jasné / D výsledek
ADRESL = 0; / / jasné / D výsledek

/ / Nastavení ADCON1 Registrace
ADCON1 = 0b11000101; / / A / D výsledek zarovnáno,
/ / Configure RA2 a RA5 například digitální I / O

TRISA = 0b11011011; / / configure PORTA I / O směr
TRISB = 0b00000000; / / configure PORTB jako výstup
TRISC = 0b00000000; / / configure PORTC jako výstup
TRISD = 0b00000000; / / configure PORTD jako výstup
TRISE = 0b00000000; / / set porte jako výstup

PORTA = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;

/ / OPTION_REG = 0b11111111;

while (1)
(
send_config (0b00000001); / / jasný displej na LCD
send_config (0b00000010); / / LCD Návrat na hlavní stránku
send_config (0b00000110); / / vstupní režim-cursor nárůst 1
send_config (0b00001100); / / diplay dál, cursor off a kurzor bliká off
send_config (0b00111000) / / funkce nastavena

lcd_goto (0); / / kurzor začít od začátku

/ / Zobrazení znaků na LCD
send_char ('');
send_char ('T');
send_char ('E');
send_char ('M');
send_char ('P');
send_char ('.');
send_char ('=');while (1) / / nekonečno smyčka
(
/ / Čidlo
ADCON0 = CHANNEL0; / / Channel1 = 0b10001001
lcd_goto (

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

;

read_adc ();

temp = read_temp ();
dis_num (temp/10);
send_char ('.');
dis_num (temp% 10);
send_char (0b11011111);
send_char ('C');
send_char ('');
send_char ('');

tempa = temp;if (tempa> 400)
(/ / * LED a Fan aktivováno pouze pro
Leda = 1; / / * teplota vyšší než 40'C
ledB = 0;
Fana = 1;
)

jiný
(
Leda = 0;
ledB = 1;
Fana = 0;
)

zpoždění (2000);

)

)

)//================== Podprogramu LCD nastavení ==========================

neplatné send_config (unsigned char data)
(
RS = 0;
LCD = data;
zpoždění (500);
e_pulse ();
)

neplatné e_pulse (void)
(
E = 1;
zpoždění (500);
E = 0;
zpoždění (500);
)

neplatné send_char (unsigned char data)
(
RS = 1;
LCD = data;
zpoždění (500);
e_pulse ();
)neplatné lcd_goto (unsigned char data)
(
if (data <16)
(
send_config (0x80 data);
)
jiný
(
data = data-20;
send_config (0xC0 data);
)
)neplatné lcd_clr (void)
(
RS = 0;
send_config (0x01);
zpoždění (600);
)neplatné dis_num (unsigned long data)
(
unsigned char hundred_thousand;
unsigned char ten_thousand;
unsigned char tisíc;
unsigned char set,
unsigned char desáté;

hundred_thousand = data/100000;
data = data% 100000;
ten_thousand = data/10000;
data = data% 10000;
tisíc = data / 1000;
data = data% 1000;
sto = data / 100;
data = data% 100;
desátého = data / 10;
data = data% 10;

if (hundred_thousand> 0)
(
send_char (hundred_thousand 0x30) / / 0x30 zní, aby se stala ASCII kódu
send_char (ten_thousand 0x30);
send_char (tis 0x30);
send_char (sto 0x30);
send_char (desátá 0x30);
send_char (data 0x30);
)

else if (ten_thousand> 0)
(
send_char (ten_thousand 0x30) / / 0x30 zní, aby se stala ASCII kódu
send_char (tis 0x30);
send_char (sto 0x30);
send_char (desátá 0x30);
send_char (data 0x30);
)
else if (tis> 0)
(
send_char (tis 0x30) / / 0x30 zní, aby se stala ASCII kódu
send_char (sto 0x30);
send_char (desátá 0x30);
send_char (data 0x30);
)
else if (sto> 0)
(
send_char (sto 0x30) / / 0x30 zní, aby se stala ASCII kódu
send_char (desátá 0x30);
send_char (data 0x30);
)
else if (desátá> 0)
(
send_char (desátá 0x30) / / 0x30 zní, aby se stala ASCII kódu
send_char (data 0x30);
)
else send_char (data 0x30) / / 0x30 zní, aby se stala ASCII kódu
)

neplatné přírůstek (unsigned long data)
(
unsigned short j;
pro (j = 10; j> 0; j -)
(Lcd_goto (32);
data = data 1;
dis_num (data);
zpoždění (10000);
)

)

//================== Podprogramu ADC =========================

neplatné read_adc (void)
(
unsigned short i;
unsigned long result_temp = 0;
pro (i = 2000; i> 0; i-= 1) / / looping 2000 časů pro získání průměrné hodnoty
(
ADGO = 1; / / ADGO je bit 2 ADCON0 registru
while (ADGO == 1); / / ADC start, ADGO = 0 po dokončení ADC pokroku
vysledek = ADRESH;
výsledek = výsledek <<8, / / posun vlevo pro 8 bit
výsledek = výsledek | ADRESL; / / 10 bit výsledek z ADC

result_temp = vysledek;
)
vysledek = result_temp/2000; / / získání průměrné hodnoty

)

unsigned short read_temp (void)
(
unsigned short temp;
temp = vysledek;
návrat temp;

)

//================== Podprogram DELAY ==========================
neplatné zpoždění (unsigned short i)
(
for (; i> 0; i -);
)

 
charizard1987 napsal:

Ahoj, já jsem plánování, aby můj robot vnímat teplotu, pak se při určité teplotě, bude LED světlo, ventilátor pracovat a na displeji LCD teplotu.
I am using PIC16f877a, pin spojení mezi LCD a PIC vypadá to,

LCD => PIC

DB0 ~ DB7 => RB1 ~ RB7 (portB)

RS => RD7

E => RC7

Nicméně, když zkusím spustit, LCD prostě show pevný blok v první linii ...
 
Ahoj,

Někdy kvůli špatné elektroinstalace nebo volné kontakty, pls zkontrolujte

 
LCD je 2x16.Pevný blok ukazuje pouze na prvním řádku (horní řádek).Snažil jsem se změnit kódy ukázat charakter na druhém řádku, ale to stále jen show pevný blok v první linii.Nejsem si jist, který je součástí čísla pro LCD, protože za LCD, existuje pár čísel pro to,
E171525 BS-6
210825670004
C216L01YBWOO
p #: PB0247-15:
M #: C216-01
ale předpokládám, že pin by měly být stejné pro všechny 2x16LCD?

Takže se jedná o věc, kterou mohu udělat,
1) errase kódů v PIC a zkontrolovat, jak show LCD.A zkontrolujte, buď pevný blok zobrazovat pouze v první linii, nebo 2 řádky.Je-li LCD zobrazuje pouze v první linii, znamená problém LCD?

2) re-check vedení.

Jakékoli další návrhy na to, co je potřeba udělat / check odstraňovat to?Protože jsem pouze to udělat v laboratoři, tak jsem v plánu shromáždit všechny možné způsoby řešení a jejich provádění když jsem se zpátky do laboratoře ve všední dny.

Ale možné mít problém na kódy?Například přidělit špatnou adresu?Ověřil jsem si, ale kódy se zdá v pořádku se mnou.

 
Nemusí to být standardní 2 * 16 LCD.to mayhave jiný PIN.Mám za sebou dlouhou historii si pohráváte levné nestandardní / přebytku lcd, s.Do doby, než bych mohl najít datasheet pro konkrétní LCD.

 

Welcome to EDABoard.com

Sponsor

Back
Top