Em có biết đổi đoạn code của một tác giả trên mạng viết bằng asm, sau đó em mô phỏng proteus chạy rất ok! Nhưng khi em làm board thiệt thì lại ko chạy! LCD chỉ hiển thị dòng 1 đen thui thế thôi! Em biết là mình chưa khởi tạo được LCD đó! Nhưng em không hiểu em sai chỗ nào. Mặc dù em đã kiểm tra và đo từng đường mạch và không có lỗi gì cả! Em xin gửi code và mạch cho mấy bác nghiên cưú giúp!
LCD của em tại sao không chạy???
Collapse
X
-
mình đã làm với LCD- cho chữ chạy ngựoc xuôi, chạy nhảy các vị trí ( các loại từ 16x2 đến 20x4 ), dùng asem-, mình dọc qua bài code của bạn, cách thấy cách khơi tao của bạn khác mình, cậu đình dùng LCD làm đồng hồ à.
-
Comment
-
đây là code khởi tạo & gửi kí tự đến LCD
LCD 4 bit , sd 4 chân cuối D4-D7 , VDK philip . ASM tui ko rành lám , code này là thằng bạn viết , còn tui thích sài C hơn .Code:;============SETUP_LCD====================; LCD_SETUP: MOV A,#2CH CALL WRITE_CONTROL MOV A,#2CH CALL WRITE_CONTROL MOV A,#06H CALL WRITE_CONTROL MOV A,#0FH CALL WRITE_CONTROL MOV A,#2 CALL DELAYMS CALL WRITE_CONTROL CALL DELAYMS MOV A,#0CH ;NO POINT CALL WRITE_CONTROL MOV A,#0CH ;NO POINT CALL WRITE_CONTROL CALL DELAYMS RET ;============CHO PHEP VIET LENH===========; WRITE_CONTROL: MOV REGA,A CLR ACC.3 CLR E CALL CLOCK SETB E ;CALL CLOCK NOP NOP NOP ;CALL DELAYUS CLR E MOV A,REGA SWAP A CLR ACC.3 SETB E CALL CLOCK NOP NOP NOP ;CALL DELAYUS NOP CLR E RET ;==========CHO PHEP VIET DATA=============; WRITE_DATA: MOV REGA,A SETB ACC.3 CLR E CALL CLOCK SETB E ;CALL CLOCK ;CALL DELAYUS NOP NOP NOP CLR E MOV A,REGA SWAP A SETB ACC.3 SETB E CALL CLOCK NOP NOP NOP ;CALL DELAYUS NOP NOP CLR E RET ;===========GUI CHUOI KI TU==============; SEND_STRING: PUSH ACC MOV REG_P,#0 LOOP_ST: CLR A MOVC A,@A+DPTR JZ EXIT_S CALL WRITE_DATA INC REG_P INC DPTR MOV A,REG_P CJNE A,#8,LOOP_ST MOV A,#0C0H CALL WRITE_CONTROL JMP LOOP_ST EXIT_S: POP ACC RET ;=============XOA_MAN_HINH==============; CLR_DISLAY: MOV A,#01H CALL WRITE_CONTROL CALL DELAYMS RET
code CCS viết cho PIC , cũng sd 4 chân cuối của LCD
Code:void LCD_Init ( void ) { delay_ms(200); // thoi gian de LCD khoi dong output_low(RW); // RW = 0 output_low(RS); // che do gui lenh send_to_LCD( 0x00 ); output_high ( E ); output_low ( E ); delay_ms ( 10 ); send_to_LCD( 0x03 ); /* init with specific nibbles to start 4-bit mode */ output_high ( E ); output_low ( E ); delay_ms ( 3 ); output_high ( E ); output_low ( E ); delay_ms ( 3 ); output_high ( E ); output_low ( E ); delay_ms ( 3 ); send_to_LCD( 0x02 ); /* set 4-bit interface */ output_high ( E ); output_low ( E ); delay_ms ( 3 ); LCD_PutCmd ( 0x2C ); /* function set (all lines, 5x7 characters) */ LCD_PutCmd ( 0x0C); /* display ON, cursor off, no blink */ LCD_PutCmd ( 0x06 ); /* entry mode set, increment & scroll left */ LCD_PutCmd ( 0x01 ); /* clear display */ } void LCD_SetPosition ( unsigned int data ) { send_to_LCD( swap ( data ) | 0x08 ); output_high ( E ); output_low ( E ); delay_ms ( 3 ); send_to_LCD( swap ( data ) ); output_high ( E ); output_low ( E ); delay_ms ( 3 ); } void LCD_PutChar ( unsigned int data ) { output_high( RS ); //RS = 1 output_low ( RW ); //RW = 0 send_to_LCD( swap ( data ) ); // gui 4 bit cao output_high ( E ); output_low ( E ); delay_ms ( 3 ); send_to_LCD( swap ( data ) ); //gui 4 bit thap output_high ( E ); output_low ( E ); delay_ms ( 3 ); } void LCD_PutCmd ( unsigned int data ) { output_low(RS); // RS = 0 output_low(RW); // RW = 0 send_to_LCD( swap(data) ); // gui 4 bit cao output_high (E); output_low (E); delay_ms (3); send_to_LCD( swap(data) ); // gui 4 bit thap output_high (E); output_low (E); delay_ms ( 3 ); } void send_to_LCD( unsigned int data ) { output_bit ( LCD_D4, data & 0x01 ); output_bit ( LCD_D5, data & 0x02 ); output_bit ( LCD_D6, data & 0x04 ); output_bit ( LCD_D7, data & 0x08 ); }
Comment
-
bạn vẫn còn chưa hiển thị đc ah ! lúc mới khởi tạo LCd , bạn cần khởi tạo đầy đủ các giá trị & theo thứ tự
sau lần đó , bnj ko cần khởi tạo rườm rà như thế nữa , chỉ cần 0x38 và 0x01 là đủCode:0x38 : 2 dòng & ma trận 5x7 0x08 : tắt con trỏ , tắt hiển thị 0x0C : tắt con trỏ , bật hiển thị 0x01 : xóa màn hình 0x02 : đưa con trỏ về đầ dòng
Comment
-
Sở dĩ lập trình LCD nó chuối bởi vì không có datasheet chi tiết về timing.
- Kiểm tra phần cứng xem đã ngon chưa (xem các SCH trên mạng vô khối) xem có đứt, chập không.
- Xem các code của đồng đạo xem thứ tự các lệnh khởi tạo đúng chưa
- "Mò" timing của các lệnh <-- cái này thì chuối. Nhưng thử một vài giá trị delay khác mà xem, lơ mơ nó lại chạy đấy
Comment
-
Sở dĩ không có timing là vì mua hàng trôi nổi không biết nó dùng con điều khiển là con gì. Nếu mua hàng ngon thì biết ngay nó dùng con gì điều khiển. Tra datasheet con đó là có đủ hết từ timing cho tới khởi tạo rồi đến tập lệnh.Nguyên văn bởi phamthaihoa Xem bài viếtSở dĩ lập trình LCD nó chuối bởi vì không có datasheet chi tiết về timing.
- Kiểm tra phần cứng xem đã ngon chưa (xem các SCH trên mạng vô khối) xem có đứt, chập không.
- Xem các code của đồng đạo xem thứ tự các lệnh khởi tạo đúng chưa
- "Mò" timing của các lệnh <-- cái này thì chuối. Nhưng thử một vài giá trị delay khác mà xem, lơ mơ nó lại chạy đấy
AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
Xem thêm tại Online Store ---> Click here
Mob: 0982.083.106
Comment
-
Thui cứ nghỉ Tết vui vẻ đi. Ra Tết tôi sẽ làm một tut với loại màn LCD ký tự.AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
Xem thêm tại Online Store ---> Click here
Mob: 0982.083.106
Comment
-
chạy rồi đây bạn!!!!!!
mình chỉ sửa lại đoạn mã của bạn 1 tí thôi.
đó là khi bạn đặt tên cho các pin thì dùng lệnh "bit" chứ ko phải là "equ"Attached Files
Comment
-
Giúp mình cái LCD, nó không chạy!
@VNarmy: Sặc, làm sao nghỉ tết vui vẻ được chứ, đây là đề án mà mình làm nộp sau tết đấy, nghỉ tết xong là đi đứt luôn!
Bạn làm tut về LCD thì sao? Mình đã đọc LCD tát nước rồi! Vấn đề không phải là viết chương trình LCD thế nào, cái này dư sức mình biết mà! Dù sao cũng Thanks bạn! Mình sẽ post hình mạch của mình bạn coi dùm mình sai chỗ nào nhé!
@Tranpic: Đổi EQU thành BIT thì sao? Chả ảnh hưởng gì đến điện đâu bạn ơi, mình đã nói với code của mình mô phỏng proteus thì chạy rồi, chỉ làm mạch thật là chưa chạy thôi! Hãy giúp mình thêm nhé, cái đổi này không phải đâu!
Đây là hình mạch của mình, các bạn coi xem mình sai chỗ nào nhé!Attached Files
Comment
-
choy ah ! có cái mạch nhỏ xíu mà bạn làm to tướng như thế , lại chia ra nhìu module . mạch để ko như thế xí lắm ! bạn xịt cho nó lớp sơn , che phần màu tấm nhựa đó lại đi ...chưa pro lám ! thầy chấm cả phần đẹp nữa đó . Đồ án môn lập trình hê thống chứ gì
Comment
-
Mình chia làm nhiều module là có ý đồ mà! Đẹp hay không đẹp tính sau đi, quan trọng là chạy hay không chạy kìa! Mình kiểm tra rất kỹ rồi mà vẫn không hiểu nguyên nhân vì sao không chạy! Mình pó tay rồi đó, ai đã làm rồi thì làm ơn chỉ dùm mình cái!
Comment
Bài viết mới nhất
Collapse
-
-
-
bởi bqvietĐám UPS cửa cuốn đời cổ vẫn chạy 1 biến áp sắt từ vừa để hạ áp điện lưới nạp bình điện, vừa để kích áp bình điện thành sóng vuông đầu ra đấy thôi. Kiểu tiết kiệm này đã có từ mấy chục năm nay. Sơ đồ đại loại như link
https://www.homemade-circuits.com/si...rchargerchang/...-
Channel: Nguồn!
06-09-2026, 16:49 -

Comment