Ví dụ 3: Làm một đồng hồ đếm giây đơn giản
Trong ví dụ này chúng ta sẽ mô phỏng hiển thị của một đồng hồ sử dụng 3 LED-7SEG đôi. Từ ví dụ này ở bài viết sau chúng ta sẽ thử làm 1 Project đồng hồ bấm giây đơn giản (simple stopwatch) sử dụng phương pháp ngắt định thời (Timer) để hiển thị chính xác.Đầu tiên, chúng ta sẽ mắc mạch:
Sử dụng các thiết bị sau:
+AT89C52
+7SEG-MPX2-CA
+BUTTON
+NOT
+CRYSTAL
+RESISTOR (250~300 ohm)
+CRYSTAL
+CAPACITOR
và đi dây như hình:
Chú ý: phải mắc cổng NOT vào chân điều khiển LED7 các bạn nhé.
CODE:
//daiphongselectronics@gmail.com
#include<regx52.h>
//ket noi LED7
#define LED_PORT P0
//ket noi chan
dieu khien
sbit LED11_PIN=P2^0;
sbit LED12_PIN=P2^1;
sbit LED21_PIN=P2^2;
sbit LED22_PIN=P2^3;
sbit LED31_PIN=P2^4;
sbit LED32_PIN=P2^5;
//code hien thi tu 0-9 cho LED7
unsigned char code Code7Seg[] = {0xC0, 0xF9, 0xA4,
0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
//delay_ms ham tao
tre
void Delay_ms(unsigned int t)
{
//xoa dau // khi viet vao keil. Do loi Blog, minh k go lenh binh
thuong duoc
unsigned int x,y;
for(x//=0;x//<t;x//++)
{
//su dung XTAL=12MHz
for(y//=0;y//<123;y//++);
}
}
//main prop
void main()
{
unsigned
char gio,phut,giay,chuc,dvi,i;
while(1)
{
//giai thich o duoi
for
(i=0;i<167;i++)
{
//hienthigio
chuc=gio/10;
dvi=gio%10;
LED_PORT=Code7Seg[chuc];
LED11_PIN=0;
Delay_ms(1);
LED11_PIN=1;
LED_PORT=Code7Seg[dvi];
LED12_PIN=0;
Delay_ms(1);
LED12_PIN=1;
//hienthiphut
chuc=phut/10;
dvi=phut%10;
LED_PORT=Code7Seg[chuc];
LED21_PIN=0;
Delay_ms(1);
LED21_PIN=1;
LED_PORT=Code7Seg[dvi];
LED22_PIN=0;
Delay_ms(1);
LED22_PIN=1;
//hienthigiay
chuc=giay/10;
dvi=giay%10;
LED_PORT=Code7Seg[chuc];
LED31_PIN=0;
Delay_ms(1);
LED31_PIN=1;
LED_PORT=Code7Seg[dvi];
LED32_PIN=0;
Delay_ms(1);
LED32_PIN=1;
}
giay++;
if
(giay>59)
{
giay=0;phut++;
if
(phut>59)
{
phut=0;gio++;
if(gio>23)
{
gio=0;
}
}
}
}
}
|
Chúng ta cần để ý vòng lặp for() trong chương trình chính:
Vòng lặp này sẽ lặp đúng 167 lần: do chương trình hiển thị của chúng ta cần tổng thời gian thực hiện khoảng 1+1+1+1+1+1=6 ms do vậy để LED7 hiển thị giây tăng mỗi 1 giây (1000ms) 1 lần, ta cần lặp 1000/6=166,666667 lần. Trong trường hợp này, mình chọn ~167.
Xuất ra file HEX rồi nạp vào vi điều khiển và thưởng thức nhé~~
Như vậy ở phương pháp này, chúng ta sẽ không áp dụng cho những trường hợp yêu cầu độ chính xác cao. Mà chúng ta sẽ phải sử dụng phương pháp khác để có thể đưa ra 1s chính xác hơn. Mình sẽ giới thiệu kĩ hơn ở những bài viết sau..
thân
Phong'S
Cám ơn bạn đã chia sẻ bài viết, nó thực sữ hữu ích với tôi. Chúng tôi sẽ lưu lại để khi dùng tới. Bên mình nhận thiết kế căn hộ tphcm đẹp chất lượng uy tín nếu rảnh mời bạn ghé xem.
ReplyDeleteThiết kế căn hộ hcm đẹp, chất lượng, giá thành tốt.