📄 fdjzsb.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 + -