S
Stinger-dk
Guest
Ik gebruik AT89C51 loopt een 24 SEG, 4 com lcd behulp HT1621 bestuurder.Ik gebruik C met Keil uVision.
Met behulp van de onderstaande code, all i get is 8 op segmenten.maakt niet uit wat ik schrijf, die 8 segmenten zal gaan.rest van de segmenten blijft uitgeschakeld ...De segmenten die op correspong naar adressen 3, 4, 5 en 6 van HT1621.
Gelieve ook uitleggen waarom zijn er 6 adres lijnen wanneer er slechts 32 locaties worden aangepakt?
Ik heb gebruikt 11.059Mhz kristal voor 89C51 zodat vertragingen in nano seconden (voor Th1 en tsu1) zijn niet mogelijk.Maar ik denk niet dat ze een probleem.Ik heb gebruikt 32.768KHz externe crystral voor HT1621.
Alle hulp wordt zeer gewaardeerd
<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
Thanks in advance!
Hier is de code:
Code:
# include <reg51.h>/ / Interface met HT1621
sbit WR = P1 ^ 0;
sbit dt = P1 ^ 1;
sbit cs = P1 ^ 2;
sbit rd = P1 ^ 3;int com_reg / / Bits worden overgedragen wordt opgeslagen in com_regbits com_mode = 0; / / Vertelt dat de opdrachten worden overgedragen en niet-gegevensunsigned int mask = 0x8000;bits haha = 0;void vertraging (unsigned int j)
(
unsigned int i = 0;
for (; i <j; i );
)void cs_pulse (void)
(
cs = 1;
vertraging (1); / / Voor t (CS)
cs = 0;
)void lcd_wr (void)
(
/ / Dit zal schrijven gegevens HT1621rd = 1; / / HT1621 klokken gegevens op vallende rand van rd klok
WR = 1 / / Initialiseren RD en WR.
rd blijft 1 eeuwig.cs_pulse ();vertraging (1); / / Voor t (su1)mask = 0x8000;if (com_mode == 0)
(
while (masker! = 0x0004)
(
WR = 0;
vertraging (1); / / Voor t (CLK)
haha = com_reg & masker;
dt = haha;
vertraging (1);
WR = 1;
vertraging (2);masker>> = 1;
)
)
anders als (com_mode == 1)
(
while (masker! = 0x0008)
(
WR = 0;
vertraging (1); / / Voor t (CLK)
haha = com_reg & masker;
dt = haha;
vertraging (1);
WR = 1;
vertraging (2);masker>> = 1;
)
)vertraging (1); / / Voor t (H1)
cs = 1;
)void main ()
(
/ / Initialisatiedt = 0;vertraging (10000);com_mode = 1;com_reg = 0x8020; / / SYS NLlcd_wr ();com_reg = 0x8560; / / BIAS 1 / 3 bij 4 commons
lcd_wr ();com_reg = 0x8090; / / TIMER DIS
lcd_wr ();com_reg = 0x80A0 / / WDT DIS
lcd_wr ();com_reg = 0x8280; / / XTAL 32K
lcd_wr ();com_reg = 0x8060; / / LCD-OP
lcd_wr ();com_mode = 0;/ / Na-code zal switch segmenten overeenkomt met adressen 1 en 2 van ht1621 op.
com_reg = 0xA0F8;
lcd_wr ();com_reg = 0xA178;
lcd_wr ();
)
Met behulp van de onderstaande code, all i get is 8 op segmenten.maakt niet uit wat ik schrijf, die 8 segmenten zal gaan.rest van de segmenten blijft uitgeschakeld ...De segmenten die op correspong naar adressen 3, 4, 5 en 6 van HT1621.
Gelieve ook uitleggen waarom zijn er 6 adres lijnen wanneer er slechts 32 locaties worden aangepakt?
Ik heb gebruikt 11.059Mhz kristal voor 89C51 zodat vertragingen in nano seconden (voor Th1 en tsu1) zijn niet mogelijk.Maar ik denk niet dat ze een probleem.Ik heb gebruikt 32.768KHz externe crystral voor HT1621.
Alle hulp wordt zeer gewaardeerd
<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
Thanks in advance!
Hier is de code:
Code:
# include <reg51.h>/ / Interface met HT1621
sbit WR = P1 ^ 0;
sbit dt = P1 ^ 1;
sbit cs = P1 ^ 2;
sbit rd = P1 ^ 3;int com_reg / / Bits worden overgedragen wordt opgeslagen in com_regbits com_mode = 0; / / Vertelt dat de opdrachten worden overgedragen en niet-gegevensunsigned int mask = 0x8000;bits haha = 0;void vertraging (unsigned int j)
(
unsigned int i = 0;
for (; i <j; i );
)void cs_pulse (void)
(
cs = 1;
vertraging (1); / / Voor t (CS)
cs = 0;
)void lcd_wr (void)
(
/ / Dit zal schrijven gegevens HT1621rd = 1; / / HT1621 klokken gegevens op vallende rand van rd klok
WR = 1 / / Initialiseren RD en WR.
rd blijft 1 eeuwig.cs_pulse ();vertraging (1); / / Voor t (su1)mask = 0x8000;if (com_mode == 0)
(
while (masker! = 0x0004)
(
WR = 0;
vertraging (1); / / Voor t (CLK)
haha = com_reg & masker;
dt = haha;
vertraging (1);
WR = 1;
vertraging (2);masker>> = 1;
)
)
anders als (com_mode == 1)
(
while (masker! = 0x0008)
(
WR = 0;
vertraging (1); / / Voor t (CLK)
haha = com_reg & masker;
dt = haha;
vertraging (1);
WR = 1;
vertraging (2);masker>> = 1;
)
)vertraging (1); / / Voor t (H1)
cs = 1;
)void main ()
(
/ / Initialisatiedt = 0;vertraging (10000);com_mode = 1;com_reg = 0x8020; / / SYS NLlcd_wr ();com_reg = 0x8560; / / BIAS 1 / 3 bij 4 commons
lcd_wr ();com_reg = 0x8090; / / TIMER DIS
lcd_wr ();com_reg = 0x80A0 / / WDT DIS
lcd_wr ();com_reg = 0x8280; / / XTAL 32K
lcd_wr ();com_reg = 0x8060; / / LCD-OP
lcd_wr ();com_mode = 0;/ / Na-code zal switch segmenten overeenkomt met adressen 1 en 2 van ht1621 op.
com_reg = 0xA0F8;
lcd_wr ();com_reg = 0xA178;
lcd_wr ();
)