- Ghép nối vi điều khiển với led đơn:+ Kết nối trực tiếp LED được kết nối trực tiếp với AT89C51 theo hai chế độ là hút dòng và xả dòng.. Ở chế độ xả dòng thì LED sẽ không sáng được hết c
Trang 1-Ghép nối với bàn phím:
Trang 2- Ghép nối vi điều khiển với led đơn:
+ Kết nối trực tiếp
LED được kết nối trực tiếp với AT89C51 theo hai chế độ là hút dòng và xả dòng Nguyên lý kết nối như sau :
Trang 3Ở chế độ xả dòng thì LED sẽ không sáng được hết công suất vì đầu ra dòng của chân vi xử lý thường thấp
Ở chế độ hút dòng thì LED sẽ sáng được hết công suất nhưng sẽ làm hại vi xử lý nếu LED có công suất lớn vì dòng qua vi xử lý quá mức cho phép Trong các mạch ghép nối với LED có dòng tiêu thụ thấp thì người
ta sẽ dùng kiểu ghép hút dòng này.
Trang 4+ Kết nối thông qua IC đệm
Đối với kiểu này thì LED được kết nối thông qua các
IC đệm như transitor, các IC đệm dòng chuyên dụng như ULN2803 Đối với kiểu này thì LED được mắc như sau :
Trang 5Đối với kiểu ghép này đảm bảo cho vi xử lý không
bị quá tải và cho LED sáng nhất Với kiểu ghép này thì có thể chạy được LED công suất lớn Ngoài
transitor còn có các loại IC đệm dòng tương đối như (500mA ULN2803)
Trang 6-Ghép nối vi điều khiển với led 7 đoạn:
Để ghép nối với LED7 có thể có nhiều
cách, nhưng phải đảm bảo sao có thể điều
khiển tắt mở riêng từng LED đơn trong đó để tạo ra các số và các ký tự mong muốn.Các
ICs điều khiển đều khó khả năng sinh dòng
kém tức là dòng đầu ra của các chân ICs nhỏ hơn khả năng nuốt dòng Do vậy, nếu ghép nối trực tiếp các net với các chân cổng IC thì loại Anode chung là thích hợp hơn cả Cần
phải chú ý dòng dồn về ICs quá mức chịu
được thì cũng không được vì làm nóng và dei ICs điều khiển
Trang 7* 2 cách ghép nối thường dùng:
+ Cách 1 : Dùng trực tiếp các chân điều khiển (vi
xử lý)
Trang 8Đối với cách này thì nhìn thì rất tốn chân của vi xử lý Và dòng của LED sẽ dồn tất cả về vi xử lý Nếu một hệ thống lớn thì cách này không ổn vì ảnh hưởng đến vi xử lý và nhiều
dòng dồn về vi xử lý sẽ làm vi xử lý nóng và dẫn tới chết
( chúng ta tưởng tượng xem nếu mà hệ thống nhiều phần điều khiển từ các chân vi xử lý mà tất cả các tải điều khiển dồn trực tiếp dòng về vi xử lý thì lúc đó dòng trong 1 thời điểm khá lớn vượt quá ngưỡng cho phép của vi xử lý.
Dòng mà vi xử lý chịu đựng được cũng khá nhỏ đâu dưới 100mA ) Các này chỉ dùng được hệ thống điều khiển ít, mạch dùng vi xử lý khá đơn giản như hiện thị LED, đếm số từ 0 đến
9 chả hạn
Trang 9+ Cách 2 : Dùng IC giải mã BCD sang LED 7 thanh
Trang 10Sử dụng IC giải mã 7447 để giả mã từ mã BCD sang mã LED7 Đối với cách này thì trông rất ổn Vừa tiếp kiệm
được chân vi xử lý và tránh được dòng dồn về vi xử lý
(dòng ở đây được dồn về 7447) Đây là cách mà người thiết kế thường dùng trong các hệ thống cần đến hiện thị Thông thường các thiết kế, LED 7 thanh được dùng để hiện thị các giá trị các giá trị số từ 0 đến 9 và đôi khi cần phải hiện thị các kí tự đơn giản như A đến F trong hệ
thống để báo trạng thái của hệ thống Các giá trị hiện thị bao gồm nhiều chữ số tức là chúng ta phải dùng đến
nhiều LED7 ghép lại thì mới hiện thị được nhiều số Ví dụ như muốn hiện thị số 123 chả hạn thì chúng ta phải dùng đến 3 LED 7 thanh ghép lại.
Trang 11ORG 000H ; khai bao dia chi de bat
dau chuong trinh tren Rom
Tudau:
Mov P1,#1B ;==>>lam 1 led noi P1 sang
LCall Delay ;===>>>> goi chuong
trinh con Delay
Mov P1,#0 ;===>>>> lam 1 led
Trang 12Delay: ;>>>>chương trình con tạo độ trễ 1s PUSH 00H
Trang 13;/////>>>>>Chữ “HELLO” chạy từ phải sang trái:
LCALL DISP7SEGMUL ;hiển thị chuỗi lý tự
DJNZ r0,STATICDISP ;giảm biến lặp
INC DPTR ;dịch chuỗi đi 1 mã ký tự
Mov A,DPL
CJNE A,#LOW(CODEDISP+16),Mp1 ; kiểm tra hiển thị xong
chuỗi
SJMP MAIN
Trang 14Mov A,@A+DPTR ;lấy mã hiện thị
Mov P0,A ;Xuất mã hiển thị
MOV P1, R0 ;xuất mã quét
LCALL DELAYLED
Trang 15MOV P1,#0FFH
INC R1 ;lấy mã hiển thị kế tiếp
MOV A,R0 ;Lấy mã quyets kế tiếp
RRC A ;quay phải A qua cờ C
CODEDISP: ;vùng chứa mã chữ hiển thị
DB 089H,086H,0A7H,0A7H,0A0H ;mã chuỗi HELLO end
Trang 16 ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Trang 17Xuat: ;**>>>>>>>>>>>>>>>>>>> lam led P0 sang
<<<<<<<<<<<<<<<<<<<<<<<<<<
Mov P0,#00000001B ;===>>>> lam led 1 sang LCall Delay ;===>>>>goi chuong trinh con Delay Mov P0,#00000011B ;===>>>> lam led 2 sang LCall Delay
Mov P0,#00000111B ;===>>>> lam led 3 sang LCall Delay
Mov P0,#00001111B ;===>>>> lam led 4 sang LCall Delay
Mov P0,#00011111B ;===>>>> lam led 5 sang LCall Delay
Mov P0,#00111111B ;===>>>> lam led 6 sang LCall Delay
Mov P0,#01111111B ;===>>>> lam led 7 sang LCall Delay
Mov P0,#11111111B ;===>>>> lam led 8 sang LCall Delay
Trang 18;**>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>lam led P1 sang
Trang 19:>>>>>>>>>>>>>>>>>>>>>>>>>lam led p1 tat dan
Mov P1,#01111111B ;===>>>> lam led 1 sang LCall Delay
Mov P1,#00111111B ;===>>>> lam led 2 sang LCall Delay
Mov P1,#00011111B ;===>>>> lam led 3 sang LCall Delay
Mov P1,#00001111B ;===>>>> lam led 4 sang LCall Delay
Mov P1,#00000111B ;===>>>> lam led 5 sang LCall Delay
Mov P1,#00000011B ;===>>>> lam led 6 sang LCall Delay
Mov P1,#00000001B ;===>>>> lam led 7 sang LCall Delay
Mov P1,#00000000B ;===>>>> lam led 8 sang
Trang 20:>>>>>>>>>>>>>>>>Lam led p0 tat dan
Mov P1,#01111111B ;===>>>> lam led 1 sang
Mov P1,#00000000B ;===>>>> lam led 8 sang
Ljmp Xuat ; ===>>>> nhay ve thuc hien tu dau
Delay:
Mov R7,#0FFH ;===>>>> gan R7=#0FFH, 1 chu ki may
Kt2: Mov R6,#0FFH ;===>>>> gan R6=#0FFH, 1 chu ki may
Kt1: Djnz R6,Kt1 ;===>>>> giam R6 xuong 1, R6 khac 0-> giam tiep Djnz R7,Kt2 ;===>>>> giam R7 xuong 1, R6 khac 0-> ve Kt2 Ret ;===>>>> ket thuc chuong trinh con
End ;>>>>>>>kết thúc trương trình<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Trang 21Chú thích: Lệnh Kt1: Djnz R6,Kt1
Lệnh Djnz R6,Kt1 này giảm R6 đi một đơn vị, nếu R6 chưa bằng 0, chương trình lại nhảy về nhãn Kt1, mà nhãn Kt1 lại gọi lại lệnh này,
do đó toàn câu lệnh thực hiện giảm R6 cho đến khi R6
về 0 thì thực hiện lệnh kế tiếp Câu lệnh này thực hiện, không ảnh hưởng hay thay đổi giá trị của các ô nhớ
khác, vì vậy ngõ ra từ các Port cũng không thay đổi
trạng thái.