Tải bản đầy đủ (.docx) (2 trang)

chương trình hiển thị tốc độ động cơ hiển thị ra 4 led 7 thanh bằng phương pháp quét led

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (20.29 KB, 2 trang )

/*chuong trinh hien thi toc do dong co hien thi ra 4 led 7 thanh bang phuong phap quet
led. Để hiển thị chính xác số vòng/phút của động cơ bạn cần phải có nhiều xung cảm
biến trong một vòng quay. ví dụ như quay được 1 vòng cảm biến nhận được 50 xung chẳng
hạn. chương trình này viết bằng keilC
*/

#include<AT89x51.h>
#define LED4
P2_3
//den led hang nghin
#define LED3
P2_2
//den led hang tram
#define LED2
P2_1
//den led hang chuc
#define LED1
P2_0
//den led hang don vi
#define Hight
1
#define Low
0
#define Sensor
P2_7
// tin hieu tu cam bien toc do
#define so_xung_mot_vong
10
//gia su mot vong dong co quay tao ra 10 xung
#define Clear
P2|=0x0F


//clear cac led
#define Data
P0
unsigned long int so_xung = 0;
unsigned long int tick
= 0;
unsigned long int so_vong_phut = 0;
//toc do dong co vong/phut
char
Old_Sensor = Low;
// =========khai bao su dung cac ham=======================================
void delay(unsigned int mm);
void hienthi();
//===================================================================
//0 , 1 , 2
, 3 ,4
,5
,6
,7
,8
const char So[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x98,0x88,0xC6,0x86,0x8E,0x82,0x89,0x7F,0xFF};
// 9 , A , B
,
C ,
D ,E
, F
,
. ,
TRANG

void delay(unsigned int ms) //tao tre
{
unsigned int m,n;
for(m=0;mfor(n=0;n<100;n++);
}
void hienthi()
{
Clear; // tắt tất cả các LED trước khi cho hiển thị mơi
Data = So[so_vong_phut/1000]; //hien thi so hang nghin
LED4 = Low;
delay(1);
Clear;
Data = So[(so_vong_phut%1000)/100]; // hien thi so hang tram
LED3 = Low;
delay(1);
Clear;
Data = So[(so_vong_phut%100)/10];
// hien thi so hang chuc


LED2 = Low;
delay(1);
Clear;
Data = So[so_vong_phut%10];
LED1 = Low;
delay(1);

// hien thi so hang don vi


}
void ngat_100us(void)interrupt TF0_VECTOR
// su dung ngat timer0
{
TH0=0x00;
TL0=0x9C;
tick++;
//cu 100us tang len mot lan
if((Sensor == Hight)&&(Old_Sensor == Low)) //neu trang thai xung truoc
la
{
//muc thap va trang thai xung hien
so_xung++;
//tai la muc cao thi coi la nhan duoc
Old_Sensor = Hight;
// mot xung
}
else if(Sensor == Low)
Old_Sensor = Low;
if(tick>=10000)
//lay mau trong khoang 1 giay
{
so_vong_phut = (so_xung/so_xung_mot_vong)*60;
so_xung = 0;
//reset lai
tick = 0;
//reset lai
}
}
void main(void)

{

TMOD=0x02;
// che do 8 bit tu nap lai
TH0=0x00;
TL0=0x9C;
//tran 100us
ET0=1;
P0=0xff;
P2=0xff;
TR0 = 1;
EA=1;
//cho phep su dung ngat
while(1)
{
hienthi();
}
}



×