main.c

来自「温度与转速数据采集和控制」· C语言 代码 · 共 179 行

C
179
字号

#include <reg52.h>


#define lis_f                       0x02//累计时分1
#define lis_s                       0x04//累计时时2

#define wendu_bj              0x06//温度报警1@
#define zasu_bj                  0x08//转速报警2



extern void some();//自检
extern void init();//初始设置
extern void somc();//启动设备
extern unsigned int i2c_read(unsigned char address);
extern bit i2c_write(unsigned char address,unsigned int fb);
extern int Read_Temperature(void);
extern void time_qd();
extern unsigned char leiji_minf;//累计时间 -分
extern unsigned int leiji_mins;//累计时间- 小时

 unsigned int zangsuzia;
 unsigned int zangsuzi1[7];
 
 
 unsigned int zangsuzi;//每分钟转速值
extern bit buza;//不转标志
void read_i2c();
void qdcesu();//启动测速
extern void k_gnkey();//功能
extern void k_sezi();//设置
extern void k_jajn();//设置加减
extern void jswd();//计时温度切换显示
extern void stratcbf();//显示数据刷新
extern void datey(unsigned int i);
extern void  bojinsu_zj();
extern bit xiaosen();
unsigned int zsedr();

char wdcj();
char wd_bj;//温度报警值
unsigned int zs_bj;//转速报警值
char wdcjsu;//温度采集值

unsigned char cecsu;//测速次数

unsigned char wdce;//温度测量次数
int wdra[5];
void bojin();
bit qdcesubuza;
extern bit jswdstr;//计时温度状态显示 0-温度 1-记时
bit wd_bojin_se;//温度报警位
bit zs_bojin_se;//转速报警位

sbit delet_bj=P0^4;//消声


main()
{
delet_bj=1;
 zangsuzi=0; 
some();//自检
read_i2c();
init();//初始设置
somc();//启动设备
bojinsu_zj();
jswdstr=1;
while(1)
{
 k_gnkey();//功能
 k_sezi();//设置
 k_jajn();//设置加减
 jswd();//计时温度切换显示
 stratcbf();//显示数据刷新
 qdcesu();//启动测速
 time_qd();
 wdce++; 
 if(wdce>30)
 	{
 	wdce=0;
       wdcjsu=wdcj();
 	}
if(xiaosen())
	delet_bj=!delet_bj;
 bojin();
 }
}

void bojin()
{
if(wdcjsu>=wd_bj)
	wd_bojin_se=1;
else wd_bojin_se=0;
if(zangsuzi>=zs_bj)
	zs_bojin_se=1;
else zs_bojin_se=0;
}

char wdcj()
{ 
int k;
unsigned char w,b,j; 
 int ds[5]; 
  wdra[4]= wdra[3];wdra[3]= wdra[2];
  wdra[2]= wdra[1];wdra[1]= wdra[0];
  wdra[0]=Read_Temperature();
  
  ds[0]= wdra[4];ds[1]= wdra[3];
  ds[2]= wdra[2];ds[3]= wdra[1];
  ds[4]= wdra[0];
  
   for(b=0;b<4;b++)
  	{
  	w=b;
  	for(j=b+1;j<5;j++)
  		
  	if(ds[j]<ds[w])w=j;
        k=ds[w];ds[w]=ds[b];ds[b]=k;
  	}
  return (((ds[1]+ds[2]+ds[3])/3)>>4);
}
void read_i2c()
{
leiji_minf=i2c_read(lis_f);
leiji_mins=i2c_read(lis_s);
wd_bj=i2c_read(wendu_bj);
zs_bj=i2c_read(zasu_bj);
}

void qdcesu()//启动测速
{
cecsu++;
if((cecsu>20)|buza)
  {
   cecsu=0;  
   zangsuzia=0;
   zangsuzi=zsedr();
   EX0=1;
   buza=0;
   qdcesubuza=0;     
   }
else if(qdcesubuza)
         {
          cecsu=0;         
           EX0=1;  
           zangsuzi=zsedr();
           buza=0;
           qdcesubuza=0;    
         }
}

unsigned int zsedr()
{
unsigned int k;
unsigned char w,b,j; 
unsigned int ds[7]; 
 zangsuzi1[6]= zangsuzi1[5];zangsuzi1[5]= zangsuzi1[4];
  zangsuzi1[4]= zangsuzi1[3];zangsuzi1[3]= zangsuzi1[2];
  zangsuzi1[2]=zangsuzi1[1];zangsuzi1[1]= zangsuzi1[0];
  zangsuzi1[0]=zangsuzia;
  
  ds[0]= zangsuzi1[6];ds[1]= zangsuzi1[5];
  ds[2]= zangsuzi1[4];ds[3]= zangsuzi1[3];
  ds[4]=zangsuzi1[2];ds[5]=zangsuzi1[1];
  ds[6]=zangsuzi1[0];
  
   for(b=0;b<6;b++)
  	{
  	w=b;
  	for(j=b+1;j<7;j++)
  		
  	if(ds[j]<ds[w])w=j;
        k=ds[w];ds[w]=ds[b];ds[b]=k;
  	}
  return ((ds[2]+ds[3]+ds[4])/3);
}

⌨️ 快捷键说明

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