2021-11-13

//#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++;  //脉冲计数
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值