51单片机-红外点滴测速程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define uint unsigned int

#define uchar unsigned char

sbit beep = P1A0;

sbit dula =卩3八6;

sbit wela = P3A7; uchar qian,bai,shi,ge;

uint speed = 0,speed_tmp = 0;

uint num0,num1;

uchar time_out = 0;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

uchar code tablewe[]={

0xfe,0xfd,0xfb,0xf7};

void init();

void delayms(uint);

void display(uchar qian,uchar bai,uchar shi,uchar ge); void main()

init();

while(1)

{

display(qian,bai,shi,ge);

if(time_out == 1)

{

}//

}speed_tmp = speed * 12;//每分钟的点滴数目等于每 5 秒的数目乘以12speed = 0;

qian= 0;

bai= speed_tmp/100;

shi= (speed_tmp%100)/10;

ge= speed_tmp%10;

speed = 0;// 点滴数目清?

time_out = 0;

}

void init()

{

}TMOD = 0x11;//设置定时器0和1为工作方式1 (0001 0001)

TH0 = (65536-45872)/256; //装初值

TL0= (65536-45872)%256;

TH1 = (65536-45872)/256;

TL1= (65536-45872)%256;

EA = 1;

ET0 = 1;

ET1 = 1;

EX0 = 1;

EX1 = 1;

TR0 = 1;

TR1 = 1;

IT0 = 1;

IT1 = 0;

beep = 1;// 开总中断

// 开定时器0 中断

// 开定时器 1 中断

// 开外部中断0

// 开外部中断1

// 启动定时器0

// 启动定时器1

// 外部中断0 低电平触发// 外部中断 1 低电平触发// 关闭蜂鸣器

****************************** 外部

**********************************************/ interrupt 0// 点滴检测部分,能触发中断,说明有点滴

滴下断0P3八2void IntO()

{

EX0 = 0;//开外部中断

num1 = 0;// 计数器 1 清

speed ++;// 点滴数目加

1

EX0 = 1;//开外部中断0

delayms(1);

/****************************** 外部中

1P3八

3**********************************************

void Int1() interrupt 2// 液面检测部

{

EX1 = 0;//开外部中断0

beep = 0;// 如果触发外部中断,即检测脚为低电平,低于检测液面,蜂鸣器报警

EX1 = 1;//开外部中断0

}

/******************************

**********************************************

void T0_time() interrupt 1

{

TH0 = (65536-45872)/256; //装初值

TL0= (65536-45872)%256;

num0 ++;

if(num0 == 40)// 每隔2s 测一次点滴数

{

num0= 0;//计数器0 清零time_out = 1;

}

}

/****************************** 定时器

1**********************************************/

void T1_time() interrupt 3

{

TH1 = (65536-45872)/256; //装初值

TL1= (65536-45872)%256;

num1 ++;

if(num1 == 60)// 若3s 时间到,还未检测到点滴滴下{ beep = 0;// 蜂鸣器报警

}

}

void delayms(uint xms)

{

uint i,j;

for(i = xms;i > 0;i--)

for(j = 110;j > 0;j--);

}

/****************************** 数码管显

**********************************************/

void display(uchar qian,uchar bai,uchar shi,uchar ge) { dula = 1;

P0 = table[qian];

dula = 0;

wela = 1;

P2 = tablewe[3];

wela = 0;

delayms(5);中示函断

}dula = 1;

P0 = table[bai];

dula = 0;

相关文档
最新文档