K
kcfresher
Guest
J'ai un problème dans l'accès TFT LCD (240x320) module.J'ai acheté un 3.2 "TFT LCD Module d'eBay.
Le lien eBay: http://cgi.ebay.com/3-2-TFT-LCD-Module-Display-Touch-Panel-PCB-adapter-/200475566068?cmd=ViewItem&pt=LH_DefaultDomain_0&hash=item2ead465ff4 # ht_8028wt_906
Je me suis livré à cristaux liquides avec un exemple de code écrit pour ATMEL MCU.I modifié le code pour mon MCU et a pris l'initialisation de l'affichage à partir du lien: http://www.4dsystems.com.au/downloads/Displays/LCD/4DLCD- 32/HX8347-A01_DS_preliminary_01.pdfJe suis en mesure d'acess l'écran LCD mais fully.I PAS j'essaie d'imprimer tout l'écran en remplissant un peu de couleur.
Mais il ne s'affiche pas entièrement.Il affiche simplement comme le montre l'image ci-joint.Après le débogage, j'ai découvert le programme est pendu dans la boucle.Lorsque je tente de combler environ 19000 pixels il fonctionne très bien et continue d'exécuter les instructions suivantes à l'intérieur du programme.Mais cela aussi ne fonctionne pas si j'ai des boucles après.
Ce que j'ai observé, c'est que si j'utilise retard dans mon programme, puis l'écran devient vacillaient et quelque chose (comme une neige) se déplace en arrière-plan et d'ailleurs si j'essaie de changer le mode de mémoire à la couleur, puis moins encore moins grande est imprimé et les formulaires de neige à nouveau .
Je ne sais pas si j'ai besoin pour faire face à toute timings ou quelque chose comme ça.
Détails techniques:
Microcontrôleur: C8051f124
oscillateur externe: 24.5MHz
driver LCD: HX8347-A
Compiler: C51 Keil
Configuration des broches:- Octet bas P4
P5 - octet de poids fort
Sibt LCD_RS = 0 ^ P6;
LCD_REST sbit = ^ P6 1;
sbit LCD_WR = 2 ^ P6;
sbit LCD_RD = 3 ^ P6;
sbit LCD_CS = 4 ^ P6;Code:
Code:# Include <Cygnal/c8051F120.h>sbit LCD_RS = ^ P6 0; / / EY ¾ Y / ÃüÁîÇĐ »
LCD_REST sbit = ^ P6 1; / / ° '»I
sbit LCD_WR = ^ P6 2; / / DJ '¿ØÖÆ
sbit LCD_RD = 3 ^ P6; / / Â ¿ØÖÆ
sbit LCD_CS = 4 ^ P6;delayms void (int nombre) / / / * * X1ms /
(
int i, j;
/ / For (i = 0; i <comte; i )
/ / For (j = 0; j <100; j );
)void main_Write_COM (int DH) / / ÃüÁî
(
LCD_RS = 0;
LCD_CS = 0;
P4 = DH; / / bus [p4-Adresse /] bus de données
P5 = DH>> 8;
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1
cld_write_color vide (hh char, char ll) / / · ËÍÑÕÉ «EY ¾ Yi ª IA ¸ Sseu E ° ß8λ μÍ8Î »· O ± d '« μÝ
(
LCD_RS = 1;
LCD_CS = 0;
hh P4 =;
P5 = hh;
P4 = ll;
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1
void main_Write_DATA (int DH) / / EY ¾ Ý
(LCD_RS = 1;
LCD_CS = 0;
P4 = DH;
P5 = DH>> 8;
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1
main_W_com_data void (int com1, DAT1) / / ÃüÁîÊý ¾ yo »AED
(
main_Write_COM port (COM1);
main_Write_DATA (DAT1);
)
address_set vide (unsigned int x1, unsigned int y1, int x2 non signé, unsigned int y2)
(
main_W_com_data (0x0002, x1>> 8); / / adresse de colonne start2
main_W_com_data (0x0003, x1); / / adresse de colonne START1
main_W_com_data (0x0004, x2>> 8); / / adresse de colonne end2
main_W_com_data (0x0005, x2); / / adresse de colonne end1
main_W_com_data (0x0006, y1>> 8); / adresse de ligne / start2
main_W_com_data (0x0007, y1); / adresse de ligne / START1
main_W_com_data (0x0008, y2>> 8); / adresse de ligne / end2
main_W_com_data (0x0009, y2); / adresse de ligne / end1
main_Write_COM (0x0022)
void Port_IO_Init ()
(SFRPAGE = CONFIG_PAGE;
/ / XBR2 = 0x40;
P6MDOUT = 0xFF;
P4MDOUT = 0xFF;
P5MDOUT = 0xFF;
)/ / Fonction d'initialisation de l'appareil,
/ / Appel Init_Device () à partir de votre programme principal
Init_Device (void)
(
Port_IO_Init ();
)main_init (void)
(Init_Device ();LCD_REST = 1;
delayms (5);
LCD_REST = 0;
delayms (10);
LCD_REST = 1;
delayms (20);main_W_com_data (0x0046, 0x00A4);
main_W_com_data (0x0047, 0x0053);
main_W_com_data (0x0048, 0x0000);
main_W_com_data (0x0049, 0x0044);
main_W_com_data (0x004A, 0x0004);
main_W_com_data (0x004B, 0x0067);
main_W_com_data (0x004C, 0x0033);
main_W_com_data (0x004D, 0x0077);
main_W_com_data (0x004E, 0x0012);
main_W_com_data (0x004F, 0x004C);
main_W_com_data (0x0050, 0x0046);
main_W_com_data (0x0051, 0x0044);
/ / 240x320 fenêtre de réglage
main_W_com_data (0x0002, 0x0000); / / adresse de colonne start2
main_W_com_data (0x0003, 0x0000); / / adresse de colonne START1
main_W_com_data (0x0004, 0x0000); / / adresse de colonne end2
main_W_com_data (0x0005, 0x00EF); / / adresse de colonne end1
main_W_com_data (0x0006, 0x0000); / adresse de ligne / start2
main_W_com_data (0x0007, 0x0000); / adresse de ligne / START1
main_W_com_data (0x0008, 0x0001); / adresse de ligne / end2
main_W_com_data (0x0009, 0x003F); / adresse de ligne / end1
/ / Réglage de l'affichage
main_W_com_data (0x0001, 0x0006); / / IDMON = 0, INVON = 1, NORON = 1, PTLON = 0
main_W_com_data (0x0016, 0x0048) / / MA = 0, MX = 0, MV = 0, ML = 1, BGR = 0, Teon = 0
main_W_com_data (0x0023, 0x0095); / / N_DC = 1001 0101
main_W_com_data (0x0024, 0x0095); / / PI_DC = 1001 0101
main_W_com_data (0x0025, 0x00FF); / / I_DC = 1111 1111
main_W_com_data (0x0027, 0x0002); / / N_BP = 0000 0010
main_W_com_data (0x0028, 0x0002); / / N_FP = 0000 0010
main_W_com_data (0x0029, 0x0002); / / PI_BP = 0000 0010
main_W_com_data (0x002a, 0x0002); / / PI_FP = 0000 0010
main_W_com_data (0x002C, 0x0002); / / I_BP = 0000 0010
main_W_com_data (0x002D, 0x0002); / / I_FP = 0000 0010
main_W_com_data (0x003A, 0x0001); / / N_RTN = 0000, N_NW = 001
main_W_com_data (0x003B, 0x0001); / / PI_RTN = 0000, PI_NW = 001
main_W_com_data (0x003C, 0x00F0); / / I_RTN = 1111, I_NW = 000
main_W_com_data (0x003D, 0x0000); / / DIV = 00
delayms (20);
main_W_com_data (0x0035, 0x0038); / / NQE = 38h
main_W_com_data (0x0036, 0x0078); / / EQP = 78h
main_W_com_data (0x003E, 0x0038); / / SON = 38h
main_W_com_data (0x0040, 0x000f); / / = gdon 0Fh
main_W_com_data (0x0041, 0x00F0); / / GDOFF
/ Alimentation / Configuration
main_W_com_data (0x0019, 0x0049); / / CADJ = 0100, CUADJ = 100 (FR: 60 Hz), OSD_EN = 1
main_W_com_data (0x0093, 0x000f); / / RADJ = 1111, 100%
delayms (10);
main_W_com_data (0x0020, 0x0040); / / BT = 0100
main_W_com_data (0x001D, 0x0007); / / VC1 = 111
main_W_com_data (0x001E, 0x0000) / / = 000 VC3
main_W_com_data (0x001F, 0x0004); / / VRH = 0100
/ / Mise en VCOM pour les OCM 3,2 "Groupe
main_W_com_data (0x0044, 0x004D); / / VCM = 100 1101
main_W_com_data (0x0045, 0x0011); / / VDV = 1 0001
delayms (10);
main_W_com_data (0x001C, 0x0004); / / AP = 100
delayms (20);
main_W_com_data (0x001B, 0x0018); / / GASENB = 0, PON = 1, DK = 1, XDK = 0, VLCD_TRI = 0, STB = 0
delayms (40);
main_W_com_data (0x001B, 0x0010); / / GASENB = 0, PON = 1, DK = 0, XDK = 0, VLCD_TRI = 0, STB = 0
delayms (40);
main_W_com_data (0x0043, 0x0080); / / set VCOMG = 1
delayms (100);
/ / Affichage ON Réglage
main_W_com_data (0x0090, 0x007F); / / SAP = 0111 1111
main_W_com_data (0x0026, 0x0004); / / GON = 0, DTE = 0, D = 01
delayms (40);
main_W_com_data (0x0026, 0x0024); / / GON = 1, DTE = 0, D = 01
main_W_com_data (0x0026, 0x002C); / / GON = 1, DTE = 0, D = 11
delayms (40);
main_W_com_data (0x0026, 0x003C); / / GON = 1, DTE = 1, D = 11
/ / Set de tension interne VDDD
main_W_com_data (0x0057, 0x0002); / / Activer TEST_MODE
main_W_com_data (0x0055, 0x0000); / / VDC_SEL = 000, = 1.95V VDDD
main_W_com_data (0x00FE, 0x005A); / / Pour une protection ESD
main_W_com_data (0x0057, 0x0000); / / Désactiver TEST_MODE
)nulle peinture (couleur unsigned int)
(
int i, j;
address_set (0,0,239,320);for (i = 0; i <239; i )
(
for (j = 0; j <320; j )
(
main_Write_DATA (couleur);
))
)main ()
(
unsigned int i, j, k;
main_init ();Peinture (0x8000)
Le lien eBay: http://cgi.ebay.com/3-2-TFT-LCD-Module-Display-Touch-Panel-PCB-adapter-/200475566068?cmd=ViewItem&pt=LH_DefaultDomain_0&hash=item2ead465ff4 # ht_8028wt_906
Je me suis livré à cristaux liquides avec un exemple de code écrit pour ATMEL MCU.I modifié le code pour mon MCU et a pris l'initialisation de l'affichage à partir du lien: http://www.4dsystems.com.au/downloads/Displays/LCD/4DLCD- 32/HX8347-A01_DS_preliminary_01.pdfJe suis en mesure d'acess l'écran LCD mais fully.I PAS j'essaie d'imprimer tout l'écran en remplissant un peu de couleur.
Mais il ne s'affiche pas entièrement.Il affiche simplement comme le montre l'image ci-joint.Après le débogage, j'ai découvert le programme est pendu dans la boucle.Lorsque je tente de combler environ 19000 pixels il fonctionne très bien et continue d'exécuter les instructions suivantes à l'intérieur du programme.Mais cela aussi ne fonctionne pas si j'ai des boucles après.
Ce que j'ai observé, c'est que si j'utilise retard dans mon programme, puis l'écran devient vacillaient et quelque chose (comme une neige) se déplace en arrière-plan et d'ailleurs si j'essaie de changer le mode de mémoire à la couleur, puis moins encore moins grande est imprimé et les formulaires de neige à nouveau .
Je ne sais pas si j'ai besoin pour faire face à toute timings ou quelque chose comme ça.
Détails techniques:
Microcontrôleur: C8051f124
oscillateur externe: 24.5MHz
driver LCD: HX8347-A
Compiler: C51 Keil
Configuration des broches:- Octet bas P4
P5 - octet de poids fort
Sibt LCD_RS = 0 ^ P6;
LCD_REST sbit = ^ P6 1;
sbit LCD_WR = 2 ^ P6;
sbit LCD_RD = 3 ^ P6;
sbit LCD_CS = 4 ^ P6;Code:
Code:# Include <Cygnal/c8051F120.h>sbit LCD_RS = ^ P6 0; / / EY ¾ Y / ÃüÁîÇĐ »
LCD_REST sbit = ^ P6 1; / / ° '»I
sbit LCD_WR = ^ P6 2; / / DJ '¿ØÖÆ
sbit LCD_RD = 3 ^ P6; / / Â ¿ØÖÆ
sbit LCD_CS = 4 ^ P6;delayms void (int nombre) / / / * * X1ms /
(
int i, j;
/ / For (i = 0; i <comte; i )
/ / For (j = 0; j <100; j );
)void main_Write_COM (int DH) / / ÃüÁî
(
LCD_RS = 0;
LCD_CS = 0;
P4 = DH; / / bus [p4-Adresse /] bus de données
P5 = DH>> 8;
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1
cld_write_color vide (hh char, char ll) / / · ËÍÑÕÉ «EY ¾ Yi ª IA ¸ Sseu E ° ß8λ μÍ8Î »· O ± d '« μÝ
(
LCD_RS = 1;
LCD_CS = 0;
hh P4 =;
P5 = hh;
P4 = ll;
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1
(LCD_RS = 1;
LCD_CS = 0;
P4 = DH;
P5 = DH>> 8;
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1
(
main_Write_COM port (COM1);
main_Write_DATA (DAT1);
)
address_set vide (unsigned int x1, unsigned int y1, int x2 non signé, unsigned int y2)
(
main_W_com_data (0x0002, x1>> 8); / / adresse de colonne start2
main_W_com_data (0x0003, x1); / / adresse de colonne START1
main_W_com_data (0x0004, x2>> 8); / / adresse de colonne end2
main_W_com_data (0x0005, x2); / / adresse de colonne end1
main_W_com_data (0x0006, y1>> 8); / adresse de ligne / start2
main_W_com_data (0x0007, y1); / adresse de ligne / START1
main_W_com_data (0x0008, y2>> 8); / adresse de ligne / end2
main_W_com_data (0x0009, y2); / adresse de ligne / end1
main_Write_COM (0x0022)
(SFRPAGE = CONFIG_PAGE;
/ / XBR2 = 0x40;
P6MDOUT = 0xFF;
P4MDOUT = 0xFF;
P5MDOUT = 0xFF;
)/ / Fonction d'initialisation de l'appareil,
/ / Appel Init_Device () à partir de votre programme principal
Init_Device (void)
(
Port_IO_Init ();
)main_init (void)
(Init_Device ();LCD_REST = 1;
delayms (5);
LCD_REST = 0;
delayms (10);
LCD_REST = 1;
delayms (20);main_W_com_data (0x0046, 0x00A4);
main_W_com_data (0x0047, 0x0053);
main_W_com_data (0x0048, 0x0000);
main_W_com_data (0x0049, 0x0044);
main_W_com_data (0x004A, 0x0004);
main_W_com_data (0x004B, 0x0067);
main_W_com_data (0x004C, 0x0033);
main_W_com_data (0x004D, 0x0077);
main_W_com_data (0x004E, 0x0012);
main_W_com_data (0x004F, 0x004C);
main_W_com_data (0x0050, 0x0046);
main_W_com_data (0x0051, 0x0044);
/ / 240x320 fenêtre de réglage
main_W_com_data (0x0002, 0x0000); / / adresse de colonne start2
main_W_com_data (0x0003, 0x0000); / / adresse de colonne START1
main_W_com_data (0x0004, 0x0000); / / adresse de colonne end2
main_W_com_data (0x0005, 0x00EF); / / adresse de colonne end1
main_W_com_data (0x0006, 0x0000); / adresse de ligne / start2
main_W_com_data (0x0007, 0x0000); / adresse de ligne / START1
main_W_com_data (0x0008, 0x0001); / adresse de ligne / end2
main_W_com_data (0x0009, 0x003F); / adresse de ligne / end1
/ / Réglage de l'affichage
main_W_com_data (0x0001, 0x0006); / / IDMON = 0, INVON = 1, NORON = 1, PTLON = 0
main_W_com_data (0x0016, 0x0048) / / MA = 0, MX = 0, MV = 0, ML = 1, BGR = 0, Teon = 0
main_W_com_data (0x0023, 0x0095); / / N_DC = 1001 0101
main_W_com_data (0x0024, 0x0095); / / PI_DC = 1001 0101
main_W_com_data (0x0025, 0x00FF); / / I_DC = 1111 1111
main_W_com_data (0x0027, 0x0002); / / N_BP = 0000 0010
main_W_com_data (0x0028, 0x0002); / / N_FP = 0000 0010
main_W_com_data (0x0029, 0x0002); / / PI_BP = 0000 0010
main_W_com_data (0x002a, 0x0002); / / PI_FP = 0000 0010
main_W_com_data (0x002C, 0x0002); / / I_BP = 0000 0010
main_W_com_data (0x002D, 0x0002); / / I_FP = 0000 0010
main_W_com_data (0x003A, 0x0001); / / N_RTN = 0000, N_NW = 001
main_W_com_data (0x003B, 0x0001); / / PI_RTN = 0000, PI_NW = 001
main_W_com_data (0x003C, 0x00F0); / / I_RTN = 1111, I_NW = 000
main_W_com_data (0x003D, 0x0000); / / DIV = 00
delayms (20);
main_W_com_data (0x0035, 0x0038); / / NQE = 38h
main_W_com_data (0x0036, 0x0078); / / EQP = 78h
main_W_com_data (0x003E, 0x0038); / / SON = 38h
main_W_com_data (0x0040, 0x000f); / / = gdon 0Fh
main_W_com_data (0x0041, 0x00F0); / / GDOFF
/ Alimentation / Configuration
main_W_com_data (0x0019, 0x0049); / / CADJ = 0100, CUADJ = 100 (FR: 60 Hz), OSD_EN = 1
main_W_com_data (0x0093, 0x000f); / / RADJ = 1111, 100%
delayms (10);
main_W_com_data (0x0020, 0x0040); / / BT = 0100
main_W_com_data (0x001D, 0x0007); / / VC1 = 111
main_W_com_data (0x001E, 0x0000) / / = 000 VC3
main_W_com_data (0x001F, 0x0004); / / VRH = 0100
/ / Mise en VCOM pour les OCM 3,2 "Groupe
main_W_com_data (0x0044, 0x004D); / / VCM = 100 1101
main_W_com_data (0x0045, 0x0011); / / VDV = 1 0001
delayms (10);
main_W_com_data (0x001C, 0x0004); / / AP = 100
delayms (20);
main_W_com_data (0x001B, 0x0018); / / GASENB = 0, PON = 1, DK = 1, XDK = 0, VLCD_TRI = 0, STB = 0
delayms (40);
main_W_com_data (0x001B, 0x0010); / / GASENB = 0, PON = 1, DK = 0, XDK = 0, VLCD_TRI = 0, STB = 0
delayms (40);
main_W_com_data (0x0043, 0x0080); / / set VCOMG = 1
delayms (100);
/ / Affichage ON Réglage
main_W_com_data (0x0090, 0x007F); / / SAP = 0111 1111
main_W_com_data (0x0026, 0x0004); / / GON = 0, DTE = 0, D = 01
delayms (40);
main_W_com_data (0x0026, 0x0024); / / GON = 1, DTE = 0, D = 01
main_W_com_data (0x0026, 0x002C); / / GON = 1, DTE = 0, D = 11
delayms (40);
main_W_com_data (0x0026, 0x003C); / / GON = 1, DTE = 1, D = 11
/ / Set de tension interne VDDD
main_W_com_data (0x0057, 0x0002); / / Activer TEST_MODE
main_W_com_data (0x0055, 0x0000); / / VDC_SEL = 000, = 1.95V VDDD
main_W_com_data (0x00FE, 0x005A); / / Pour une protection ESD
main_W_com_data (0x0057, 0x0000); / / Désactiver TEST_MODE
)nulle peinture (couleur unsigned int)
(
int i, j;
address_set (0,0,239,320);for (i = 0; i <239; i )
(
for (j = 0; j <320; j )
(
main_Write_DATA (couleur);
))
)main ()
(
unsigned int i, j, k;
main_init ();Peinture (0x8000)