Thursday, April 17, 2014

// // 1 comment

007. 7-SEG-LED 2: Một số ví dụ về LED 7 thanh (Phần 2) mô phỏng hiển thị đồng hồ số

Hôm nay chúng ta sẽ tiếp tục làm bài ví dụ về LED 7 thanh nhé...

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

1 comment:

  1. 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.
    Thiết kế căn hộ hcm đẹp, chất lượng, giá thành tốt.

    ReplyDelete