em là người mới học 8051, bác nào giúp em chuong trình hiển thị chữ "My Love" lên LCD 16x2 với, bác giúp em cả cái mạch mô phỏng proteus luôn nhé, thank các bác trc nhé
Thông báo
Collapse
No announcement yet.
giúp em về LCD với
Collapse
X
-
tham khảo đoạn code này đi, xem có giúp được gì cho bạn
;chuong trinh nay da o.k
RS EQU P3.0
RW EQU P3.1
E EQU P3.2
ORG 0000H
LCALL KHOI_TAOLCD
MOV 30H,#'0' ;dung o nho chua so dem
MOV 31H,#'0'
MOV 32H,#'0'
MOV 33H,#'0'
MOV 34H,#'0'
MOV 35H,#'0'
MOV 36H,#'0'
MOV 37H,#'0'
MAIN:
LCALL DAU_DONG
LCALL PAGE1
LCALL DELAY
JB P1.0,THOAT
LCALL PAGE2
THOAT: JB P1.1,EXIT
LCALL PAGE3
EXIT: SJMP MAIN
KHOI_TAOLCD:
MOV A,#06H ;dich con tro sang phai
LCALL GHI_LENH
MOV A,#38H ;khai bao 2 line
LCALL GHI_LENH
MOV A,#0CH ;bat hien thi ,tat con tro
LCALL GHI_LENH
MOV A,#1H ;xoa man hinh hien thi
LCALL GHI_LENH
RET
PAGE1:
MOV R0,#0
TT: MOV A,R0
MOV DPTR,#MYDATA
movc a,@a+dptr
LCALL HIEN_THIDULIEU
INC R0
CJNE R0,#16,TT
MOV R0,#0
LCALL XDONG
DONG2: MOV A,R0
MOV DPTR,#MYDATA5
movc a,@a+dptr
LCALL HIEN_THIDULIEU
INC R0
CJNE R0,#16,DONG2
RET
PAGE2:
LCALL XOA_LCD
MOV R0,#0
TT1: MOV A,R0
MOV DPTR,#MYDATA1
movc a,@a+dptr
LCALL HIEN_THIDULIEU
INC R0
CJNE R0,#16,TT1
LCALL KEU_PASS
lcall vitri_lcd1
lcall vitri_lcd2
lcall vitri_lcd3
lcall vitri_lcd4
MOV A,33H
LCALL HIEN_THIDULIEU
MOV A,32H
LCALL HIEN_THIDULIEU
MOV A,31H
LCALL HIEN_THIDULIEU
MOV A,30H
LCALL HIEN_THIDULIEU
;KHI NHAN SONG
INC 30H ;THI MOI TANG
MOV A,30H
CJNE A,#58, TT1
MOV 30H,#'0'
INC 31H
MOV A,31H
CJNE A,#58, TT1
MOV 31H,#'0'
INC 32H
MOV A,32H
CJNE A,#58, TT1
MOV 32H,#'0'
INC 33H
MOV A,33H
CJNE A,#58, TT1
MOV 33H,#'0'
KT1: ret
RET
PAGE3:
LCALL XOA_LCD
MOV R0,#0
TT2: MOV A,R0
MOV DPTR,#MYDATA2
movc a,@a+dptr
LCALL HIEN_THIDULIEU
INC R0
CJNE R0,#16,TT2
LCALL KEU_FAIL
LCALL DELAY
LCALL KEU_FAIL
lcall delay
LCALL KEU_FAIL
lcall delay
RET
XDONG:
MOV P0,#90H
CLR RS ;=0,LENH
CLR RW ;=0,GHI
SETB E
CLR E
ACALL READY
RET
DAU_DONG:
MOV P0,#80H
CLR RS ;=0,LENH
CLR RW ;=0,GHI
SETB E
CLR E
ACALL READY
RET
XOA_LCD:
MOV P0,#1H
CLR RS ;=0,LENH
CLR RW ;=0,GHI
SETB E
CLR E
ACALL READY
RET
GHI_LENH:
MOV P0,A
CLR RS ;=0,LENH
CLR RW ;=0,GHI
SETB E
CLR E
ACALL READY
RET
HIEN_THIDULIEU:
MOV P0,A
SETB RS ;=1,DU LIEU
CLR RW
SETB E
CLR E
ACALL READY
RET
KEU_PASS:
MOV R4,17
Q: CLR P3.7
LCALL DELAY1
SETB P3.7
LCALL DELAY1
DJNZ R4,Q
RET
KEU_FAIL:
MOV R4,15
H: CLR P3.7
LCALL DELAY2
SETB P3.7
LCALL DELAY2
DJNZ R4,H
RET
READY: SETB P0.7 ;P0.7: input
CLR RS ;RS=0: thanh ghi le^.nh
SETB RW ;R/W=1: ddo.c
BACK:
CLR E ;E=0 -> ta.o ca.nh le^n
SETB E ;E=1
JB P0.7,BACK ;cho co ban =0
RET
VITRI_LCD1:
MOV A,#8FH ;o thu 16 cua line 1 lcd
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD2:
MOV A,#8EH
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD3:
MOV A,#8DH
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD4:
MOV A,#8CH
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD5:
MOV A,#0CFH
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD6:
MOV A,#0CEH
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD7:
MOV A,#0CDH
LCALL GHI_LENH
LCALL DELAY
RET
VITRI_LCD8:
MOV A,#0CCH
LCALL GHI_LENH
LCALL DELAY
RET
DELAY:
MOV R6,#255
DEL1: MOV R7,#255
DEL2: DJNZ R7,DEL2
DJNZ R6,DEL1
RET
DELAY1: MOV R6,#5
DEL3: MOV R7,#92
DEL4: DJNZ R7,DEL4
DJNZ R6,DEL3
RET
DELAY2: MOV R6,#0FH
DEL5: MOV R7,#0EH
DEL6: DJNZ R7,DEL6
DJNZ R6,DEL5
RET
ORG 200H
MYDATA:
db " empty test "
ORG 250H
MYDATA5:
DB " READY ! "
ORG 300H
MYDATA1:
DB"***** PASS *****"
ORG 350H
MYDATA2:
DB "***** FAIL *****"
END
-
xem thử đi đây là mình chỉ conver lại thôi
Code:// Ð.nh ngh.a các chân c.a LCD1602 // Trong ví d. m.u s. d.ng 8 bit ð. ði.u khi.n LCD. #include <REGX51.H> #include <stdio.h> #define rs P3_5 #define rw P3_6 #define enable P3_7 #define lcd_data P1 unsigned char const LCD_INIT_STRING[4] = {1,0x38,6}; unsigned char lcd_read_byte() { unsigned char dat; lcd_data = 0xFF; rw = 1; rw = 1; enable = 1; enable = 1; dat = lcd_data; enable = 0; return( dat); } void delay_us(unsigned char n) { unsigned char i; for(i=0;i<n;i++); } void delay_ms(unsigned int n) { unsigned int i; for(i=0;i<n;i++) delay_us(255); } void lcd_send_data( unsigned char n ) { lcd_data = n; lcd_data = n; delay_us(10); enable = 1; delay_us(10); enable = 0; delay_us(10); } void lcd_send_byte( unsigned char address, unsigned char n ) { rs = 0; while ( lcd_read_byte()&0x80) ; rs = address; delay_us(10); rw = 0; delay_us(10); enable = 0; lcd_send_data(n); } void lcd_init() { char i; rs = 0; rw = 0; enable = 0; delay_ms(15); for(i=0;i<3;++i) lcd_send_byte(0,LCD_INIT_STRING[i]); } void lcd_gotoxy( unsigned char x, unsigned char y) { unsigned char address; switch(y) { case 1 : address=0x80;break; case 2 : address=0xC0;break; } address+=x-1; lcd_send_byte(0,address); } void lcd_putc( char c) { lcd_send_byte(1,c); } void lcd_put_str( const char *msg) { while(*msg) lcd_putc(*msg++); } main() { lcd_init(); lcd_gotoxy(1,1); lcd_put_str ("LCD 1602 DEMO"); lcd_gotoxy(1,2); lcd_put_str ("Chuc ban thanh cong"); while(1); }
Comment
-
làm gì viết dài ghê thế ! giao tiếp LCD 8bit là đơn giản nhất , nhưng mất đến 11 chân VDK. Sau đó đến 4 bit (chỉ mất 1 port), tiếp đến là chỉ dùng 3 chân VDK vẫn giao tiếp đc với LCD (wa kon 74HC164)
U mới học thì code giao tiếp 8 bit nè
Code:#include<AT89S53.h> sbit RW = 0x94; // RW = P1.4 sbit RS = 0x95; // RS = P1.5 sbit E = 0x96; // E = P1.6 // data = P2 void delay_ms(unsigned int ms) { unsigned int i,j; for (i = 0;i<ms;i++ ) {for(j=0;j<120;j++){} } } void LCD_PutChar() { RW = 0 ; RS = 1 ; E = 1; E = 0 ; delay_ms(1);} void LCD_PutCmd() { RW = 0 ; RS = 0 ; E = 1; E = 0 ; delay_ms(1);} void int_LCD() { delay_ms(100); P2= 0x38 ; LCD_PutCmd() ; P2= 0x0C ; LCD_PutCmd() ; P2= 0x01 ; LCD_PutCmd() ; P2= 0x06 ; LCD_PutCmd() ; } main() { P0 = 0xFF ; P1 = 0xFF ; P2 = 0xFF ; int_LCD(); P2 = 0x80 ; LCD_PutCmd() ; // cho hiện dong Ready! ở dòng 1 cột 1 P2 = 'R' ; LCD_PutChar() ; P2 = 'e' ; LCD_PutChar() ; P2 = 'a' ; LCD_PutChar() ; P2 = 'd' ; LCD_PutChar() ; P2 = 'y' ; LCD_PutChar() ; P2 = '!' ; LCD_PutChar() ; while(1); }
Comment
-
-
Nguyên văn bởi han_nang_008 Xem bài viếtem là người mới học 8051, bác nào giúp em chuong trình hiển thị chữ "My Love" lên LCD 16x2 với, bác giúp em cả cái mạch mô phỏng proteus luôn nhé, thank các bác trc nhé
Comment
-
trong mục sample có lcd_demo đó vào đó xem
rồi nạp file bạn lập trình vào
ok nhé !
lcd có 2 chế độ hoạt động ( 8 bit và 4 bit)tùy thuộc vào code bạn khởi tạo lcd
đọc thêm datasheet sẽ giúp ích nhiều
chúc bạn thành công!0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
||
PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp về vấn đề đảo chiều động cơbởi nguyendinhvanCó nhiều cách, nhiều phương án làm được như thế. Động cơ nào cũng làm được như thế.
Banj có thể dùng động cơ quạt thông gió cũng được. Dĩ nhiên phải lắp thêm vài linh kiện, ch tiết điều khiển cảm biến....
0903252168...-
Channel: Các hệ thống tự động hóa khác
Hôm qua, 20:02 -
-
Trả lời cho Có ai còn xem robocon không? khi cácbởi nguyendinhvanXem làm gì.
Bây giờ nó đang bò lồm cồm, lung tung . Từ các công trường đóng gạch ,lây lan vào từng nhà máy cơ khí. Đến các xưởng sản xuất tư nhân nó cũng bò vào rồi . Và ...
Vài năm nữa thôi, nó sẽ bò vào tận giường ngủ...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 19:43 -
-
Trả lời cho Sự lạc hậu, rồi ai cũng sẽ nếm phải.bởi nhathung1101Lão lại dạy hư bọn trẻ. "Tâm" cái gì mà "Tâm"???
Nếu thực sự có "Tâm", ắt phải nhớ nguyên lý. Phải biết chú "Tâm" phân tích mạch. Phải biết "tiền nhân hậu quả".
Được vậy...-
Channel: Tâm tình dân kỹ thuật
29-07-2025, 22:56 -
-
Trả lời cho Sự lạc hậu, rồi ai cũng sẽ nếm phải.bởi nguyendinhvanLạc hậu là nó từ trong Tâm họ mà ra, không phải từ phương tiện, điều kiện bên ngoài.
Nguwfi ta đã lạc hậu thì dù trên tay họ cầm iphon 15, kết nối mạng 456G thì họ vẫn lạc hậu thôi.
Họ lạc hậu thì dù họ vận hành cái Laptop...-
Channel: Tâm tình dân kỹ thuật
28-07-2025, 22:09 -
Comment