![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 8
: |
giúp em hiển thị lcd 20x4 với
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 |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
Code:
PROCESSOR 16F877A #INCLUDE "P16F877A.INC" __CONFIG 0x3F72;cau hinh pic DELAY2 EQU 0X20 DELAY3 EQU 0X21 DELAY4 EQU 0X22 ORG 0X00 GOTO START CLOCK BSF PORTB,1 call DELAY1 BcF PORTB,1 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 .4 MOVWF DELAY3 CHO MOVLW .255 MOVWF DELAY2 DECFSZ DELAY2 GOTO $-1 DECFSZ DELAY3 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 ;xoa man hinh MOVWF PORTD CALL CLOCK CALL DELAY1 LPP BCF PORTB,0;hieu la lenh MOVLW 0xC9;hang 2 cot 9 MOVWF PORTD CALL CLOCK BSF PORTB,0;hieu la data MOVLW 0X55 MOVWF PORTD CALL CLOCK CALL DELAY1 GOTO LPP end
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 8
: |
thank bác nhiều em thử được rùi ah!
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 26
: |
![]() 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(); } } |
![]() |
![]() |
![]() |
#5 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
Code:
#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; delay_ms(1); E = 0; } void WRITE(void) { RS = 1; RW = 0; E = 1; delay_ms(1); E = 0; } 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(500); LCD = 0x38; CONTROL(); LCD = 0x0E; CONTROL(); LCD = 0x06; CONTROL(); LCD = 0x01; CONTROL(); TEN(); WHILE(1) { } }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 26
: |
![]() 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++; } } |
![]() |
![]() |
![]() |
#7 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 26
: |
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 đỡ
|
![]() |
![]() |
![]() |
|
|