14-11-2010, 07:07 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Aug 2007
Bài gửi: 4
: |
Giao tiếp MCU và LCD
Em mới bắt đầu viết code CCS C cho PIC nên còn gà lắm. Cả ngày hôm nay viết code giao tiếp vs LCD mà test hoài chưa chạy được. Có đọc qua nhiều bài của các bác trên diễn đàn nhưng vẫn chưa giải quyết được nên mạo muội post code lên cho các bác xem dùm em. CCS vẫn biên dịch bình thường nhưng mà khi nạp ko chạy
Đây là code của em: Code:
#include <16f877a.h> #fuses NOWDT,XT,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT #use delay(clock=4000000) //-------------------------------------- //Dinh nghia chan #byte PORTA=0x05 #byte TRISA=0x85 #byte PORTD=0x08 #byte TRISD=0x88 #define rs PIN_A1 #define rw PIN_A2 #define e PIN_A3 //--------------------------------------- //Khai bao ham void init(); //I/O init void lcd_init(); //LCD init void lcd_WrDt(char c); //Ghi Data void lcd_Str(char* Str); //Ghi chuoi void lcd_WrCm(); //Ghi Comand void lcd_gotoxy(int8 x, int8 y); //Di chuyen con tro toi hang x, cot y //--------------------------------------- //main void main() { char* dd="Hello World"; init(); lcd_init(); lcd_Str(dd); while(1); } //--------------------------------------- //I/O init void init() { TRISA=0x00; //a port as output. TRISD=0x00; //d port as output. } //--------------------------------------- //LCD init void lcd_init() { PORTD=0x30; LCD_WrCm(); // PORTD=0x30; // LCD_WrCm(); // reset PORTD=0x30; // LCD_WrCm(); // PORTD=0x01; //Xoa Man Hinh lcd_WrCm(); PORTD=0x38; //che do 8 bits 2 lines, 5*7 mode. lcd_WrCm(); PORTD=0x0e; //Bat LCD,hien con tro,blink off. lcd_WrCm(); PORTD=0x06; //Con tro tu dong dich fai khi gui 1 ky tu. lcd_WrCm(); PORTD=0x80; //Vi tri dau tien LCD lcd_WrCm(); } //-------------------------------------- //Xuat Chuoi void lcd_Str(char* Str) { int8 i; while(Str[i]!=0) { lcd_WrDt(Str[i]); i++; delay_ms(50); } } //-------------------------------------- //Ghi data vao lcd. void lcd_WrDt(char c) { output_high(rs); //rs=1 Ghi vao thanh ghi Data output_low(rw); //rw=0 Thuc hien viec ghi PORTD=c; output_low(e); //e=0 output_high(e); //e=1 Tao xung canh len de lcd nhan lenh delay_ms(50); } //-------------------------------------- //Ghi lenh vao lcd void lcd_WrCm(void) { output_low(rs); //rs=0 Ghi vao thanh ghi Lenh output_low(rw); // rw=0 Thuc hien viec ghi output_low(e); // e=0 output_high(e); // e=1 Tao xung canh len de LCD nhan data delay_ms(50); } //-------------------------------------- //Di chuyen con tro void lcd_gotoxy(int8 x, int8 y) { switch(x) { case 1: { PORTD=0x80 + y; lcd_WrCm(); break; } case 2: { PORTD=0xC0 + y; lcd_WrCm(); break; } default: break; } } thay đổi nội dung bởi: ducdn, 14-11-2010 lúc 10:02 PM. |
|
|