Thứ Ba, 15 tháng 9, 2015

Lap trinh vi dieu khien - quét LED 7 đoạn bằng ngắt timer 8051​

Lap trinh vi dieu khien - quét LED 7 đoạn bằng ngắt timer 8051
Chào các bạn, hôm nay chúng ta sẽ tìm hiểu về lap trinh vi dieu khien 8051 - quét led 7 thanh dùng ngắt timer dùng lap trinh c, tại sao lại dùng ngắt timer mà không sử dụng vòng lặp chương trình để quét thì mình cũng xin giải thích như sau:
Do mắt người chỉ có thể quan sát được hình ảnh ở trên 24 hình / giây dưới con số trên thì ta sẽ thấy hiện tượng nhấp nháy do vậy nếu ta muốn tính toán một cách chuẩn xác số khung hình mà led 7 hiển thị thì ta bắt buộc phải dùng ngắt timer để đảm bảo led sáng rõ nét và không có hiện tượng nhấp nháy. Công thức tính toán ta sẽ dựa vào tỉ lệ khung hình mà ta mong muốn sẽ suy được ra giá trị nạp vào timer. VD ở đây là quét 4 led 7 thanh:
4 lần ngắt timer là ta sẽ quét được một khung hình ==> 4*25 (4 led nhân 25 khung hình/ giây) sẽ bằng 100 lần ngắt timer, mà chu kỳ CPU của 8051 là 1us ==> chu kỳ ngắt timer là 10ms tương ứng với giá trị đếm là 10000.
Như vậy ở trên là ta sử dụng 25 khung hình trên giây, còn trong bài này ta sử dụng số khung hình lớn hơn là 100 khung hình / giây suy ra giá trị đếm là 2500 là timer phải tràn. Giá trị nạp vào timer để khởi tạo là giá trị tràn trừ đi giá trị cần đếm: TH0 và TL0 = 65536-2500 = 63036 = 0xF63C , TH0 sẽ mang giá trị byte cao là 0xF6 và TL0 sẽ mang giá trị byte thấp là 0x3C.
Dưới đây là sơ đồ nguyên lý của led 7 đoạn:

OK ta bắt đầu vào viết chương trình, ở mạch này sẽ có chức năng như một mạch đếm sản phẩm và mạch đếm tự động theo giây. Các bạn SET SWICH để chuyển đổi giữa 2 chế độ trên, xem ghi chú code để hiểu rõ hơn.
Code lap trinh c trên keilC:
Mã:
#include <REGX51.H>
#define SET    P1_7    //Chan set che do dem
#define BUT    P1_6    //Chan nut nhan dem tang
unsigned char Quet[4]={1,2,4,8}; //Quet Anot led 7
unsigned char Data[4], q;
unsigned int dem;
unsigned char code led[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//Mang LED 7
void delay(unsigned char t){  //Chuong trinh tao tre 100ms
    unsigned char i;
    unsigned int j;
    for(i=0;i<t;i++){  
        for(j=0;j<12500;j++);
    }
}

/****************** Chuong trinh ngat timer quet led 7 ***********************/
void Ngat_Timer() interrupt 1 {
    TF0=0;        //Xoa co tran
    TH0=0xf6;    //Nap lai gia tri
    TL0=0x3c;    //Tran = 65536-2500 = 63036 = 0xF63C
    P2=0xff;      //Xoa du lieu
    P3=~Quet[q]; //Quet Anot led 7
    P2=Data[q];    //Xuat data cua led 7 ra port
    if(++q>4)q=0;
}
void chuyen_doi(){ //Ham chuyen doi so dem sang led 7
    Data[0]=led[dem/1000]; //Ngan
    Data[1]=led[(dem%1000)/100]; //Tram
    Data[2]=led[(dem%100)/10]; //Chuc
    Data[3]=led[dem%10]; //Don vi
}
void main(){
    TMOD=0x01;//Timer0 mode 16bit
    TH0=0xf6;    //Khoi tao gia tri cho timer 0
    TL0=0x3c;
    delay(5);
    TR0=1;//Khoi dong timer0
    ET0=1;//Ngat timer0
    EA=1;//Cho phep ngat
    while(1){//Vong lap chuong trinh
        if(SET){ //Mode auto
            delay(10);      
            if(++dem>9999)dem=0;  //Tang gia tri dem
        }else{    //Mode count
          if(!BUT){
                  if(++dem>9999)dem=0;  //Tang gia tri dem
                while(!BUT);
          }
        }
        chuyen_doi(); //Goi ham chuyen doi
    }
}

Mạch mô phỏng:
[​IMG]
                                                         Chúc các bạn tu hoc lap trinh tốt!
Nguồn lap trinh vi dieu khien

1 nhận xét:

  1. Hard Rock Casino & Resort Dr. Richmond | DrmCD
    Dr. Richmond, 광명 출장샵 DR. Gambling & Entertainment, Inc. 진주 출장안마 is in the business of 삼척 출장마사지 providing a range 논산 출장안마 of services to your individual casino player 충주 출장마사지 in the entertainment

    Trả lờiXóa