![]() |
giúp mình về LCD va PIC 16f877
hiện giờ mình đang làm bài tập kết nói và hiển thi từ PIc lên LCD.
+bài tập 1: là kết noi PIC & LCD gữi nhưng chửa nghĩa bình thường lên như " TEST, HELLO"... +bài tập 2: là đưa giá trị của một thanh ghi lên màn hình LCD tại vị trí con trỏ. +bài tập 3: là kết nói PIC lên LCD thông qua ADC để thấy đổi giá trị..... mình cố thể dùng màn hình loại 16x4 dc ko... và kết nói 4birt hay 8bit..... chân thành cảm ơn các bạn. |
1 Attachment(s)
Trích:
đây là cái thư viện mình viết giao tiếp 8 bit BT1: xuất "PIC VIET NAM" ra màn hình LCD Code:
#include <16F877A.h> Code:
#include <16F877A.h> Code:
#include <16F877A.h> |
Thuyet voi cam on anh nhieu....
|
Anh oi cho em them 1 điều là mình kết nói các chân của pic và lcd như thế nào.... Ko có hình ảnh và củng ko có thầy chỉ nưa. Anh giúp em cái này....
Vơi lại em thấy cái doan core kia kết nói..... Driver pic & lcd khá là phúc tạp hơn.... VA 1 CÂU HỎI NỬA LÀ. VI KẾT NÓI NHƯ TRÊN THEO KEI TRIS_B, TRIS_D NHƯ CỦA ANH EM KO KIỂM TRA DC GIA CHI CỦA PIN RB0. MÀ MACH EM LDE6DEP6E6M1 CÀN DỌC TÍNH HIỆU ( H_TO_L) TỪ 1 CHÂN CỦA 1 PORT NHƯ VẬY MÌNH KHAI BÁO NHƯ THẾ NÀO VD: //RE0 LÀ CHÂN KHÔNG CỦA PORT E. IF(RE0 = 0) { a++ } NHƯ VẬY LÀ TƯƠNG ĐƯƠNG GÁN 1 CHÂN CỦA PORT THÀNH 1 CÁI TÊN MÀ MÌNH ĐỊNH TRƯỚC NHƯ " RE0, CHAN01,...." VÀ TƯƠNG TƯ NHƯ THẾ... KHÁC BAO CHO CÁC PORT KHÁC NHƯ THỂ NÀO.. Như thế chất là năng cao hơn àh... Giúp em cai nua nhe... HI CAM ƠN. ANH |
Hiển thị chữ "HELLO WORLD"
#include <16f877a.h> #fuses nowdt,noprotect,nolvp,put,hs #use delaY(clock=4000000) #byte portb=0x6 #byte porte=0x9 #bit e=0x9.0 #bit rs=0x9.1 #bit rw=0x9.2 int i; char mang[]="HELLO WORLD"; void lenh() { rs=0;rw=0;e=1;e=0; delay_ms(5); } void xuat() { e=1;rs=0;rw=0;e=0; delay_ms(5); } void khoitao() { portb=0x1;lenh(); //xoa LCD portb=0x38;lenh(); //hien thi 2 dong portb=0x0e;lenh(); //bat hien thi portb=0x02;lenh(); //dua con tro ve dau dong// } void main() { set_tris_b(0); set_tris_e(0); khoitao(); for(i=0;i<15;i++) { portb=mang[i]; xuat(); delay_ms(5); } while(1) {} } |
//Đo nhiệt đô hiển thị lên LCD và cảnh báo ở ngưỡng 50 oC//
//Phần cứng như sau: porte:chân điều khiển portb:xuất data RA0:ngõ vào analog(từ LM35) RA1:xuất cảnh báo #include <16f877a.h> #fuses nowdt,noprotect,nolvp,put,hs #use delay(clock=4000000) #byte portb=0x6 #byte porte=0x9 #bit e=0x9.0 #bit rs=0x9.1 #bit rw=0x9.2 int i,x; char mang[]="nhiet do :"; void lenh() { rs=0;rw=0;e=1;e=0; delay_ms(5); } void xuat() { e=1;rs=0;rw=0;e=0; delay_ms(5); } void khoitao() { portb=0x1;lenh(); //xoa LCD portb=0x38;lenh(); //hien thi 2 dong portb=0x0e;lenh(); //bat hien thi portb=0x02;lenh(); //dua con tro ve dau dong// } void doc_ADC() { setup_ADC(ADC_clock_internal); stup_ports(AN0); set_channel(0); delay_ms(1); } void main() { set_tris_a(0b01); set_tris_b(0); set_tris_e(0); khoitao(); for(i=0;i<12;i++) { portb=mang[i]; xuat(); delay_ms(5); } while(1) { doc_ADC(); X=read_ADC(); X=X*2.049 //ADC 10bit & LM35// portb=0x89;lenh();//dua con tro LCD toi vi trí sau chu nhiet do: //ban nen xem lai lenh nay..ko biet co dung vi tri ko nua~. portb=x;xuat(); //canh bao// if(x>50) { RA1=1 // } else { RA1=0;// } }} Trong LCD có ký hiệu "oC" bạn chỉ việc portb=0b00101110;xuat(); //bạn tham khảo thêm bảng mã LCD// Chúc bạn thành công. |
cam on bạn nhưng mà vẫn thấy sao sao...
kiểm tra giá trị của 1 chân bit trong 1 pỏt vẫn chưa giải quyết dc. |
bạn ởi bạn có tài liệu gì về kết nối. LCD và PIC ko về các hàm các lệnh, su khoi tao.
viet nhu thề nào... nếu bạn có tài liệu gì về lập trình cho PIC. mình dang làm bai tập kiểm tra pin của 1 port ( vd: porte chân số 0 ) ví du của chương trình. // kiem tra giá trị điện áp tháp ở chuân 0 của porte e0= chân 0 của portE int a; void main() { set_tris_e(0x01); set_tris_d(0x00); if( e0 == 0) { a++; output_d(a); } } |
2 Attachment(s)
-Bạn đọc thêm mấy tài liệu này..còn LCD thì bạn vào trang www.hocavr.com/index.php/app/textlcd người ta chỉ cũng khá chi tiết đó...giao tiếp 4 bit.8bit luôn.
-còn câu hỏi của bạn mình cũng ko hiểu cho lắm..có phải bạn muốn kiểm tra chân nào đó ở mức '1' hay '0' phải không vd:chân a0=0x5.0 if(a0==0) { thực hiện 1... } else { thực hiện 2... } đại khái là thế...hoặc bạn cũng có thể dùng lệnh bit_test(x,i) cũng được..Trong đó x là thanh ghi,còn i là thứ tự bit trong thanh ghi. vd:kiểm tra chân RB3 ở mức cao: if(bit_test(0X5,3)) { } ..... hay kiểm tra chân RA4 ở mức thấp if( ! bit_test(0x5,4)) //bạn chú ý " ! " tức là mức thấp { } ..... -Còn cách khởi tạo LCD thì để hôm nào lục lại mấy cái folder đã,,lâu rồi ko đụng đến..có gì mình gửi mail cho.Chúc bạn may mắn. |
1 Attachment(s)
Đây là file mô phỏng LCD hiện chữ 'HELLO WORLD' bạn lưu ý:khi mô phỏng mà ko có thạch anh ngoài thì khai báo là #fuses xt //thì PIC sẽ chạy thạch anh nội.
-còn nếu rảnh thì gắn thạch anh ngoài (mất nhiều thời gian) thì khai báo #fuses hs -Nếu ko chạy ko hiểu lí do vì sao ko chạy đâu.Rất nhỏ nhưng cần phải lưu ý. -bạn tải file mô phỏng trên mạng cần chú ý chỗ này. |
bạn ởi mình thực hiện lệnh tét 1 chân trong 1 port như bạn chỉ ko dc.
#include <def_877A.h> #fuses NOWDT,NOLVP,NOPROTECT,HS,PUT #use delay(clock=20000000) #byte portd = 0x06 #byte porte= 0x09 #use fast_io(a) #use fast_io(b) #use fast_io(d) void main() { set_tris_a(0xff); set_tris_b(0x00); set_tris_d(0x00); while(1) { if(! bit_test(0x5.1)) {output_d(0x01); } } } chương trình ccs pic c dịch thành công nhưng khi chạy mô phỏng thì nó out ra trị ra port D luôn ko kiểm tra dc.. giup mình chổ này nhe. có gì gữi qua mail: lambaotrungdt@gmail.com fone: 01284279279 |
Xin lỗi mấy bạn nha.Hình như mình up nhầm file mô phỏng.để tối về rồi up lại.sorry sorry
|
plc
thay la la
|
bạn stupid11 bạn có thể giải thich kỹ hơn 1 tý về các:
void lenh() void xuat() và bạn co thể chi ra mình muốn di chuyễn con trỏ và xuất giá trị theo vị trí con trỏ như thế nào ko. vả lại bạn ởi mình muốn kết nối lcd theo kiểu 8bit. vài gửi giá trị của 1 thanh ghi đó lên lcd ( chú ý: là ko dùng thu viện) như thế mình mới đầu mình khai báo làm sao... hé. mong bạn giúp cho. |
1 Attachment(s)
các bác giúp mình giải quyết mạch đếm sản phẩm này giúp mình
// ấn vào chân RAO ( 0x05,0) { a++; // thanh ghi a = a + 1; } hiên thi lên LCD nhưng lúc này lcd hiện thi phi phải là phép cộng 1. hiết chả hiểu. #include <16F877A.h> #include <def_877A.h> #fuses NOWDT,NOLVP,NOPROTECT,HS,PUT #use delay(clock=20000000) #include <lcd_lib.c> #byte porta = 0x05 int a=0; void main() { trisb=0x00; trisd=0x00; lcd_init(); while(2) { lcd_putcmd(0x01); lcd_putcmd(0x0c); delay_ms(500); portd=a; while(1) { if(!bit_test(porta,0)) { a++; a=portd; printf(lcd_putchar,"%d",a); delay_ms(100); } } } } nhưng mà củ thể là em muốn đếm đấy ấn 1 cái thanh ghi a ( #byte a = 0x20) a++; hiện thị a lên lcd; delay_ms(100); quay về kiểm tra rổi lại hiển thị. |
Múi giờ GMT. Hiện tại là 08:09 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam