![]() |
giúp em hiển thị lcd 20x4 với
1 Attachment(s)
em viết code bằng asembly chay với lcd 16x2 chạy rùi nhưng mà khi hiển thị lên lcd 20x4 thì lại không chạy được mặc dù em đã set địa chỉ .Các bác chỉ giúp em với. thank các bác nhiều
PROCESSOR P16F877A INCLUDE<P16F877A.INC> DELAY2 EQU 0X20 DELAY3 EQU 0X21 DELAY4 EQU 0X22 ORG 0X00 GOTO START CLOCK MOVLW 0X02 MOVWF PORTB ; CHAN E LEN MUC 1 MOVLW 0X00 MOVWF PORTB ; CHAN E XUONG MUC 0 RETLW 0 DELAY3S CLRF TMR0 CLRF INTCON BSF STATUS,RP0 CLRF 0X81 BCF STATUS,RP0 LOOPP MOVF TMR0,0 XORLW .3 BTFSS STATUS,Z GOTO LOOPP BCF STATUS,RP0 RETLW 0 DELAY1 MOVLW D'2' MOVWF DELAY2 CHO MOVLW D'1' MOVWF DELAY3 MOVLW D'1' MOVWF DELAY4 D1 DECFSZ DELAY3 GOTO $+2 DECFSZ DELAY4 GOTO D1 DECFSZ DELAY2 GOTO CHO RETLW 0 START BCF STATUS,RP1 BSF STATUS,RP0 CLRF TRISB CLRF TRISD BCF STATUS,RP0 CLRF PORTB CLRF PORTD MOVLW 0X38 MOVWF PORTD ; CHON 8BIT 2 DONG FONT 5X8 CALL CLOCK CALL DELAY1 ; CHO THUC HIEN XONG MOVLW 0X0E MOVWF PORTD CALL CLOCK CALL DELAY1 ; CHON HIEN THI HIEN THI CON TRO ; CHON CHE DO HIEN THI CHU THEO HUONG MOVLW 0X04 MOVWF PORTD ; HIEN THI GIAM KHONG DAY CHU CALL CLOCK CALL DELAY1 ; BAT DAU MOVLW 0X01 ; MOVWF PORTD CALL CLOCK CALL DELAY1 LPP MOVLW 0xC9 MOVWF PORTD CALL CLOCK CALL DELAY1 BSF PORTB,0 MOVLW 0X55 MOVWF PORTD MOVLW 0X03 MOVWF PORTB MOVLW 0X01 MOVWF PORTB CALL DELAY1 GOTO LPP |
1 Attachment(s)
Trích:
Code:
PROCESSOR 16F877A |
thank bác nhiều em thử được rùi ah!
|
lcd 20x4 mạch thực tế không hiển thị được
chào các pác: mình có vấn đề như vầy mong các pác nhiệt tình giúp đỡ với, lcd 20x4 mình mô phỏng thì ok nhưng khi làm thực tế thì k hiển thị dc chữ đôi khi hiển thị hàng loạt chữ tàu chạy lung tung với lcd16x2 ráp vào mạch lại chạy bình thường, mình nghỉ chắc do phần khởi tạo lcd chưa đúng thử hoài mà vẫn không được,mong được chỉ giúp
#include <16F877A.h> #include <DEF_16F877A.h> #device *=16 adc=10 #fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT #use delay(clock=20000000) #define RS RD6 #define RW RD5 #define E RD4 #define LCD PORTB unsigned char pic[]="PIC 16F877A"; int16 i; void CONTROL(void) { RS = 0; RW = 0; E = 1; E = 0; delay_ms(1); } void WRITE(void) { RS = 1; RW = 0; E = 1; E = 0; delay_ms(1); } VOID TEN (VOID) { LCD = 0x80; CONTROL(); i=0; WHILE (i<=11) { LCD = pic[i]; WRITE(); i++; } } void main(void) { set_tris_B(0); set_tris_D(0); delay_ms(100); LCD = 0x38; CONTROL(); DELAY_MS(50); LCD = 0x38; CONTROL(); DELAY_MS(1); LCD = 0x38; CONTROL(); LCD = 0x0C; CONTROL(); LCD = 0x01; CONTROL(); LCD = 0x06; CONTROL(); WHILE(1) { TEN(); } } |
Trích:
Code:
#include <16F877A.h> |
cám ơn bạn nhưng cũng thế ah, không hiện được chữ,hiện 2 dòng màu đen thui,y như chỉ có mỗi nguồn thôi,bí wa lên tìm thầy thầy đưa cho code làm hiển thị chữ,mô phỏng thì bình thường nhưng khi ráp thực tế LCD này từ 20x4 bây giờ chỉ con lại 10x2,nghĩa chữ cách chữ 1 ký tự (A B C) TDM biết chỉ giùm với
#include <16f877a.h> #include <DEF_16F877A.h> #DEVICE *=16 ADC=10 #fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT #use delay(clock=12000000) #define RS RD4 #define RW RD5 #define E RD6 #define lcd portb //int SEC,MIN,HOUR,DAY,WEEK,MONTH,YEAR,TEST; //int SECI,MINI,HOURI,DAYI,WEEKI,MONTHI,YEARI,TESTI,SECT EMP,CONTROL; const unsigned char TEMP[]="TEMPERATURE "; INT I; void COMMON_LCD(VOID) { RW=0; E=0; E=1; DELAY_MS(1); RW=1; RS=0; E=0; DELAY_MS(1); E=1; DELAY_MS(10); } void COMMAND_WRITE(VOID) //WRITE DATA TO CONTROL LCD { RS=0; COMMON_LCD(); } void DATAWRITE(VOID) //WRITE DATA TO LCD TO DISPLAY { RS=1; COMMON_LCD(); } VOID SETUP_LCD (VOID) { E=1; RS=0; RW=0; LCD=(0x38); //SETUP LCD DISPLAY TWO LINES COMMAND_WRITE(); DELAY_MS(50); LCD=(0x38); //SETUP LCD DISPLAY TWO LINES COMMAND_WRITE(); DELAY_MS(1); LCD=(0x38); COMMAND_WRITE(); LCD=(0x0C); //SETUP DISPLAY CONTROL COMMAND_WRITE(); LCD=(0x01); //CLEAR DISPLAY COMMAND_WRITE(); LCD=(0x06); COMMAND_WRITE(); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void main() { SET_TRIS_B(0x00); //SETUP PORT B IS OUTPUT SET_TRIS_D(0x00); SETUP_LCD (); LCD=(0x80); //SETUT ADDRESS FOR FIRST LINE COMMAND_WRITE(); DELAY_MS(50); WHILE(I<=11)// TO DISPLAY A TEXT "TEMPERATURE" { LCD=TEMP[I]; DATAWRITE(); DELAY_MS(100); I++; } } |
Cám ơn pac TDM nhiều lúc đầu nạp code của bạn vào không chạy được là do các chân hàn không được tốt,loay hoay mãi rút ra làm lại thì mạch chạy được tới 99%,vẫn còn 1 ký tự thừa hình chữ tàu nằm cuối cùng,dù sao cũng cảm ơn pác nhiệt tình giúp đỡ
|
Múi giờ GMT. Hiện tại là 11:21 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam