10-04-2008, 10:52 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 9
: |
Hiện thị LCD bị sai?
Em viết chương trình đơn giản để hiện thị LCD, nhưng ko hiểu sao hiển thị ko như ý muốn, ko biết sai ở đâu. Các bác giúp em mới. Chương trình ko lỗi nhưng hiển thị các số bị lỗi. Em mới học nên cũng ko biết dùng debug, tìm trong diễn đàn mãi ko thấy, bác cho em xin link hướng dẫn debug ccs với ạ.
Code:
#include <16F877a.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000)//xung thach anh #use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)//khai bao che do hoat dong cua 16F877A //Day la DK LCD chuyen dung cho 16F877A //Voi cac qui dinh chan nhu sau // Data out=PortB // D0=RS // D1=RW // D2=E // trinh tu lam viec // 1)KhoiDong() // 2)DieuKhien(Malenh) // 3)GiuLieu(Code) byte i; int8 a[8]; void DieuKhien(Byte Ma_Lenh) { Output_B (Ma_lenh); //Xuet ma lenh Output_low(pin_D5); //Dat Rs=0 cho xuat lenh Output_low(pin_D6); //R\W=0 de ghi du lieu toi LCD output_high(pin_D7); Output_low(pin_D7); //;Dat E=0 chot du lieu Delay_ms(10); } void KhoiDong() { DieuKhien(0x38); DieuKhien(0x0e); DieuKhien(0x01); DieuKhien(0x06); DieuKhien(0x80); } void GiuLieu(byte Code) { Output_B (Code); //Xuat ma lenh output_high(pin_D5); //Dat Rs=1 xua du lieu Output_low(pin_D6); //R\W=0 de ghi du lieu toi LCD output_high(pin_D7); Output_low(pin_D7); //Dat E=0 chot du lieu Delay_ms(100); } void Trabang (byte x) { byte y,; for (i=1;i<=8;i++) { y = x/(2^(8-i)); / dịch 8-i bit y = y&&1; /lấy bit thấp nhất if (y == 1) a[i] = 49; /gui ra LCD hien so 1 if (y == 0) a[i] = 48; /LCD hien so 0 } } Void Main() { KhoiDong(); Trabang(0); for (i=1;i<=8;++i) { GiuLieu(a[i]); } } thay đổi nội dung bởi: namqn, 11-04-2008 lúc 12:16 AM. |
|
|