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 } }
Chúc các bạn tu hoc lap trinh tốt!
Nguồn lap trinh vi dieu khien
Hard Rock Casino & Resort Dr. Richmond | DrmCD
Trả lờiXóaDr. Richmond, 광명 출장샵 DR. Gambling & Entertainment, Inc. 진주 출장안마 is in the business of 삼척 출장마사지 providing a range 논산 출장안마 of services to your individual casino player 충주 출장마사지 in the entertainment