Tổng số bài gửi : 397 Điểm : 1334 Danh tiếng : 63 Ngày tham gia : 30/11/2010 Tuổi : 35 Đến từ : Thái Bình
Tiêu đề: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Sun May 08, 2011 3:51 am
MÌNH KHAI MẠC VẬY? MỌI NGƯỜI CÙNG THẢO LUẬN NHÉ
Sunset_Pro Thành viên chính thức
Tổng số bài gửi : 55 Điểm : 97 Danh tiếng : 11 Ngày tham gia : 25/12/2010 Đến từ : UNETI
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Sun May 08, 2011 6:59 am
// khai bao Header #include #include
#define m 2 // dinh nghia m de sau nay tien cho viec chinh sua thoi gian quyet led // Khai bao Bit can dung sbit start = P1^0; // nut nhan bat dau sbit Led1 = P2^0; // Cac dau ra quyet led sbit Led2 = P2^1; sbit Led3 = P2^2; sbit Led4 = P2^3; sbit Led5 = P2^4; sbit Led6 = P2^5; sbit Led7 = P2^6; sbit Led8 = P2^7;
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // Ma data cua led 7 thanh ;unsigned long int result; unsigned char million,hundred thousand,ten thousand,thousand,hundred,tens,unit;
// Ham tao tre de quyet led, ham nay chi mang tinh chat tao tre, chu thoi gian thuc trong ham khong dung voi thoi gian tre thuc su trong VDK void delay_ms(unsigned int time) { unsigned int i; unsigned int j; for(i = time;i>0;i--) for(j=0;j<300;j++); } // Ham xoa Led de giam hieu ung chop cua LED ( Do lech so voi tan so nhin thay cua mat ) void clear_led(void) { P0=0xff; P2=0x00; } // Ham quet LED void Display(unsigned int result) { clear_led(); million=result/1000000 if (million == 0) // Neu gia tri trong hang nghin = 0 thi led hang nghin khong sang clear_led(); else { Led8 = 1; Led7 = 0; Led6=0; Led5 = 0;Led4 = 0; Led3=0; Led2 = 0;Led1 = 0; P0=M[million]; delay_ms(m); clear_led(); } thousand = result/1000;
if (thousand == 0) // Neu gia tri trong hang nghin = 0 thi led hang nghin khong sang clear_led(); else { Led4 = 1; Led3 = 0; Led2=0; Led1 = 0; P0=M[thousand]; delay_ms(m); clear_led(); }
hundred =(result%1000)/100;
if ((thousand == 0)&&(hundred == 0)) // Neu gia tri trong hang nghin, va hang tram deu = 0 thi led hang nghin, hang tram khong sang clear_led(); else { Led4 = 0; Led3 = 1; Led2=0; Led1 = 0; P0=M[hundred]; delay_ms(m); clear_led(); }
tens = ((result%1000)%100)/10;
if ((thousand == 0)&&(hundred == 0)&&(tens == 0)) // Neu gia tri trong hang nghin, va hang tram, hang chuc deu = 0 thi led hang nghin, hang tram, hang chuc khong sang. clear_led(); else { Led4 = 0; Led3 = 0; Led2=1; Led1 = 0; P0=M[tens]; delay_ms(m); clear_led(); }
Tổng số bài gửi : 397 Điểm : 1334 Danh tiếng : 63 Ngày tham gia : 30/11/2010 Tuổi : 35 Đến từ : Thái Bình
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Sun May 08, 2011 5:18 pm
Sao mình quét nó cứ chớp chớp ấy trông không trơn lắm ko biết có bị lỗi nào ko nhỉ ?
Sunset_Pro Thành viên chính thức
Tổng số bài gửi : 55 Điểm : 97 Danh tiếng : 11 Ngày tham gia : 25/12/2010 Đến từ : UNETI
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Mon May 09, 2011 8:40 am
quét led dùng ic 74374.(chương trình cho vi điều khiển không thay đổi)
lucky Thành viên đặc biệt
Tổng số bài gửi : 240 Điểm : 580 Danh tiếng : 17 Ngày tham gia : 06/12/2010 Tuổi : 37 Đến từ : Việt Nam
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Mon May 09, 2011 6:59 pm
Theo mình khi quét led mà bị giật thì có thể có 2 trường hợp xảy ra là: tần số thạch anh không tương thích và có thể chương trình của bạn bị lỗi ở đâu đó! Thân chào!
nguyendien.uneti Thành viên đặc biệt
Tổng số bài gửi : 307 Điểm : 801 Danh tiếng : 68 Ngày tham gia : 06/12/2010 Đến từ : Nam Định
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 10, 2011 6:55 am
Bạn huudotb cho thời gian quét led là bao nhiêu ?
nguyendien.uneti Thành viên đặc biệt
Tổng số bài gửi : 307 Điểm : 801 Danh tiếng : 68 Ngày tham gia : 06/12/2010 Đến từ : Nam Định
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 10, 2011 9:21 am
Ko bạn nào nói về phương pháp quét led nhỉ ? Có thể cho mình cách nhìn tổng quát nhé.
Sunset_Pro Thành viên chính thức
Tổng số bài gửi : 55 Điểm : 97 Danh tiếng : 11 Ngày tham gia : 25/12/2010 Đến từ : UNETI
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 10, 2011 9:51 am
nguyendien.89 đã viết:
Ko bạn nào nói về phương pháp quét led nhỉ ? Có thể cho mình cách nhìn tổng quát nhé.
Muốn cụ thể thì ta lập trình bằng hợp ngữ cho dễ hiểu nha: PHƯƠNG PHÁP QUÉT Nguyên tắc: quét là phương pháp chúng ta dựa vào hiện tượng lưu ảnh của mắt chúng ta.Mắt chỉ nhận biết được những hình ảnh có tốc độ 24 hình/giây. 1.Quét led 7 thanh Bài toán: hiển thị số 25 trên led 7 thanh,dữ liệu kết nối với P2 giải : chúng ta sẽ tách số 25: 2 | 5 để lấy mã của số 2 và số 5. MOV R0,#200 ;TỐC ĐỘ QUÉT (BẬT TẮT 200 LẦN) MOV P1,#0 ; ĐIỀU KHIỂN BẬT NGUỒN CHO LED: COM1=P1.0;COM2=P1.1 LẶP: MOV P2,#MÃ SỐ 2 SETB P1.0 CALL DELAY_NHỎ;TIME CÀNG NHỎ THÌ HÌNH ẢNH CÀNG MỊN(KHOẢNG 20 MS ) CLR P1.0 MOV P2,#MÃ SỐ 5 SETB P1.1 CALL DELAY_NHỎ CLR P1.1 DJNZ R0,LẶP ==============DELAY=========== DELAY_NHO: PUSH 07H lap30: MOV R7,#100 DJNZ R7,$ POP 07H RET END
huudotb Thành viên đặc biệt
Tổng số bài gửi : 397 Điểm : 1334 Danh tiếng : 63 Ngày tham gia : 30/11/2010 Tuổi : 35 Đến từ : Thái Bình
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 10, 2011 1:40 pm
MÌNH CÓ ĐOẠN CODE NÀY KHÔNG BIẾT SAI Ở CÁI GÌ:MÀ KHI ĐẾM ĐẾM 99 LẠI CHUYỂN THÀNH 88
bạn thiếu hai dấu "#" ở: MOV R0,00H MOV R1,00H phải là MOV R0,#00H MOV R1,#00H - lời khuyên cho bạn: bạn không nên viết số ở dạng 16 bit, mặc dù timer của ta là 16 bit. Thứ 2 bạn nên viết là MOV P2,#00001000b thay vì MOV P2,#08H
nguyendien.uneti Thành viên đặc biệt
Tổng số bài gửi : 307 Điểm : 801 Danh tiếng : 68 Ngày tham gia : 06/12/2010 Đến từ : Nam Định
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 10, 2011 4:47 pm
sunset_sunset đã viết:
nguyendien.89 đã viết:
Ko bạn nào nói về phương pháp quét led nhỉ ? Có thể cho mình cách nhìn tổng quát nhé.
Muốn cụ thể thì ta lập trình bằng hợp ngữ cho dễ hiểu nha: PHƯƠNG PHÁP QUÉT Nguyên tắc: quét là phương pháp chúng ta dựa vào hiện tượng lưu ảnh của mắt chúng ta.Mắt chỉ nhận biết được những hình ảnh có tốc độ 24 hình/giây. 1.Quét led 7 thanh Bài toán: hiển thị số 25 trên led 7 thanh,dữ liệu kết nối với P2 giải : chúng ta sẽ tách số 25: 2 | 5 để lấy mã của số 2 và số 5. MOV R0,#200 ;TỐC ĐỘ QUÉT (BẬT TẮT 200 LẦN) MOV P1,#0 ; ĐIỀU KHIỂN BẬT NGUỒN CHO LED: COM1=P1.0;COM2=P1.1 LẶP: MOV P2,#MÃ SỐ 2 SETB P1.0 CALL DELAY_NHỎ;TIME CÀNG NHỎ THÌ HÌNH ẢNH CÀNG MỊN(KHOẢNG 20 MS ) CLR P1.0 MOV P2,#MÃ SỐ 5 SETB P1.1 CALL DELAY_NHỎ CLR P1.1 DJNZ R0,LẶP ==============DELAY=========== DELAY_NHO: PUSH 07H lap30: MOV R7,#100 DJNZ R7,$ POP 07H RET END
Thanks .Mình nghĩ cái này có cần MOV R0,#200 ;TỐC ĐỘ QUÉT (BẬT TẮT 200 LẦN) ko nhỉ ?
Sunset_Pro Thành viên chính thức
Tổng số bài gửi : 55 Điểm : 97 Danh tiếng : 11 Ngày tham gia : 25/12/2010 Đến từ : UNETI
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 10, 2011 5:27 pm
nguyendien.89 đã viết:
sunset_sunset đã viết:
nguyendien.89 đã viết:
Ko bạn nào nói về phương pháp quét led nhỉ ? Có thể cho mình cách nhìn tổng quát nhé.
Muốn cụ thể thì ta lập trình bằng hợp ngữ cho dễ hiểu nha: PHƯƠNG PHÁP QUÉT Nguyên tắc: quét là phương pháp chúng ta dựa vào hiện tượng lưu ảnh của mắt chúng ta.Mắt chỉ nhận biết được những hình ảnh có tốc độ 24 hình/giây. 1.Quét led 7 thanh Bài toán: hiển thị số 25 trên led 7 thanh,dữ liệu kết nối với P2 giải : chúng ta sẽ tách số 25: 2 | 5 để lấy mã của số 2 và số 5. MOV R0,#200 ;TỐC ĐỘ QUÉT (BẬT TẮT 200 LẦN) MOV P1,#0 ; ĐIỀU KHIỂN BẬT NGUỒN CHO LED: COM1=P1.0;COM2=P1.1 LẶP: MOV P2,#MÃ SỐ 2 SETB P1.0 CALL DELAY_NHỎ;TIME CÀNG NHỎ THÌ HÌNH ẢNH CÀNG MỊN(KHOẢNG 20 MS ) CLR P1.0 MOV P2,#MÃ SỐ 5 SETB P1.1 CALL DELAY_NHỎ CLR P1.1 DJNZ R0,LẶP ==============DELAY=========== DELAY_NHO: PUSH 07H lap30: MOV R7,#100 DJNZ R7,$ POP 07H RET END
Thanks .Mình nghĩ cái này có cần MOV R0,#200 ;TỐC ĐỘ QUÉT (BẬT TẮT 200 LẦN) ko nhỉ ?
điều này là bắt buộc phải cần bạn ạ.vì phải như vậy thì hình ảnh mới gần như là đứng yên, chúng ta mới nhìn thấy: số đứng yên.
kaka Thành viên chính thức
Tổng số bài gửi : 66 Điểm : 78 Danh tiếng : 10 Ngày tham gia : 16/12/2010 Tuổi : 36 Đến từ : uneti
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Sun May 15, 2011 10:16 pm
huudotb đã viết:
MÌNH CÓ ĐOẠN CODE NÀY KHÔNG BIẾT SAI Ở CÁI GÌ:MÀ KHI ĐẾM ĐẾM 99 LẠI CHUYỂN THÀNH 88
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; TRE ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ TRE: MOV TMOD,#01H MOV TH0,#0FCH MOV TL0,#17H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; BANG MA ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BANGMA: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H RET END đây là một chương trình quét từ 00-99
nguyendien.uneti Thành viên đặc biệt
Tổng số bài gửi : 307 Điểm : 801 Danh tiếng : 68 Ngày tham gia : 06/12/2010 Đến từ : Nam Định
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Mon May 16, 2011 12:47 pm
Thế phương pháp của kaka là thời gian tăng số là bn vậy ? giả sử mình muốn mỗi số tăng từ 00-99 là 1s .Cách tính thế nào ? ở trên mình thấy bạn lặp số lần quét là 100H .Chẳng nhẽ lại tính từng lệnh 1 để ra số s
kaka Thành viên chính thức
Tổng số bài gửi : 66 Điểm : 78 Danh tiếng : 10 Ngày tham gia : 16/12/2010 Tuổi : 36 Đến từ : uneti
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Mon May 16, 2011 1:00 pm
số lần quét chính là tính dc thời gian để hiện thị luôn còn j nữa.bạn hãy thay 100h bằng 200h thì sẽ chậm lại
nguyendien.uneti Thành viên đặc biệt
Tổng số bài gửi : 307 Điểm : 801 Danh tiếng : 68 Ngày tham gia : 06/12/2010 Đến từ : Nam Định
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Mon May 16, 2011 7:16 pm
ý mình là cần chính xác thời gian , chứ ko thể ướm chừng .Vậy mình cần 1s thì bạn nạp số bn ?
kaka Thành viên chính thức
Tổng số bài gửi : 66 Điểm : 78 Danh tiếng : 10 Ngày tham gia : 16/12/2010 Tuổi : 36 Đến từ : uneti
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 17, 2011 1:56 pm
mỗi lệnh thời gian là rất nhỏ, nên ko cần thiết phải tính tới,mình chỉ cần tính thời gian trễ và số lần lặp là đc.bạn lấy 1 chia cho 2 lần thời gan trễ là ra số lần lặp thui mà
Được sửa bởi kaka ngày Tue May 17, 2011 3:58 pm; sửa lần 1.
huudotb Thành viên đặc biệt
Tổng số bài gửi : 397 Điểm : 1334 Danh tiếng : 63 Ngày tham gia : 30/11/2010 Tuổi : 35 Đến từ : Thái Bình
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 17, 2011 2:48 pm
kaka đã viết:
huudotb đã viết:
MÌNH CÓ ĐOẠN CODE NÀY KHÔNG BIẾT SAI Ở CÁI GÌ:MÀ KHI ĐẾM ĐẾM 99 LẠI CHUYỂN THÀNH 88
Ồ ko phải phương pháp hả bạn vậy là phương pháp gì vậy bạn ? Mình thấy sáng cũng ko kém gì quét đâu tại vừa bước chân vào nên vẫn còn sai nhiều mong mọi người chỉ giáo
nguyendien.uneti Thành viên đặc biệt
Tổng số bài gửi : 307 Điểm : 801 Danh tiếng : 68 Ngày tham gia : 06/12/2010 Đến từ : Nam Định
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 17, 2011 3:20 pm
kaka đã viết:
mỗi lệnh thời gian là rất nhỏ, nên ko cần thiết phải tính tới,mình chỉ cần tính thời gian trễ và số lần lặp là đc.bạn lấy 1 chia cho thời gan trễ là ra số lần lặp thui mà
Ok .Ý bạn là thế .Bây giờ mình có bài toán này : quét led hiển thị tăng dần 00 đến 99 (mã 7 đoạn or BCD tùy ý ),thời gian tăng là 1s , thời gian quét là 2,5ms .Mọi người cùng giải quyết nào .
kaka Thành viên chính thức
Tổng số bài gửi : 66 Điểm : 78 Danh tiếng : 10 Ngày tham gia : 16/12/2010 Tuổi : 36 Đến từ : uneti
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 17, 2011 4:02 pm
ORG 00H QUAYLAI: MOV R3,#00H
LAP:
MOV R1,#200H ;SO LAN QUET LAI:MOV P1,#00H MOV A,#00H MOV B,#10 MOV A,R3 DIV AB MOV DPTR,#BANGMA MOVC A,@A+DPTR MOV P2,A SETB P1.0
LCALL TRE clr p1.0 MOV A,B MOVC A,@A+DPTR MOV P2,A
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; TRE 2,5ms ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ TRE: MOV TMOD,#01H MOV TH0,#0f6H MOV TL0,#3bH SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; BANG MA ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BANGMA: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H RET END
nếu muốn chính xác hơn nữa thì bạn phải tính cả thời gian tực hiện các lệnh
my_co_nuong Thành viên mới
Tổng số bài gửi : 11 Điểm : 12 Danh tiếng : 0 Ngày tham gia : 30/12/2010
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99 Tue May 17, 2011 6:40 pm
Chương trình của bạn thời gian chưa được 1/2s thì phải Trích : ORG 00H QUAYLAI: MOV R3,#00H
LAP: MOV R1,#200H ;SO LAN QUET LAI:MOV P1,#00H MOV A,#00H ; BỎ ĐI ĐƯỢC KO NHỈ :d MOV B,#10 MOV A,R3 DIV AB MOV DPTR,#BANGMA MOVC A,@A+DPTR MOV P2,A SETB P1.0
LCALL TRE clr p1.0 MOV A,B MOVC A,@A+DPTR MOV P2,A
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; TRE 2,5ms ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ TRE: MOV TMOD,#01H MOV TH0,#0f6H MOV TL0,#3bH SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; BANG MA ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BANGMA: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H RET END
Sponsored content
Tiêu đề: Re: DÙNG PHƯƠNG PHÁP QUÉT LED HIỂN THỊ 00-99