//#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"
unsigned long PluNum=0; //检测速度转化来的脉冲量
unsigned long time_ms; //定时器计数
float Juli=0; //转速计算
char displaytemp[16]; //显示更新暂存
unsigned char DealSudu=0; //处理速度
void Init_Timer0(void); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
Init_Timer0(); //定时器0初始化
EX0=1; //外部中断0开
IT0=1; //边沿触发
EA=1; //全局中断开
//LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
// LCD_Clear(); //清屏
//LCD_Write_String(0,0,"My Designer! "); //初始化
// sprintf(displaytemp,"ZhuanSu:%3.1fr/s",Juli);
// LCD_Write_String(0,1,displaytemp);
while (1) //主循环
{
if(DealSudu==1)
{
DealSudu=0;
Juli=(Juli+(float)PluNum/3.0)/2; //m/s 1个脉冲为1圈 3s时间进行检测
PluNum=0;
sprintf(displaytemp,"ZhuanSu:%3.1fr/s",Juli); //打印转速
//LCD_Write_String(0,1,displaytemp); //显示
PluNum=0;
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
static unsigned char Count=0; //计数
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
time_ms++;
if(time_ms%48==0) //定时处理
{
Count++;
if(Count>3) //3s进行处理
{
DealSudu=1;
}
}
}
/*------------------------------------------------
外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
PluNum++; //脉冲计数
}