Hướng dẫn Bài 3 - Ghép nối VĐK với Led 7 thanh

#1
Đầu tiên mình xin gửi lời xin lỗi đến các bạn vì sự chậm trễ trong quá trình ra các video. Sự chậm trễ này xuất phát từ các lý do cá nhân mà mình đã đề cập ở các phần trước.

Trong video hôm nay mình sẽ hướng dẫn các bạn cách ghép nối và điều khiển led7 thanh với vi điểu khiển. Ở video này mình chỉ chú trọng đến việc làm thế nào để điều khiển được led 7 thanh, làm thế nào hiển thị số có nhiều chữ số lên led, chứ không đi sâu vào các phương pháp, giải thuật (thực tế điều khiển led 7 thanh có nhiều phương pháp từ phần cứng lẫn phần mềm).

Các bạn có thể xem code ở file đính kèm. Nếu thắc mắc các bạn có thể comment, mình sẽ trả lời trực tiếp. Video hơi dài nên đừng bắt mình up lên mediafire nhé, up lên youtube ngồi chờ hơn 2 tiếng rồi :P

 

Đính kèm

#3
bây giờ mình muốn dếm tu 0 dến 1000 và dừng lại .bạn chĩ cho mình duoc không?
để đếm từ 0 - 9999 chỉ cần sửa lại chương trình 1 chút là ok:

1. Ban đầu bạn gán cho giá trị của number là 0
2. Tiến hành tách các số hạng như bình thường
3. Hiển thị các số hạng đó lên led, tuy nhiên lúc này đoạn code hiển thị các số hạng bạn cho vào một vòng lặp for khác để tạo thời gian muốn hiển thị. Vd bạn muốn hiển thị mỗi số trong vòng 1 giây: với 4 led và thời gian delay mỗi led là 5ms thì
Mã:
số lần lặp lại của vòng lặp = 1000ms / (5ms * 4 led) = 50 lần
4. Tăng biến number lên 1 đơn vị. Sau đó so sánh với 1000. nếu number <= 9999 thì quay lại bước 2, nếu lớn hơn 9999 thì quay lại bước 1.

Đây là giải thuật đơn giản để hiển thị một số từ 0 -> 9999.
 

biensang

Học sinh phổ thông
#5
Xin chào các bạn!
Mình có làm code (có tham khảo từ nhiều nguồn tài liệu) đọc dữ liệu DS1307 hiển thị lên LED 7 thanh bằng atmega16 nhưng mình đặt thời gian delay kiểu gì thì LED 7 thanh của mình vẫn bị nhấp nháy! Mình đưa code và mạch mô phỏng PROTEUS lên để các bạn xem dùm mình xem làm cách nào để LED 7 thành không bị nhấp nháy nhé!

Xin cảm ơn!
 

Đính kèm

#7
xin lỗi bạn, mấy bữa nay làm đồ án (đồ án có tí trục trặc mà lại gần đến ngày lên thớt) nên chưa làm video kịp, bạn thông cảm nhé, mình sẽ cố gắng ra video sớm
 

hadoncdt

Học sinh phổ thông
#9
anh ơi xem hộ em xem đoạn code này với sao nó chỉ đếm từ 0 đến 9999 1 lần mà không phải là vô hạn lần mặc dù trong hàm main em có vòng lặp while(1) rồi. thank anh.
code của em đây
Mã:
#include <16F877A.h>
#use delay(clock=20m)
unsigned char LED7[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//==================================================================
//=====================chuong trinh con=============================
//==================================================================
#bit led1=0x07.0
#bit led2=0x07.1
#bit led3=0x07.2
#bit led4=0x07.3
long so;
long i;
void dem9999()
  {
  while(so<10000)
  {
  for(i=0;i<10;i++)
  {
  int n,t,c,dv;
  n=so/1000;
  t=(so%1000)/100;
  c=(so%100)/10;
  dv=so%10;
  led1=1;output_b(LED7[n]);delay_us(100);led1=0;
  led2=1;output_b(LED7[t]);delay_us(100);led2=0;
  led3=1;output_b(LED7[c]);delay_us(100);led3=0;
  led4=1;output_b(LED7[dv]);delay_us(100);led4=0;
  }
  so=so+1;
  }
  }
//==================================================================
//=============chuong trinh chinh===================================
//==================================================================
void main()
  {
  while(1)
  {
  output_c(0x00);
  dem9999();
  }
 
  }
BQT: LẦN SAU CHO CODE VÀO THẺ CODE NHÉ :)
 
Sửa lần cuối bởi điều hành viên:
#10
biến số bạn khai báo là biến toàn cục, nếu vậy sau khi nó >9999 thì vẫn giữ nguyên giá trị, do đó sau khi thực hiện xong chương trình đếm thì reset nó về 0, hoặc khai báo biến số là biến cục bộ trong chương trình đếm
 

Quảng cáo Google