⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdjzsb.c

📁 一个不错的汽车转速表
💻 C
字号:
/***************************文件信息****************************************
**汽油发电机转速显示源程序,采用11.0592MHz晶振                            **
**转速=(fosc/12)*VV_JCOU*n/js_zhuanshu                                    **
**fosc=11.0592*10^6   n=60  VV_JCOU=脉冲数(VV_JCOU是常数)                 **
**js_zhuanshu=计数值(外部转速计数值 )                                     **
**fosc/12是机器周期   公式乘以n(60)是60秒(每分钟)的转速                   **
**P30 P34 P35 P37  LED A0-A3                                              **
**P1.0-P1.7  LED K0-K7                                                    **
**P1.7   DOT                                                              **
**转动一圈有2个脉冲信号                                                   **
**File Name    :fdjzsb.c                                                  **
**Creator      :xuer                                                      **
**Date Created :2008年01月12日                                            **
**Edition      :C                                                         **
**Function     :  a    b    c    d    e    f    g    w1   w2   w3   w4    **
**              p2.0 p2.1 p2.2 p2.3 p2.4 p2.5 p2.6 p1.0 p1.1 p1.2 p1.3    **
**Date Amend   :zsb.C                                                     **
***************************************************************************/


#include "reg51.h"
#include "fdjzsb.h"



/*定时器0中断服务程序,系统扫描计时
  interrupt关键字后的数字指向中断向量号
  using关键字后的数字表示该中断函数使用第几组寄存器
  中断地址= (中断向量号 * 8) + 3*/
void service_int_T0(void) interrupt 1 using 3     
{
  ET0=0;            //定时器0中断禁止
  TL0=0x00;         //重装定时初值(低字节)
  TH0=0xfb;         //重装定时初值(高字节)

  LED_A0=1;         //关显示
  LED_A1=1;
  LED_A2=1;
  LED_A3=1;

  run_cou++;
  if(run_cou>200) 
  {
  	run_cou=0;
		F_run=~F_run;
		if(off_cou<200) 
			off_cou++;
	}

    	if(scan_cou<3) scan_cou++;
      else scan_cou=0;

        if(F_run==1 && scan_cou==3) 
        	P1=~(ds_buf[scan_cou]+0x8);   
        	else P1=~ds_buf[scan_cou];      //输出取反

          if(scan_cou==0) LED_A0=0;
            if(scan_cou==1) LED_A1=0;
              if(scan_cou==2) LED_A2=0;
                if(scan_cou==3) LED_A3=0;

  ET0=1;            //定时器0中断开启
}

//外部计数中断
void service_int_X0(void) interrupt 0 using 2
{
	TR1=0;            //停止定时器1
  tmpHH=TH1;        //读定时器1高字节
  tmpLL=TL1;        //读定时器1低字节
  TH1=0;            //定时器高字节清零
  TL1=0;            //定时器低字节清零
  F_jszs=1;         //启动转速计算程序
  off_cou=0;        //显示关闭计数器清零
  TR1=1;            //启动定时器1
}

main()
{
  fcount=0;
  scan_cou=0;
  off_cou=0;
  TMOD=0x11;        //定时器0、1工作方式1(16位定时器),由软件启动或停止定时器(置位TR0或TR1)
  PCON=0;

  TL1=0;            //定时器1清零
  TH1=0;

  TL0=0x00;         //定时器0赋初始值,定时1.39ms 
  TH0=0xfb;
  ET0=1;            //定时器0中断使能        
  IT0=1;            //外部中断0触发方式控制位,置位时为下降沿触发
  PX0=1;            //外部中断0为高优先级
  EX0=1;            //外部中断0使能

  TR0=1;            //启动定时器0  
  TR1=1;            //启动定时器1  

  EA=1;             //所有中断使能

 // js_zhuanshu=12345;//这句没意义,测试的时候写的,工作时数据就被刷新了
 // F_jszs=1;         //计算转速标志

  //js_zs();
  ds_buf[0]=0x80;  //给他赋值就是改变显示的内容
  ds_buf[1]=0x80;
  ds_buf[2]=0x80;
  ds_buf[3]=0x80;

  for (;;) 
  {
  	if(F_jszs==1)
	  {
	  	F_jszs=0;
		  js_zs();
	  }
	  if(off_cou>3)   //显示会关闭
	  {
	   	ds_buf[0]=0x77;
		  ds_buf[1]=0x77;
		  ds_buf[2]=0x77;
		  ds_buf[3]=0x77;
		}
	clr_wdt();

	}
}

void js_zs()
{
	if(fcount==0)     //fcount的作用是采集多次,每次都做平均,主要作用是滤除干扰
  {
  	js_zhuanshu=tmpHH*256;    //*256就是转换为16位二进制整数,2个字节,*256表示16二进制整数的高字节
	  js_zhuanshu=js_zhuanshu+tmpLL;
  }
  else
  {
  	js_zhuanshu=js_zhuanshu+tmpHH*256;
    js_zhuanshu=js_zhuanshu+tmpLL;
    js_zhuanshu=js_zhuanshu/2;
  }
  fcount++;
  if(fcount>100)
  {
  	fcount=0;
    js_zhuanshu=27648000/js_zhuanshu;//27648000=(js_zhuanshu=tmpHH*256)

    ds_buf[0]=STG05_smg[(js_zhuanshu%10000)/1000];
    ds_buf[1]=STG05_smg[(js_zhuanshu%1000)/100];
    ds_buf[2]=STG05_smg[(js_zhuanshu%100)/10];
    ds_buf[3]=STG05_smg[js_zhuanshu%10];

	}
}

void clr_wdt()     //清除看门狗
{
P31=~P31;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -