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

📄 led.c

📁 温度与转速数据采集和控制
💻 C
字号:
#include <reg52.h>
#include <math.h>
#include<intrins.h>

sbit led_a=P1^0;
sbit led_b=P1^1;
sbit led_c=P1^2;
sbit led_d=P1^3;

bit time_ledbz;
sbit le1=P1^6;
sbit leji_led=P3^7;
unsigned char code led_seg[17]={0x12,0x9f,0x31,0x19,0x9c,0x58,
                0x50,0x1f,0x10,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xfd};

//unsigned char led_streat1;//功能状态表
///0-正常转速显示 1-累计时间  2-设置转速报警 
//unsigned char led_streat2;//功能状态表
///0-温度正常显示  1-计时显示 2-设置温度报警

extern unsigned int zangsuzi;//每分钟转速值
extern char wdcjsu;//温度采集值

extern char wd_bj;//温度报警值
extern unsigned int zs_bj;//转速报警值
extern unsigned int leiji_mins;//累计时间- 小时

extern unsigned char minf1;//启动计时后-分钟值
extern unsigned char mins1;//启动计时后-时钟值

unsigned char wsys[8];//位数影射
extern void datey(unsigned int i);
//void dateyf( int i);
void some();//自检

void some1();
void some2();
void some3();
void some4();
extern char wdcj();
void led1_str(unsigned char led_streat1);
void led2_str(unsigned char led_streat2);

unsigned char somiws;//LED扫描位数
bit seziws;//设置位闪标志
unsigned char wsws;//位闪位数0-4
unsigned char seop;
bit wd_ds;//温度显示状态
bit zs_ds;//转速显示状态
 bit wd_ws;//温度位闪标志
 bit zs_ws;//转速位闪标志


void some()//自检
{
unsigned char u;
unsigned char i;
leji_led=0;
le1=0;
wdcjsu=wdcj();
SBUF=0xff;
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
SBUF=0xff;
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
SBUF=0xff;
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
SBUF=0xff;
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;

for(i=0;i<3;i++)
{
led_a=1;
led_b=1;
led_c=1;
led_d=1;
SBUF=led_seg[0];
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
SBUF=0xff;
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
led_a=0;
datey(10000);
led_a=1;
led_b=0;
datey(10000);
led_b=1;
led_c=0;
datey(10000);
led_c=1;
led_d=0; 
datey(10000);
led_a=1;
led_b=1;
led_c=1;
led_d=1;
SBUF=0xff;
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
SBUF=led_seg[0];
while(TI)
{
u++;if(u>100)
	break;
}
TI=0;
led_a=0;
datey(10000);
led_a=1;
led_b=0;
datey(10000);
led_b=1;
led_c=0;
datey(10000);
led_c=1;
led_d=0;
datey(10000);
 wdcjsu=wdcj();
led_d=1;
}
}



void  time1() interrupt 3
{
seop++;
if(seop>50)
{
seop=0;
 somiws++;
 if(somiws>3)
 	somiws=0;
  switch(somiws)
  	{
  	case 0: some1(); break;
       case 1: some2(); break;
       case 2: some3(); break;
      default: some4();
  	}
}
}

void some1()
{
unsigned char u;
   led_d=1;
      if((seziws&(wsws==3))|zs_ws)
      	{
          SBUF=0xff;
      while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}
      else
      	{
       SBUF=led_seg[wsys[3]];
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}

      
       if((seziws&(wsws>3))|wd_ws)
   	{
        SBUF=0xff;
      while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}
   else
   	{
     SBUF=led_seg[wsys[7]];
      while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}           
led_a=0;
}
void some2()
{unsigned char u;

 led_a=1; 
      if((seziws&(wsws==2))|zs_ws)
      	{
          SBUF=0xff;
        while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}
      else
      	{
       SBUF=led_seg[wsys[2]];
        while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}


         if((seziws&(wsws>3))|wd_ws)
   	{
        SBUF=0xff;
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}
   else
   	{
     SBUF=led_seg[wsys[6]];
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}
 led_b=0;
}
void some3()
{unsigned char u;
 led_b=1; 
      if((seziws&(wsws==1))|zs_ws)
      	{
          SBUF=0xff;
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}
      else
      	{
       SBUF=led_seg[wsys[1]];
        while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}

       if((seziws&(wsws>3))|wd_ws)
   	{
        SBUF=0xff;
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}
   else
   	{
     SBUF=led_seg[wsys[5]];
      while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}        
 led_c=0;
}
void some4()
{unsigned char u;
 led_c=1;  
      if((seziws&(wsws==0))|zs_ws)
      	{
          SBUF=0xff;
        while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}
      else
      	{
       SBUF=led_seg[wsys[0]];
        while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
      	}

       if((seziws&(wsws>3))|wd_ws)
   	{
        SBUF=0xff;
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}
   else
   	{
     SBUF=led_seg[wsys[4]];
       while(TI)
          {
            u++;if(u>50)
           	break;
           }
         TI=0;
   	}       
 led_d=0;
}

/*
void dateyf( int i)
{
for(;i>0;i--)
    _nop_();
}

*/
void wdcjys()//温度映射位
{
unsigned char us,uf;
unsigned char wder;
bit h;
if(wdcjsu>=0)
{
wsys[4]=0x0b;
us=(wdcjsu/100)&0x0f;//温度百位
if(us>0)
          {h=1;wsys[5]=us;}
else    {h=0; wsys[5]=0x0b;}

us=((wdcjsu%100)/10)&0x0f;//温度十位
if(h|(us!=0))
	wsys[6]=us;
else wsys[6]=0x0b;
wsys[7]=(wdcjsu%10)&0x0f;//个位
}
else
{
wder=cabs(wdcjsu);
us=(wder/100)&0x0f;//温度百位
uf=((wder%100)/10)&0x0f;//温度十位

if(us>0)
          {wsys[5]=us;wsys[4]=0x10;wsys[6]=uf;}

else    {
          if(uf!=0)
              {wsys[5]=0x10;wsys[4]=0x0b;wsys[6]=uf;}
          else {wsys[6]=0x10c;wsys[4]=0x0b;wsys[5]=0x0b;}//-
          }
wsys[7]=(wder%10)&0x0f;//温度个位
}
}

void wdbjys()//温度报警映射位
{
unsigned char us,uf;
unsigned char wder;
bit h;
if(wd_bj>=0)
{
wsys[4]=0x0b;
us=(wd_bj/100)&0x0f;//温度报警百位
if(us>0)
          {h=1;wsys[5]=us;}
else    {h=0; wsys[5]=0x0b;}

us=((wd_bj%100)/10)&0x0f;//温度报警十位
if(h|(us!=0))
	wsys[6]=us;
else wsys[6]=0x0b;
wsys[7]=(wd_bj%10)&0x0f;//温度报警个位
}
else
{
wder=cabs(wd_bj);
us=(wder/100)&0x0f;//温度报警百位
uf=((wder%100)/10)&0x0f;//温度报警十位

if(us>0)
          {wsys[5]=us;wsys[4]=0x10;wsys[6]=uf;}

else    {
          if(uf!=0)
              {wsys[5]=0x10;wsys[4]=0x0b;wsys[6]=uf;}
          else {wsys[6]=0x10;wsys[4]=0x0b;wsys[5]=0x0b;}//-
          }
wsys[7]=(wder%10)&0x0f;//温度报警个位
}
}

void js_time()//计时映射位
{
unsigned char us;
wsys[6]=((minf1%100)/10)&0x0f;
wsys[7]=(minf1%10)&0x0f;
us=((mins1%100)/10)&0x0f;
if(us>0)
	wsys[4]=us;
else wsys[4]=0x0b;
wsys[5]=(mins1%10)&0x0f;
}

void zasuw()//转速映射位
{
unsigned char us,ud,uf;
us=((unsigned char)(zangsuzi/1000))&0x0f;
if(us>0)
	wsys[0]=us;
else wsys[0]=0x0a;
 ud=((unsigned char)((zangsuzi%1000)/100))&0x0f;
 if((ud==0)&(us==0))
 	wsys[1]=0x0a;
 else wsys[1]=ud;
   uf=((unsigned char)((zangsuzi%100)/10))&0x0f;
  if((ud==0)&(us==0)&(uf==0))
 	wsys[2]=0x0a;
 else wsys[2]=uf;     
   wsys[3]=((unsigned char)(zangsuzi%10))&0x0f;
}

void leiji_time()//累计时间映射位
{
unsigned char us,ud,uf;
us=((unsigned char)(leiji_mins/1000))&0x0f;
if(us>0)
	wsys[0]=us;
else wsys[0]=0x0b;
 ud=((unsigned char)((leiji_mins%1000)/100))&0x0f;
 if((ud==0)&(us==0))
 	wsys[1]=0x0b;
 else wsys[1]=ud;
   uf=((unsigned char)((leiji_mins%100)/10))&0x0f;
  if((ud==0)&(us==0)&(uf==0))
 	wsys[2]=0x0b;
 else wsys[2]=uf;     
   wsys[3]=((unsigned char)(leiji_mins%10))&0x0f;
}

void zsbjs()//转速报警映射位
{
wsys[0]=((unsigned char)(zs_bj/1000))&0x0f;	
wsys[1]=((unsigned char)((zs_bj%1000)/100))&0x0f;
wsys[2]=((unsigned char)((zs_bj%100)/10))&0x0f; 
wsys[3]=((unsigned char)(zs_bj%10))&0x0f;
}

void led1_str(unsigned char led_streat1)
{
switch(led_streat1)
{
case 0: zasuw();leji_led=0;zs_ds=1;//转速映射位
            break;
case 1: leiji_time();leji_led=1;zs_ds=0;//累计时间映射位
            break;
case 2: zsbjs();leji_led=0;zs_ds=0;//转速报警映射位
            break;            
default: ;            
}
}

void led2_str(unsigned char led_streat2)
{
switch(led_streat2)
{
case 0: wdcjys();time_ledbz=0;wd_ds=1;//温度映射位
            break;
case 1: wdbjys();time_ledbz=0;wd_ds=0;//温度报警映射位
            break;
case 2: js_time();time_ledbz=1;wd_ds=0;//计时映射位
            break;            
default: ; 
}
}

⌨️ 快捷键说明

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