Hướng dẫn hiển thị LCD dùng ccs cho người mới bắt đầu

Hiếu Ròm

Học sinh phổ thông
chương trình của bạn có vấn đề: không khai báo cho PortB mặc dù bạn truy xuất tới bit nhớ; nhận tín hiệu vào cần xét "INPUT_STATE" tại chân đó; hàm delay và while lúc chạy chương trình sẽ làm trôi sản phẩm khi c.trình đang ở đó mà có s.phẩm đi qua cảm biến...
phần cứng cũng không đúng, ngõ ra của cảm biến là '1' hoặc '0' làm gì có chuyện thả nổi như bạn vẽ trong hình được??
mình không hiểu: nghĩa là chỗ void main() mình thiếu set_tris_b à hay trên khai báo mình chỉ khai báo #bit b thay vì #port b, còn trôi sản phẩm là sao nghĩa là giờ mình bỏ delay ra à. còn ngõ ra cảm biến mình nghe nói là ra xung nên mình gắn xung vào thôi :D ai dè sai rồi :D
 

hd03

Sinh viên đại học
mình không hiểu: nghĩa là chỗ void main() mình thiếu set_tris_b à hay trên khai báo mình chỉ khai báo #bit b thay vì #port b, còn trôi sản phẩm là sao nghĩa là giờ mình bỏ delay ra à. còn ngõ ra cảm biến mình nghe nói là ra xung nên mình gắn xung vào thôi :D ai dè sai rồi :D
trong main bạn cần cấu hình portB là ngõ vào;
nên #define theo tên Pin của port, hạn chế chỉ thẳng tới vùng nhớ của nó như bạn;
chổ delay: ví dụ c.trình đã delay được 10ms, lúc này có xung từ cảm biến đưa về, nhưng vì còn 40ms nữa mới thoát khỏi delay nên xung đếm này không được VĐK ghi nhận và mất luôn nếu xung ngắn. tương tự với while;
chổ cảm biến: nó xuất ra 2 mức '0' hoặc '1' nên bạn lắp thẳng vào chân VĐK không sao, còn bây giờ bạn thả nổi nó thế kia thì không được nhé
 
Sửa lần cuối:

anh.me

Học sinh phổ thông
moi nguoi giup em mot xiu ak
em dang tim hieu ve lcd 16x2 khi biuld thi dung nhung mo phong thi proteus bao loi
moi guoi xem gium em doan code

#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

#define LCD_ENABLE_PIN PIN_E0
#define LCD_RS_PIN PIN_E2
#define LCD_RW_PIN PIN_E2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D
#include <LCD.C> // Thu vien ham cho LCD
void lcd_refresh()
{
lcd_send_byte(0,1);
lcd_send_byte(0,6);
}
//================================================== ==================================================

void main()
{
set_tris_d(0);
output_a(0);
LCD_init();
lcd_refresh();
lcd_gotoxy(1,1);
lcd_putc("DIEN TU VIET NAM");
lcd_gotoxy(1,2);
lcd_putc(" STARTECHMEC ");
}
 

anh.me

Học sinh phổ thông
moi nguoi giup em mot xiu ak
em dang tim hieu ve lcd 16x2 khi biuld thi dung nhung mo phong thi proteus bao loi
moi guoi xem gium em doan code

#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

#define LCD_ENABLE_PIN PIN_E0
#define LCD_RS_PIN PIN_E2
#define LCD_RW_PIN PIN_E2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D
#include <LCD.C> // Thu vien ham cho LCD
void lcd_refresh()
{
lcd_send_byte(0,1);
lcd_send_byte(0,6);
}
//================================================== ==================================================

void main()
{
set_tris_d(0);
output_a(0);
LCD_init();
lcd_refresh();
lcd_gotoxy(1,1);
lcd_putc("DIEN TU VIET NAM");
lcd_gotoxy(1,2);
lcd_putc(" STARTECHMEC ");
}
 

hd03

Sinh viên đại học
Nếu muốn dùng các Pin của port E làm các ngõ I/O số thì bạn cần tắt tính năng Analog của nó trước đã.
setup_adc_ports(NO_ANALOGS);
Sau đó SET_TRIS cho Port E biết là output
code sai:
#define LCD_RS_PIN PIN_E2
#define LCD_RW_PIN PIN_E2
#define LCD_DATA7 PIN_D?
Không cần CTC LDC_Refresh() vì bản thân hàm LCD_INIT() đã refresh dùm bạn.
mặc định LCD.c sẽ dùng Port D hoặc Port B. Bạn nên sử dụng theo đúng yêu cầu của nhà sản xuất.
 

anh.me

Học sinh phổ thông
Nếu muốn dùng các Pin của port E làm các ngõ I/O số thì bạn cần tắt tính năng Analog của nó trước đã.
setup_adc_ports(NO_ANALOGS);
Sau đó SET_TRIS cho Port E biết là output
code sai:
#define LCD_RS_PIN PIN_E2
#define LCD_RW_PIN PIN_E2
#define LCD_DATA7 PIN_D?
Không cần CTC LDC_Refresh() vì bản thân hàm LCD_INIT() đã refresh dùm bạn.
mặc định LCD.c sẽ dùng Port D hoặc Port B. Bạn nên sử dụng theo đúng yêu cầu của nhà sản xuất.
cam on rat nhieu a
 

anh.me

Học sinh phổ thông
Nếu muốn dùng các Pin của port E làm các ngõ I/O số thì bạn cần tắt tính năng Analog của nó trước đã.
setup_adc_ports(NO_ANALOGS);
Sau đó SET_TRIS cho Port E biết là output
code sai:
#define LCD_RS_PIN PIN_E2
#define LCD_RW_PIN PIN_E2
#define LCD_DATA7 PIN_D?
Không cần CTC LDC_Refresh() vì bản thân hàm LCD_INIT() đã refresh dùm bạn.
mặc định LCD.c sẽ dùng Port D hoặc Port B. Bạn nên sử dụng theo đúng yêu cầu của nhà sản xuất.
anh ơi cho em hỏi là ,nếu em dùng pt100 để đo nhiệt độ và dùng pic 16f887 để điều khiển thì em cần phải kết nối ngõ vào như thế nào ạ(ví dụ:mạch công suất hay mạch trụ .....)và ngõ ra điều khiển 6 bóng đèn (mỗi bóng 150w) thì phải dùng mạch công suất như thế nào để mạch hoạt động được tốt a
 

hd03

Sinh viên đại học
anh ơi cho em hỏi là ,nếu em dùng pt100 để đo nhiệt độ và dùng pic 16f887 để điều khiển thì em cần phải kết nối ngõ vào như thế nào ạ(ví dụ:mạch công suất hay mạch trụ .....)và ngõ ra điều khiển 6 bóng đèn (mỗi bóng 150w) thì phải dùng mạch công suất như thế nào để mạch hoạt động được tốt a
Xin lỗi bạn vì mình không vào diễn đàn thường xuyên nữa!
PT100 với PIC thì ở giữa đó bạn lắp thêm 1 mạch "giao tiếp" để PIC "hiểu" PT100 "nói" gì. bạn có thể lắp 1 mạch OPAMP như hình:


Nguồn: internet

Rồi dùng ADC của PIC để đọc sự thay đổi của tín hiệu. Chú ý quan trọng: nhớ cài đặt đúng độ phân giải của PIC, nếu không sẽ dẫn tới giá trị bị sai so với thực tế.
Ngõ ra bạn cho kích qua relay ở 24V làm trung gian, rồi từ relay đó bạn cho đóng tiếp điểm động lực.
Chúc bạn thành công.

Thân!
 

anh.me

Học sinh phổ thông

Xin lỗi bạn vì mình không vào diễn đàn thường xuyên nữa!
PT100 với PIC thì ở giữa đó bạn lắp thêm 1 mạch "giao tiếp" để PIC "hiểu" PT100 "nói" gì. bạn có thể lắp 1 mạch OPAMP như hình:


Nguồn: internet

Rồi dùng ADC của PIC để đọc sự thay đổi của tín hiệu. Chú ý quan trọng: nhớ cài đặt đúng độ phân giải của PIC, nếu không sẽ dẫn tới giá trị bị sai so với thực tế.
Ngõ ra bạn cho kích qua relay ở 24V làm trung gian, rồi từ relay đó bạn cho đóng tiếp điểm động lực.
Chúc bạn thành công.

Thân!
a cho em hỏi là nếu với mạch ở trên em phải đau nỗi pt100 và cài đặt độ phân giải cho pic như thế nào ạ . phần ngộ ra thì em biết rồi nhưng phần ngõ vào thì em ko rõ phải làm thế nào mong a giúp đỡ ,neu em dung truc tiep pt100 noi voi pic luon co anh huong gi ko a
upload_2017-8-30_15-54-13.png



em dau noi nhu the nay duoc khong ?,nhung pt100 cua em loai 3 day va nhiet do do duoc la -50->250 neu noi nhu vay co anh huong gi den pic ko a?
 
Sửa lần cuối:

Vũ Văn An

Học sinh phổ thông
có ai giúp đỡ em dc ko, e đang gặp rắc rối khi hiển thị lcd 20x4, mô phỏng thì chạy, nhưng khi cắm thử thì nó ko chạy, màn hình cứ sáng mà chữ không chạy được
 

Quảng cáo Google