Chào Anh ! em là dân IT mới bước chân vào điện tử, vài lab của Anh rất là hữu ích. Sau khi em thử nghiệm thì rút ra được 1 lỗi nho nhỏ khi xài proteus để mô phỏng. Đó là nếu sử dụng P0 làm điều khiển chân RS và E thì các bạn nhớ mắc điện trở (100ohm). Nếu không mắc thì sẽ không chạy được, vì P0 của AT89c52 khác với các P1,P2,P3 là không có điện trở sẵn trong chip. Không biết em có giải thích đúng ko, nếu sai các đừng ném đá em nha.
Cảm ơn vì những video rất bổ ích của anh ! :) Khi mà sau này kiến thức đã vững vàng..Em mong muốn sẽ được tham gia kênh của anh để giúp 1 phần nào đó công sức cho những người đang mới bắt đầu học như em :)
@@johnynguyen840 dạ chào anh dòng đời xô đẩy em chuyển sang mảng software thuần rồi anh. Giờ check lại thấy tin nhắn của các anh , chúc các anh sức khoẻ và ngày càng ra đc nhiều video nữa nhé
Anh Dâng cho em hỏi : trong video anh làm thì kết nối phần cứng đơn giản tức là nối trực tiếp tới 8051,nhưng thực tế 1 số phần cứng phức tạp thì nối thông qua 74138,lúc đó LCD là ngoại vi,theo em học asm thì làm việc với ngoại vi phải sử dụng DPTR,mà C thì em không thấy có DPTR. em không biết viết bằng C kiểu có ngoại vi thế nào,anh làm 1 video về phần này được không ạ
Đức Sỹ Nguyễn Hình như e bị nhầm lẫn rồi, không phải kết nối với ngoại vi phải sử dụng tới thanh ghi DPTR! e nhầm qua truy xuất bộ nhớ ngoại rồi, hoặc là một số ngoại vi có thể giao tiếp theo mô hình bộ nhớ mở rộng, như DS12C887, 8255!!
Đức Sỹ Nguyễn A xem qua rồi! Đúng là người ta mắc LCD theo mô hình bộ nhớ mở rộng thật. Giờ e làm như sau nhé: E thay thế câu lệnh khai báo kết nối với LCD trong hướng dẫn của anh là sbit LCD_RS = P2^0; sbit LCD_EN = P2^1; #define LCD_DATA P3 Giờ đổi nó thành sbit LCD_RS = P3^5; sbit LCD_EN = P3^4; unsigned char xdata LCD_DATA _at_ 0x8000; Biên dịch lại rùi nạp cho vđk thử xem. Nhớ gạt các sw trên kit đúng vị trí nhé!! Đc hay ko báo lại cho a biết!!
anh nói là chân Vss là chân 0V sao trong mô phỏng proteus anh lại nối ngược lại vậy rõ ràng anh nối chân Vss lên 5V và chân VDD anh nối xuống mass mà ban đầu anh ghi là chân Vss là mass và chân Vdd là 5V sao anh mô phỏng ngược lại mà nó vẫn chạy vậy. có gì sai vậy anh. rât mong dc anh giải đáp
e sinh viên năm nhất ....cho em hỏi là giao tiep của LCD vơi 8051 VÀ pic18f4520 cũng tương tự ak a ..hay là khác nhau...nếu có thể a cho em xin it tài liệu
van vien vu hic, sinh viên năm nhất mà quan tâm đến mấy cái này rồi à!! Đúng là mỗi thời một khác, hi hi. Thực ra nếu em hiểu về LCD rồi, thì làm việc với vi điều khiển nào cũng đều điều khiển được LCD hết! Anh chẳng có tài liệu gì để em xin đâu!
Anh cho em hỏi: khi lập em chạy mô phỏng bằng protues thì xuất hiện lỗi logic contention detected on net D4, D5, D6, D7, tại sao xuất hiện lỗi này và cách sửa lỗi này như thế nào ạ?
anh ơi cái chỗ 5:41 kéo rs lên một là sao anh và cách kéo như thế nào, kéo lên một có phải là có điện , còn kéo xuống 0 có phải là tắt điện không anh em còn gà mờ nên xin anh chỉ cho
HỌC IT - ĐIỆN TỬ à anh ơi cho em hỏi một cái nữa là nếu lắp mạch như thế thì có cần cấp nguồn cho 8051 hay chỉ cần cho lcd là đủ không anh và có thể sử dụng pic 16f887 để thay thế ko
Anh Dâng ơi, vậy cách xuất LCD 4bit hay 8bit chỉ khác nhau ở cách nối dây thôi hả anh, số lượng ký tự tối đa xuất ra được vẫn y nhau hả anh? Vì khi em dùng mikroC viết cho PIC16f877a xuất ra LCD 4bit thì nó chỉ hiển thị tối đa được khoảng 70 ký tự (tính tổng các ký tự có trong các chuỗi), xuất nhiều hơn thì nó vẫn dịch được nhưng nó hiện thêm mấy câu caution, khi đổ vào protues hay đổ vào mạch thật đều bị trắng LCD và chương trình không chạy.
Nguyen minh quang 4 bit và 8 bit khác nhau ở cách gửi dữ liệu sang LCD nữa bạn àh!! 4 bit mỗi lần gửi, chỉ gửi được 4 bit, muốn gửi 1 lệnh phải gửi 2 lần. Còn mikroC nó hỗ trợ sẵn thư viện, làm việc tốt với LCD mà!!
anh cho em hỏi chức năng của các dòng trong thư viện main.h vs : #ifndef _MAIN_H_ // ??? #define _MAIN_H_ //? #include //thuvien8051 #define FREQ_OSC 12000000ul //? #endif //? và hàm delay em viết kiểu này được không a: void delay(unsigned int time) { While(time--) }
8 ปีที่แล้ว
cái hàm delay bạn viết theo video ad hướng dẫn cho chuẩn bạn ơi.cái daley dùng while đó không hay cho lắm.
viết kiểu gì chả đc, có điều bạn phải phân tích, căn chính thời gian sao cho chính xác nhất. Còn dòng lệnh ifndef .... nó là chỉ dẫn cho compiler làm việc thôi, xem lại về c là hiểu
không chạy là đúng nha bạn. nếu muốn dùng port0 thì bạn phải nối thêm điện trở vào. các port còn lại thì nối trực tiếp. do nhà sản suất chip họ có mục đích
a Dâng.. ở phút thứ 6. tài liệu chỉ rẳng Vss là nguồn 0 v.. Vdd là nguồn 5 v.. nhưng mà ở phút 23.. a vẽ mạch Vss 5 v... VDD 0 v. . vậy thé nào mới đúng a
+Cao Quang Cũng ko khác nhiều, nhưng ko thể copy & paste được, em phải hiểu và viết lại. Với lại PCWH nó hỗ trợ hàm hết rồi, em nghiên cứu hàm và sử dụng thôi.
Cho e hỏi 1 thắc mắc được không anh? Tại sao khi em viết code mà không thêm vòng lập while vào thì trên LCD xuất ra liên tục kí tự. VD e xuất kí tự A thì kí tự A xuất hiện liên tục không dừng lại. Còn khi thêm vòng lập while thì nó xuất ra đúng, em thấy trong vòng lập không làm gì hết nên em bỏ. :(
anh ơi, em làm giống anh, chỉ khác phần đâu mà sửa mãi nó k ra à, giup em vs #include void Delay_ms (int time) { while(time--); } // Khai bao ket noi voi LCD sbit LCD_RS = P2^0; sbit LCD_EN = P2^1; #define LCD_DATA P3 void Lcd_Cmd(unsigned char cmd) { LCD_RS = 0; LCD_DATA = cmd; LCD_EN = 0; LCD_EN = 1; if(cmd
đức nguyễn trần Chào em! Hàm delay của em bị sai rồi! Em sửa lại dùng hàm Delay bằng 2 vòng lặp for, giống như những bài đầu anh đã hướng dẫn thì nó sẽ chạy được!!
bác cho em hỏi là sao code của em sai ở đâu mà nó chẳng hiển thị gì cả #include #define RS P0_0 #define RW P0_1 #define E P0_2 #define CAO 1 #define THAP 0 #define DATA P3 void delay(unsigned char t) { int i,j; for(i=0;i
8 ปีที่แล้ว
cái hàm delay của bạn bị sai chổ vòng for phía trong kìa..nếu trong cái for đó không muốn ghi cái dấu {} thì cuối for thêm dấu ; là được với cái chân RW bạn kéo nó xuống GND bằng phần cứng cho đỡ tốn câu lệnh
Cảm ơn anh đã hướng dẫn, chúc anh và gia đình tết dương lịch vui khỏe!
Huy Bình Nguyễn Cám ơn em!! hi hi!!
cảm ơn bạn rất nhiều mình đã học và làm thành công phục vụ công việc của mình từ clip của bạn, chân thành cảm ơn :)
Chào Anh ! em là dân IT mới bước chân vào điện tử, vài lab của Anh rất là hữu ích. Sau khi em thử nghiệm thì rút ra được 1 lỗi nho nhỏ khi xài proteus để mô phỏng. Đó là nếu sử dụng P0 làm điều khiển chân RS và E thì các bạn nhớ mắc điện trở (100ohm). Nếu không mắc thì sẽ không chạy được, vì P0 của AT89c52 khác với các P1,P2,P3 là không có điện trở sẵn trong chip. Không biết em có giải thích đúng ko, nếu sai các đừng ném đá em nha.
+Bao Tran cái này đề cập ở mấy bài trước rồi. dùng port 0 phải thêm điện trở thanh kéo lên nguồn
do đặc điểm của port 0 k có điện trở trong nên khi muốn thực hiện
I/O phải có trở thanh kéo lên nguồn..
Cảm ơn vì những video rất bổ ích của anh ! :) Khi mà sau này kiến thức đã vững vàng..Em mong muốn sẽ được tham gia kênh của anh để giúp 1 phần nào đó công sức cho những người đang mới bắt đầu học như em :)
+Thanh Hai Do
Verry good!! Cùng lý tưởng đây! Cố lên em nhé!
Dạ vâng cám ơn anh!! em sẽ lấy những hành động của anh để làm động lực :)
@@thanhhaido9977 giờ bạn đâu rồi
@@johnynguyen840 dạ chào anh dòng đời xô đẩy em chuyển sang mảng software thuần rồi anh. Giờ check lại thấy tin nhắn của các anh , chúc các anh sức khoẻ và ngày càng ra đc nhiều video nữa nhé
em đánh dấu ạ , bài giảng quá hay và chi tiết
Chân LCD_EN phải từ 1 xuống 0 thì LCD mới hoạt động. Chương trình anh viết là từ 0 lên 1, chạy mô phỏng thì được. Em làm mạch thật không hiện thị được. Phải từ 1 xuống 0
anh cho em hỏi, giao thức 4 bit tiết kiệm chân nhưng chức năng thì k nhiều bằng 8 bit đúng ko ạ,
cảm ơn thầy rất nhiều
Anh Dang anh làm giao tiếp ở chế độ 4 bit đi anh...cảm ơn anh...tôi thích học nhưng tự học hơi khó....mong anh giúp đỡ....tôi lớn tuổi rồi khó học lắm
27:41 mình thấy giới thiệu là RS=1 là đọc ghi lệnh. RS =0 là đọc ghi dữ liệu. sao nó lại ngược lại nhỉ
cho em hỏi lập trình xong thì muốn đẹp mình phải gia công PCB hả anh? PCB có nhiệm vụ dẫn điện?
14:38, hình như sai đúng không ạ, đoạn trước đó rs=0 thì đọc ghi dữ liệu sao qua đây ghi lệnh rồi
anh cho em hỏi có thể kết nối 2 vdk at89c51 lại với nhau de điều khiển 60 bóng led được không ạ?
a còn onlien kênh này ko ạ,cho e hỏi là khi thêm nút bấm thì lệnh của lcd vẫn như thế này đúng ko ah
Trong bài a ghi Vss nối đất, s a lại vẽ mạch nguyên lý là nối Vcc nó vẫn chạy z a?
Tại mô phỏng nên nó chạy bậy thôi.
Ra ngoài cắm vậy là cháy LCD đó.
@@minholluvmonkey Không phải mô phỏng nó chạy mà là Proteus cái phần mạch kết nối bắt buộc nó tự kết nối rồi
Anh Dâng ơi a có thể giải thích hộ em là chân VSS là nguồn 0v còn VDD là nguồn 5v mà sao a đấu lại ngược lại mà lCD mà chạy ạ e cám ơn
mô phỏng thì hai chân đó không cần nối vẫn ok bạn ạ, nó là mô phỏng nên thế đó.
Anh Dâng cho em hỏi : trong video anh làm thì kết nối phần cứng đơn giản tức là nối trực tiếp tới 8051,nhưng thực tế 1 số phần cứng phức tạp thì nối thông qua 74138,lúc đó LCD là ngoại vi,theo em học asm thì làm việc với ngoại vi phải sử dụng DPTR,mà C thì em không thấy có DPTR. em không biết viết bằng C kiểu có ngoại vi thế nào,anh làm 1 video về phần này được không ạ
Đức Sỹ Nguyễn Hình như e bị nhầm lẫn rồi, không phải kết nối với ngoại vi phải sử dụng tới thanh ghi DPTR! e nhầm qua truy xuất bộ nhớ ngoại rồi, hoặc là một số ngoại vi có thể giao tiếp theo mô hình bộ nhớ mở rộng, như DS12C887, 8255!!
đây là kit thí nghiệm của bọn em,nhờ anh tìm hiểu và viết giúp em phần LCD với
www.fshare.vn/file/5UHLACJIK3FM
Đức Sỹ Nguyễn A xem qua rồi! Đúng là người ta mắc LCD theo mô hình bộ nhớ mở rộng thật. Giờ e làm như sau nhé:
E thay thế câu lệnh khai báo kết nối với LCD trong hướng dẫn của anh là
sbit LCD_RS = P2^0;
sbit LCD_EN = P2^1;
#define LCD_DATA P3
Giờ đổi nó thành
sbit LCD_RS = P3^5;
sbit LCD_EN = P3^4;
unsigned char xdata LCD_DATA _at_ 0x8000;
Biên dịch lại rùi nạp cho vđk thử xem. Nhớ gạt các sw trên kit đúng vị trí nhé!!
Đc hay ko báo lại cho a biết!!
Thanh Dâng Nguyễn Cảm ơn anh nhiều,em làm được rồi anh,Mong anh có thêm nhiều bài bổ ích nữa
cho em hỏi.khi viết code dài quá ,trong kelc baó lổi quá mưć giơí haṇ thì phải làm sao vậy anh
anh nói là chân Vss là chân 0V sao trong mô phỏng proteus anh lại nối ngược lại vậy
rõ ràng anh nối chân Vss lên 5V và chân VDD anh nối xuống mass mà ban đầu anh ghi là chân Vss là mass và chân Vdd là 5V sao anh mô phỏng ngược lại mà nó vẫn chạy vậy. có gì sai vậy anh. rât mong dc anh giải đáp
ở đây mô phỏng thì nó không báo lỗi, do anh dâng nhầm thôi, bỏ cái đấy đi thì mô phỏng vẫn chạy nha
anh oi sao em de dong lcd_ms(0x01) len truoc thi ko hien thi duoc ma bo dong nay ddi lai chay vay a
e sinh viên năm nhất ....cho em hỏi là giao tiep của LCD vơi 8051 VÀ pic18f4520 cũng tương tự ak a ..hay là khác nhau...nếu có thể a cho em xin it tài liệu
van vien vu hic, sinh viên năm nhất mà quan tâm đến mấy cái này rồi à!! Đúng là mỗi thời một khác, hi hi.
Thực ra nếu em hiểu về LCD rồi, thì làm việc với vi điều khiển nào cũng đều điều khiển được LCD hết!
Anh chẳng có tài liệu gì để em xin đâu!
Anh cho em hỏi: khi lập em chạy mô phỏng bằng protues thì xuất hiện lỗi logic contention detected on net D4, D5, D6, D7, tại sao xuất hiện lỗi này và cách sửa lỗi này như thế nào ạ?
a ơi a cho e xin cái link datasheet của lcd 16x2 mà a đang dùng với ạ!!!
SAo em cắm chân DATA VÀO PORT 0 MÀ nó k hiện LCD A nhỉ ( e chỉnh code r )
mã lệnh LCD 4 bit 4 dòng là gì đó anh ỏi. em dung lcd 20x4
anh ơi, sao không coi quảng cáo đc a , em học ở anh nhiều thấy hay mak tiếc không có quảng cáo coi giúp anh
A cho e hoi e viết đến hiển thị chuỗi kia mà khi chạy thử nó k hiện dk mà hiện toàn chữ lllllllllllllllllll là bị sao ạ
anh ơi cái chỗ 5:41 kéo rs lên một là sao anh và cách kéo như thế nào, kéo lên một có phải là có điện , còn kéo xuống 0 có phải là tắt điện không anh
em còn gà mờ nên xin anh chỉ cho
đảm nguyễn Kéo lên mức logic 1 (5V)và kéo xuống mức logic 0 (0V). Vậy thôi.
HỌC IT - ĐIỆN TỬ à anh ơi cho em hỏi một cái nữa là nếu lắp mạch như thế thì có cần cấp nguồn cho 8051 hay chỉ cần cho lcd là đủ không anh và có thể sử dụng pic 16f887 để thay thế ko
HỌC IT - ĐIỆN TỬ sao a làm chữ nó k chạy mà e làm chữ nó chạy là sao z
Em down code mẫu của anh về xem!!
HỌC IT - ĐIỆN TỬ e biết rồi thank a.thì ra vòng while có thì để chữ đứng yên còn e k viết vào chương trình nên nó chạy qua lại
cái hàm void thứ 3 em xem mãi ko hiểu ! anh có thể giúp em giải thích đc ko?!
A có thể cho em in datasheet tiêng việt như trên đc ko a.....
a cho e hỏi chỗ khai báo thư viện ham main a làm tn mà lúc ấn main_h phát ra luôn được tất cả thư viện đó mà e ấn ko ra..
+Lam Lam. ấn ctrl + space
Anh Dâng ơi, vậy cách xuất LCD 4bit hay 8bit chỉ khác nhau ở cách nối dây thôi hả anh, số lượng ký tự tối đa xuất ra được vẫn y nhau hả anh? Vì khi em dùng mikroC viết cho PIC16f877a xuất ra LCD 4bit thì nó chỉ hiển thị tối đa được khoảng 70 ký tự (tính tổng các ký tự có trong các chuỗi), xuất nhiều hơn thì nó vẫn dịch được nhưng nó hiện thêm mấy câu caution, khi đổ vào protues hay đổ vào mạch thật đều bị trắng LCD và chương trình không chạy.
Nguyen minh quang 4 bit và 8 bit khác nhau ở cách gửi dữ liệu sang LCD nữa bạn àh!! 4 bit mỗi lần gửi, chỉ gửi được 4 bit, muốn gửi 1 lệnh phải gửi 2 lần.
Còn mikroC nó hỗ trợ sẵn thư viện, làm việc tốt với LCD mà!!
ủa, đọc dữ liệu từ LCD về IC là sao em ko hiểu anh? tức là dữ liệu từ LCD chuyễn về IC hả
Chế độ 4 bit viết làm sao a?
anh cho em hỏi chức năng của các dòng trong thư viện main.h vs :
#ifndef _MAIN_H_ // ???
#define _MAIN_H_ //?
#include //thuvien8051
#define FREQ_OSC 12000000ul //?
#endif //?
và hàm delay em viết kiểu này được không a:
void delay(unsigned int time)
{
While(time--)
}
cái hàm delay bạn viết theo video ad hướng dẫn cho chuẩn bạn ơi.cái daley dùng while đó không hay cho lắm.
bạn cho xin code đầy đủ dc ko vay
cái nào bạn??
viết kiểu gì chả đc, có điều bạn phải phân tích, căn chính thời gian sao cho chính xác nhất.
Còn dòng lệnh ifndef .... nó là chỉ dẫn cho compiler làm việc thôi, xem lại về c là hiểu
anh ơi cho em hỏi sao em dùng chân P0_6, và P0_7 thay cho chân P2_0 và P2_1 thì LCD lại không chạy vậy ạ
không chạy là đúng nha bạn. nếu muốn dùng port0 thì bạn phải nối thêm điện trở vào. các port còn lại thì nối trực tiếp. do nhà sản suất chip họ có mục đích
mục đích là gì thế a
mình thấy datasheet nói vậy
a Dâng.. ở phút thứ 6. tài liệu chỉ rẳng Vss là nguồn 0 v.. Vdd là nguồn 5 v.. nhưng mà ở phút 23.. a vẽ mạch Vss 5 v... VDD 0 v. . vậy thé nào mới đúng a
Ở phút 23 anh kết nối bị nhầm rồi!! Cảm ơn em nhé!!
hì
tại sao của e khi chạy chữ hello world nó bị nháy nhỉ
a ơi tại sao e tạo thư viện như a rồi nhưng mà khi e tạo file mới muốn viết chương trình e gọi main.h vào main.c đều ko đc ạ
+nhat tran Em phải add file *.c vào Project!
a cho e hỏi e dùng pcwhd để viết code(e đang học pic16f877a) thì có khác so với đoạn code a đã hướng dẫn ko ạ?
+Cao Quang Cũng ko khác nhiều, nhưng ko thể copy & paste được, em phải hiểu và viết lại. Với lại PCWH nó hỗ trợ hàm hết rồi, em nghiên cứu hàm và sử dụng thôi.
dạ e mới học nên còn nhiều cái chưa rõ,e sẽ tìm hiểu thêm,cảm ơn a ạ
Cho e hỏi 1 thắc mắc được không anh? Tại sao khi em viết code mà không thêm vòng lập while vào thì trên LCD xuất ra liên tục kí tự. VD e xuất kí tự A thì kí tự A xuất hiện liên tục không dừng lại. Còn khi thêm vòng lập while thì nó xuất ra đúng, em thấy trong vòng lập không làm gì hết nên em bỏ. :(
Không có code để xem thì sao trả lời đc
anh ơi, em làm giống anh, chỉ khác phần đâu mà sửa mãi nó k ra à, giup em vs
#include
void Delay_ms (int time)
{
while(time--);
}
// Khai bao ket noi voi LCD
sbit LCD_RS = P2^0;
sbit LCD_EN = P2^1;
#define LCD_DATA P3
void Lcd_Cmd(unsigned char cmd)
{
LCD_RS = 0;
LCD_DATA = cmd;
LCD_EN = 0;
LCD_EN = 1;
if(cmd
đức nguyễn trần Chào em! Hàm delay của em bị sai rồi! Em sửa lại dùng hàm Delay bằng 2 vòng lặp for, giống như những bài đầu anh đã hướng dẫn thì nó sẽ chạy được!!
Sbit xài sao vậy anh
a cho em xin code cua ham delay được không ạ?
bác cho em hỏi là sao code của em sai ở đâu mà nó chẳng hiển thị gì cả
#include
#define RS P0_0
#define RW P0_1
#define E P0_2
#define CAO 1
#define THAP 0
#define DATA P3
void delay(unsigned char t)
{
int i,j;
for(i=0;i
cái hàm delay của bạn bị sai chổ vòng for phía trong kìa..nếu trong cái for đó không muốn ghi cái dấu {} thì cuối for thêm dấu ; là được với cái chân RW bạn kéo nó xuống GND bằng phần cứng cho đỡ tốn câu lệnh
Sao mình buil nó có báo.sai gì đâu
thì không sai à..nhưng mà đã có dấu ; rồi bạn thêm {} nữa mà.bn thử xoá 1 trong 2 cái rồi mô phỏng lại xem
xóa làm sao được
xóa báo lỗi
thi xoa cai dau {} giu cai dau ; lai ah
ad cos facebook không vậy
a cho e xin gmail đi ạ
anh có thể cho em slide nói về lcd đó được ko anh. em cảm ơn . mail của em levietbk93@gmail.com
+ke le viet ko được em!! Em xin slide để làm gì??
anh cho em xin tài liệu đc ko anh . mail em : lamkenvil94@gmail.com tks a
+Lâm Nguyễn
Tài liệu gì em?
+HỌC IT - ĐIỆN TỬ dạ tài liệu hướng dẫn lập trình LCD anh