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!
Thông báo
Collapse
No announcement yet.
LCD của em tại sao không chạy???
Collapse
X
-
đây là code khởi tạo & gửi kí tự đến LCD
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ự
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
-
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 đấyAVR đã 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
-
Trả lời cho Mua anten ở đâu?bởi tmcodonAnten bạn thu nguồn sóng nào vậy? Nếu xem truyền hình thì giờ k làm đc anten nữa rồi
-
Channel: Ăng ten và truyền sóng
hôm nay, 15:34 -
-
Trả lời cho Mạch nguồn đôi dùng 7812 và 7912bởi tmcodonThank bác nhá. Tìm mãi mới thấy. Giờ vọc đã xem sao...
-
Channel: Hỗ trợ học tập
hôm nay, 10:39 -
-
bởi tungdqEm cần tìm sơ đồ mạch một số Main máy tính đời cao như Asrock B560M-HDV, các cao nhân chỉ giúp với. Thank!
-
Channel: Các mạch điện ứng dụng
Hôm qua, 08:27 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment