Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
READY: SETB BUSY ;P1.7: CHON LAM BIT KIEM TRA CO BUSY
CLR RS ;RS = 0: LENH
SETB RW ;R/W = 1:CHON CHUC NANG DOC TU LCD
BACK: CLR E ;EN = 0 - > TAO CANH LEN
SETB E ;EN = 1
JB BUSY,BACK ; Nhảy về lable back nếu busy vẫn =1
NOP ;CHO DEN KHI CO BUSY = 0,KHONG BUSY
RET
code đã chạy với lcd 2 dòng
nếu dùng C bạn chuyển các câu lệnh trên sang ngôn ngữ C!
Chúc thành công!
Lâu lắm không để ý đến điện tử, nên tìm mấy trang gần gần mà không biết các bác nói về vấn đề gì? Em đoán là đang lục bình về cái lcd
Bảng mã lệnh của LCD
Mã (HEX) Lệnh đến thanh ghi của LCD
01 Xoá màn hình hiển thị
02 Trở về đầu dòng
04 Giảm con trỏ(dịch con trỏ sang trái )
06 Tăng con trỏ(dịch con trỏ sang phải)
05 Dịch hiển thị sang phải
07 Dịch hiển thị sang trái
08 Tắt con trỏ, tắt hiển thị
0a Tắt hiển thị, bật con trỏ
0c Bật hiển thi, tắt con trỏ
0e Bật hiển thị, nhấp nháy con trỏ
0f Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
1c Dịch toàn bộ hiển thị sang phải
80 Ép con trỏ về đầu dòng thứ nhất
0c0 Ép con trỏ về đầu dòng thứ 2
38 Hai dòng và ma tận 5x7.
Chương trình
/*=========bo tien xu li===============*/
#include<AT89x51.h>
#include<string.h>
/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = P3^0; // chon thanh ghi
sbit RW = P3^1; // doc/ghi
sbit EN = P3^2; //cho phep chot du lieu
/*===========cac chuong trinh con cua LCD==========*/
/*--------------kiem tra su san sang cua LCD------------------------*/
void wait(void)
{
RS=0; //chon thanh ghi lenh
RW=1; //đoc tu LCD
LCDdata=0xff; //gia tri 0xff
while(BF) //kiem tra co ban
{
EN=0; //dua xung cao xuong thap đe chot.
EN=1; //dua chan cho phep len cao
}
}
/*------------------------thiet lap lenh cho LCD--------------------------*/
void LCDcontrol(unsigned char x)
{
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//đoi LCD san sang.
}
/*------------------------------Khoi tao LCD-------------------------*/
void LCDinit(void)
{
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh, bat con tro
LCDcontrol(0x01);//xoa man hinh
}
/*-------------------------thiet lap du lieu cho LCD-----------------*/
void LCDwrite(unsigned char c)
{
RS=1;//ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//cho
}
void LCDwrites(unsigned char *s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++){
LCDwrite(*(s+count));
}
}
/*========================ham chinh==================*/
void main(void)
{
LCDinit(); // khoi tao LCD
LCDcontrol(0x80);// dua con tro ve dau dong 1
LCDwrites("VU XUAN LOI");
LCDcontrol(0xC0);
LCDwrites("VI DIEU KHIEN");
while(1); //vong lap vo han
}
truoc het cam on ban quynh rat nhieu, minh moi bat dau lam quen voi vdk ho 8051, ban co the gioi thieu ve lap trinh hop ngu cua 8051 cho minh nhe . neu co vi du minh hoa thi cang de hieu hon.
Em dang lam do an mon vie dieu khien dung 8051, em thi dung 89s52, adc0804, voi dien ap tham chieu Vef/2 la 2.5V,lam mach do dien ap voi cac dai dien ap tu 0-5V, 0-25V, 0-50V, em lam thi da chay ngon nhung gap mot van de. vi du khi em do dai dien ap 0-5V, ADC0804 se nhan biet duoc gia tri dien ap nho nhat la 20mV, e thay led7thanh cua e nhap nhay rat mach o vi tri hang chuc mV, con khi e do dai dien ap 0-25V thi vi tri hang tram mV nhay, nhin vao, e thay chan, e muon mach cua e that tot, led khong bi nhay, e khong biet phai lam the nao. Mong moi nguoi giuap do e, e xin cam on http://www.mediafire.com/?l2zjn5mwt0t
Em dang lam do an mon vie dieu khien dung 8051, em thi dung 89s52, adc0804, voi dien ap tham chieu Vef/2 la 2.5V,lam mach do dien ap voi cac dai dien ap tu 0-5V, 0-25V, 0-50V, em lam thi da chay ngon nhung gap mot van de. vi du khi em do dai dien ap 0-5V, ADC0804 se nhan biet duoc gia tri dien ap nho nhat la 20mV, e thay led7thanh cua e nhap nhay rat mach o vi tri hang chuc mV, con khi e do dai dien ap 0-25V thi vi tri hang tram mV nhay, nhin vao, e thay chan, e muon mach cua e that tot, led khong bi nhay, e khong biet phai lam the nao. Mong moi nguoi giuap do e, e xin cam on http://www.mediafire.com/?l2zjn5mwt0t
bạn làm mạch thật chưa?
nhấp nháy ở đây là: giá trị của nó bị nhảy hay cụ thể như thế nào!?
bạn cần nói cụ thể hơn! và post code cùng mạch nên để mọi người cùng giúp đỡ !
0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
||
PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK
vang, e da lam mach cu the, con so bi nhap nhay, chi o 1 vi tri thoi,do la gia tri bi nhay, khong phai tat ca cac chu so deu nhay,khi do o dai 0-5V thi chu so hang chuc mV bi nhay,m khi do o dai 0-25 va 0-50 thi chu so o hang tram mV bi nhay,mong moi nguoi giup do e, e xin cam on.Day la mach va code cua e, mong moi nguoi gop y http://www.mediafire.com/?sharekey=0...01da0f25e869f4
vang, e da lam mach cu the, con so bi nhap nhay, chi o 1 vi tri thoi,do la gia tri bi nhay, khong phai tat ca cac chu so deu nhay,khi do o dai 0-5V thi chu so hang chuc mV bi nhay,m khi do o dai 0-25 va 0-50 thi chu so o hang tram mV bi nhay,mong moi nguoi giup do e, e xin cam on.Day la mach va code cua e, mong moi nguoi gop y http://www.mediafire.com/?sharekey=0...01da0f25e869f4
mình không xem được mạch của bạn!Mình dùng phần mềm eagle nên không mở được!bạn cho biết thêm là giá trị bị nhấp nháy ở đây có phải là nó không ổn định ở một giá trị: ví dụ lúc nó là số 6 lúc là số 7 ?
yahoo: vodanhkithuat86
0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
||
PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK
Quả thực bài viết của bạn Quynh rất có ích đối với những người đang học Vi điều khiển. Rất mong nhận được thêm nhiều bài viết thú vị khác của bạn. Xin cảm ơn!!!!!!!!!
Đây là quyển sách khá hay về lạp trinh C cho 8051.
Tui up mãi lên đây ko được.Bạn nào cần thì liên hệ với mình nhé.Quyển này viết bằng tiếng anh, khá cơ bản.Dung lượng gần 5MB
Mình biết bài viết đây khá lâu rồi,ở đây Quynh có giới thiệu "1 quyển sách khá hay",nhưng không thấy up lên,không biết ai có không,share cho đàn em tham khảo với!
Thanks!
Các bác giải thích giùm hoạt động của times để làm chương trình Delay, thêo mình hiểu thi delay là làm đi làm lại một vấn đề, nhưng mình đọc hoài vẫn không hiểu nó hoạt động ra sao hết, từng lệnh thì hiểu nhưng cấu trúc chung thì ko rõ . Ngoài cách dùng times để làm delay, thì còn nhưng cách nào làm delay nữa không các bác có thể gợi ý một vài chưong trình he!
Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
DELAY:
MOV TMOD,#01H ; chọn time 0 che do 16 bit
MOV TL0,#LOW(-250) ; byte thấp
MOV TH0,#HIGH(-250); byte cao
SETB TR0 ; đặt
JNB TF0,$; hiển thi co TF0
CLR TF0 ; xóa TF0
CLR TR0 ; xóa TF0
RET
Các bác giải thích giùm hoạt động của times để làm chương trình Delay, thêo mình hiểu thi delay là làm đi làm lại một vấn đề, nhưng mình đọc hoài vẫn không hiểu nó hoạt động ra sao hết, từng lệnh thì hiểu nhưng cấu trúc chung thì ko rõ . Ngoài cách dùng times để làm delay, thì còn nhưng cách nào làm delay nữa không các bác có thể gợi ý một vài chưong trình he!
Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
DELAY:
MOV TMOD,#01H ; chọn time 0 che do 16 bit
MOV TL0,#LOW(-250) ; byte thấp
MOV TH0,#HIGH(-250); byte cao
SETB TR0 ; đặt
JNB TF0,$; hiển thi co TF0
CLR TF0 ; xóa TF0
CLR TR0 ; xóa TF0
RET
Chào bạn !
Thực ra delay chỉ là để làm chậm lại thời gian xử lí 1 công việc mà con vxl đang đảm nhiệm, vì tốc độ of vxl rất nhanh nên nếu ko có delay, thì các hệ thống sẽ làm việc rất nhanh => ko đáp ứng được yêu cầu thực tế. Giả sử như bạn cho nhấp nháy 1 con led, nếu ko dùng delay, chắc chắn bạn ko thể nhìn thấy nó nhấp nháy được.
Việc tạo hàm delay, thường nếu ko cần chính xác lắm thì người ta dùng các vòng lặp, trong vòng lặp, con vxl ko làm gì cả, chỉ chạy cho hết vòng lặp thì thôi. Còn nếu cần chính xác (cỡ us) thì bạn có thể dùng timer. Chương trình trên của bạn là 1 ví dụ. Timer là 1 bộ đếm lên, như chương trình trên của bạn thì bạn đã thiết đặt chế độ 16bit cho timer, mỗi khi timer đếm đến FFFF thì nó dừng và cờ tràn TF (Timer Flag) được được đặt bằng 1.
Khi timer đang đếm, cái lệnh JNB TF0,$ làm nhiệm vụ khi nào TF0 = 0 thì con vxl ko làm gì cả, còn khi TF0 = 1 thì con vxl mới thoát khỏi delay và tiếp tục chương trình. Bạn đặt giá trị cho bộ đếm là -250, có nghĩa là hàm này sẽ tạo độ trễ khoảng 250us (với tần số thạch anh là khoảng 12MHz).
Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
Dear se7venlove_3w!
Timer là ngoại vi có chức năng đơn giản là đếm các xung nhịp. Khi xung nhịp đưa vào đếm trong timer là xung nhịp hệ thống (xung nhịp của CPU) thì gọi nó là Timer (hay bộ định thời). Khi xung nhịp đưa vào đếm trong timer là tín hiệu lấy từ bên ngoài thì gọi nó là counter (hay bộ đếm sự kiện). Sở dĩ có sự phân biệt như vậy là do tính chất khác nhau của 2 loại tín hiệu này. Xung nhịp của hệ thống thì thường đều đặn (ví dụ: nếu thạch anh dùng cho 8051 là 12M thì mỗi chu kì máy là 1us) do đó có thể dùng nó để xác định thời gian (ví dụ: Cứ 1us có một xung nhịp--> nếu timer đếm được đến 100 tức là đã trôi qua thời gian là 100us). Xung nhịp lấy từ bên ngoài thì không phải luôn luôn đều đặn. ví dụ một dây chuyền đếm sản phẩm, không phải luôn luôn là 1phút có một sản phẩm đi qua.
Để lựa chọn việc sử dụng timer hay counter phụ thuộc vào giá trị khởi tạo cho thanh ghi TMOD.
MOV TMOD,#01H ; chọn time 0 che do 16 bit
MOV TL0,#LOW(-250) ; byte thấp
MOV TH0,#HIGH(-250); byte cao
SETB TR0 ; đặt
Đoạn chương trình này thực hiện việc khởi tạo timer đếm xung nhịp của hệ thống. Timer sẽ bắt đầu đếm từ giá trị nạp vào trong 2 thanh ghi TH và TL cho đến giá trị max là 65535.Thời gian trễ được tính bằng ((65535 - THTL)*(thời gian thực hiện 1 chu kì máy)) Khi timer chưa đếm đến giá trị 65535 thì cờ tràn TF chưa được dựng lên. Khi timer đếm đến 65535 thì xảy ra sự kiện tràn và cờ tràn TF được set =1.
JNB TF0,$; hiển thi co TF0
CLR TF0 ; xóa TF0
CLR TR0 ; xóa TF0
RET
Sau khi khởi tạo cho timer đếm, công việc của CPU là ngồi "canh chừng" cờ TF. khi TF còn bằng 0 (chưa tràn) thì nó chẳng làm gì cả. khi TF được sét =1 (tràn) thì nó dừng timer lại, xóa TF cho lần sử dụng tiếp theo và thoát khỏi chương trình
Các anh cho em hỏi
sau khi xảy ngắt ngoài thì làm thế nào 8051 trở về chương trình chính em thử mô phỏng đă treo chân IT0 lên 5V sau ngắt nhưng 8051 vẫn chạy trong ngắt của nó mà ko trở về main
ORG 0000H
LJMP MAIN
ORG 0000BH
LJMP EX0ISR //NGAT BO DINH THOI 0
ORG 0013H
LJMP EX1ISR //NGAT BO DINH THOI 1
ORG 0030H
MAIN:
MOV IE,#00H
MOV IE,#85H
SETB IT1
SETB IT0
MOV A,#66H
BACKM:
MOV P1,A
MOV P2,A
RR A
CALL DELAY
SJMP BACKM
EX0ISR: //PHUC VU NGAT 0
MOV P1,#00H //DUNG DONG CO PHAI
MOV A,#01H
BACK0: MOV P2,A
RR A
CALL DELAY
JMP BACK0
RETI
EX1ISR: //PHUC VU NGAT 1
MOV P2,#00H
MOV A,#66H
BACK1: MOV P1,A
RR A
CALL DELAY
JMP BACK1
RETI
DELAY:
SETB PSW.3
SETB PSW.4
MOV R2,#12
AGAIN: MOV R3,#200
HERE1: MOV R4,#206
HERE2: DJNZ R4,HERE2
DJNZ R3,HERE1
DJNZ R2,AGAIN
RET
END
À, sản phẩm họ thiết kế ra, họ yêu cầu mình chứng minh là sau chỉnh sửa thì 1 là gỡ jump cắm lại không hư mạch, 2 là gỡ jump thì 220Vdc vẫn dùng được led áp thấp 20V mà không hư led như mình báo, nên họ hiểu rõ mà....
Bài học kiểu trực tuyến dù là loại đơn giản bậc nhất cũng vẫn cần chú tâm. Chỉ bật tai nghe lên thì không có loại nào thấm nổi đâu. Cách hay hơn, dễ hơn là kiếm phim tiếng Anh nào đó xem, ban đầu bật phụ đề tiếng Việt, nghe và...
Ha ha !
Thay đổi cách nghĩ thì sẽ nghĩ ra.
.
.
.
Một thứ cần kiểm soát dòng + nhiệt + công suất tiêu tán. Nhưng lại dùng tư duy ổn áp. Làm sao mà giải quyết được.
Nó là mạch ổn dòng.
Vì thế các anh nước lạ không thèm quan tâm là phải....
Vì cứ phải chỉnh sửa cho mỗi dải điện áp, quên chỉnh thì hư chíp phải bảo hành nên em thấy bất tiện, mới cần cái mạch 1 dải áp cao dùng cho tất cả loại đèn đó bác!...
Mình thỉnh thoảng cũng làm việc với người nước ngoài nói tiếng Anh thì toàn ghép nhặt từ, cộng với quơ tay quơ chân để diễn tả, hix. Nỗi khổ là không biết cách để mô tả sự việc. Tôi muốn tìm các bài giảng tiếng anh nào phù hợp...
Comment