![]() |
C18 và P18F458
Em viết LCD, dùng library xlcd.h nhưng không chạy.sau khi tham khảo và sửa chữa, cuối cùng đã chạy nhưng nó chạy loạn xạ.bác nào có viết và bị có thể chỉ em cách sửa không?
|
Trích:
Thân, |
em xin lỗi, code đây ạ
xcld1.h Code:
#ifndef __XLCD1_H Code:
#include <delays.h> Code:
//Include |
cho em bổ sung trong xlcd1.c.Func putsXLCD và putrsXLCD.Nếu có hàm delay cuối với thời gian cao thì nó sẽ hiển thị đúng, nhưng lúc đầu nó sẽ chạy từ phải qua trái, sau đó sẽ chạy đúng theo ý mình là từ trái qua phải và quét liên tục
Ví dụ: hiện chữ "hello". nó sẽ chạy h,sau đó e, tiếp l, ... xong hello thì nó lại h, sau e... mặc dù trong hàm đó em không thấy nó hiển thị kiểu quét còn nếu không có hàm delay hay delay quá nhỏ thì nó không hiển thị quét qua lại liên tục. em sài mạch PIC Demo 2+ red |
Trích:
Điều này giải thích việc bạn không có delay hay delay quá nhỏ thì LCD không hiển thị đúng. Thân, |
1 Attachment(s)
dạ.em đã thêm delay.và delay em thêm tốt nhất là 100ms ??? nhưng nó cứ quét liên tục , dùng proteus (mạch PIC2DEMO F18F452) thì nó im ru luôn. em gởi anh đoạn code và phim quay lại, không biết mô tả làm sao.
|
Trích:
Đoạn code của bạn nên có một lệnh SetDDRamAddr ở phía đầu, trước các lệnh xuất dữ liệu, thì có lẽ mới tránh được hiện tượng lần chạy đầu tiên thông điệp được hiển thị từ bên phải sang bên trái. Cũng có khả năng là một lỗi khác, tôi chưa xem thử sơ đồ nguyên lý của board PICDEM 2+. Thân, |
Trích:
Tại sao em khai báo lại các chân Data post và chân dk cho lcd mà nó vẫn ko thay đổi gì nhỉ.( thay đổi xlcd.h rồi lưu lại trong MCC18\h luôn.hay copy vào project cung thế) anh giúp với. |
define lại hàm xlcd.h cho phù hợp với phần cứng
Trích:
#define DATA_PORT PORTD #define TRIS_DATA_PORT TRISD Thì khi mô phỏng chỉ thấy dữ liệu phát ra từ PORTB mà PORTD không thấy có tín hiệu hiệu gì hết. theo mình thấy thì cần làm như sau: 1. Mở thư viện xlcd.h trong mcc18/h ra và thay đổi cho phù hợp với phần cứng của mình --> rồi lưu lại với 1 tên khác chẳng hạn xlcd1.h 2. Tạo 1 file .c hoặc mở notepad lên và lưu file thành .c . Nội dụng file này y như file xlcd1.c của nhnp0708 đã post ở trên 3. Khi tạo Project mới, thì ta add cả 2 file này vào trong Header file và Source file . Đồng thời trong Source code cần thêm hàm : #include <xlcd1.h> #include <xlcd1.c> Như vậy là bạn đã thay đổi các định nghĩa phù hợp với phần cứng rồi đó. Em post nếu có gì sai,mong các anh chị sửa cho !!! Chân thành cảm ơn ! |
Cách Rebuild thư viện xlcd.h
Em có đọc 1 tài liệu trên trang này
http://www.electronicfr.com/index.ph...rograming.html Em thấy có chỉ cách rebuild lại thư viện như sau: How to rebuild the library • - Create a folder where you while build the C18 library and into copy the header (\mcc18\h\xlcd.h) and any source files (from \mcc18\src\traditional\pmc\XLCD\*) • - Start MPLAB with a new project • - Choose a appropriate device • - Onto menu "Project->Build Options...->Project", select Build library target radio button in MPASM/C17/C18/Suite tab • - Add all the source code files and the header file to the project. • - Modify the pin assignment in the xlcd.h file and then build the project • - Copy the p18fxxx.lib file from \mcc18\lib folder to the project folder (where xxx is the device type) • - Run this command in a 'cmd' terminal window: for %%i in (*.o) do mplib /r .\p18fxxx.lib %%i . The modified functions will be changed in the library To use this library, then you can: Open you main project • Copy the modifyed header file xlcd.h and the library p18fxxx.lib into the project folder • Use only local reference of xlcd.h : #include ".\xlcd.h" • Remove the reference to the library in the Linker Scripts • Add the local copy of p18fxxx.lib to the project Em đọc còn vấp váp, không hiểu lắm, đặc biệt là từ chỗ " Run this command in a 'cmd' terminal window: for %%i in (*.o) do mplib /r .\p18fxxx.lib %%i " Vậy có anh chị nào biết cách làm,xin chỉ cho em từng bước để Rebuild lại . Chân thành cảm ơn nhiều ! |
Em có 1 điều như sau, khi em có 1 biến kiểu interger giả sử như là int x=0x01; vậy thì làm sao em hiển thị số 27 đó ra LCD được.
Nếu em đưa x đó ra databus để vào lcd thì lcd không hiển thị cái gì hết. Còn nếu em chuyển nó ra dạng string bằng câu lệnh ltoa(x,y). Và đưa y ra databus để hiện thị thì tương ứng số 0x01 thì nó hiển thị là 16, 0x02 --> 32, 0x03 --> 48. Vậy làm sao em có thể cho lcd hiển thị trực tiếp luôn, như là số 0x01 thì nó hiện thị là số 1 luôn ... Mong sự giúp đỡ của các anh chị !!! |
mình cũng dính lỗi như bạn, ko cao nhân nào trợ giupa thía?
|
Múi giờ GMT. Hiện tại là 01:43 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