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> |
Bạn muốn kết quả được hiển thị như thế nào, và thực tế thì LCD hiển thị ra sao? Bạn đưa thêm thông tin thì sẽ thu hẹp phạm vi tìm lỗi, những người khác có thể giúp bạn nhanh hơn.
Bạn nên xem thử luồng nằm ở link trong chữ ký của tôi, để đặt vấn đề hiệu quả hơn. Thân, |
Em muốn hiển thị một số nhị phân 8 bit lên LCD, nên làm như sau: trabang (byte x): mục đích là chuyển từng bit của x thành từng phần tử của mảng 8 phần tử, sau đó hiển thị từng phần tử đó. Với x=255, hiển thị là 11111111 (đúng) nhưng với các số khác thì sai hết cả. Dò mãi mà ko biết lỗi ở đâu? Cảm ơn bác nhiều.
|
Như vậy có lẽ hàm trabang() của bạn có vấn đề. Thực ra để chuyển dữ liệu binary thành một chuỗi để hiển thị thì không cần làm cầu kỳ như bạn.
Bạn chỉ cần khai báo một bảng mặt nạ như sau: Code:
byte const mask[8] = {1, 2, 4, 8, 16, 32, 64, 128}; Code:
for (i=0; i<=8; i++) Thân, |
Em hiểu ý bác rồi, em làm được rồi, thank you ever so much.
|
các bạn ah. Tớ đang muốn hiển thị giá trị điện áp đọc ra từ ADC ra LCD nhưng đang gặp 1 vấn đề là mình không biết hiển thị số dấu phẩy động thế nào: Ví dụ:mình cần hiển thị 5,15 thì mình mới hiển thị được số 5 thôi. Có bạn nào biết thì chỉ mình với nhé
|
Trích:
1. Hiển thị phần nguyên 2. Hiển thị dấu "," (hay dấu ".", nếu muốn dùng kiểu Anh Mỹ) 3. Lấy phần thập phân (bằng biểu thức: value - floor(value)) 4. Nhân phần thập phân với 100 (hay 1000) để có 2 chữ số (3 chữ số) được hiển thị (ở dạng số nguyên) 5. Hiển thị tiếp 2 (hay 3) chữ số đó Thân, |
Trích:
Xin chào, namqn xem lại có được không: for (i=0; i<=8; i++)... --> i = 0, 1, 2, 3, 4, 5, 6, 7, 8 --> 9 bits đúng ra phải là: for (i=0; i<8; i++) Và nữa, đoạn code trên sẽ tạo chuỗi có LSB trước MSB(?) Có thể thực hiện đơn giản hơn như sau không: Code:
for (i=0; i<8; i++) |
Đúng vậy, for (i=0; i<8; i++) thì mới đúng. Tôi đã không kiểm tra cận.
Code đúng là tạo ra LSB nằm trước MSB, nhưng có thể in MSB trước hay sau đều được, tùy vào đoạn code in dữ liệu thôi. Tôi chỉ gợi ý cách giải quyết yêu cầu của thuật toán, còn thuật toán là do tác giả chọn. Việc chọn lựa giữa Code:
if (x & (0x80 shr i)) a[i] = '1'; else a[i] = '0'; Code:
if (x & mask[i]) a[i] = '1'; else a[i] = '0'; Bạn đã đánh sai username của tôi. Thân, |
Trích:
|
Trích:
|
Múi giờ GMT. Hiện tại là 07:30 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