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

📄 水位(定).txt

📁 代码使用在水位传感器上
💻 TXT
字号:
////////////////////////////////////////////////////////
//               MODEL:watherhighcheck                //
//               MCU:AT89C2051                        //
//               Ctystal:12MHz                        //
//               Design by:huafeng                    // 
//               Date:2007.05.19                      // 
////////////////////////////////////////////////////////
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
#define SHOW1 P0                                                //定义数据输出端口
#define SHOW2 P2                                                //定义数据输出端口
#define DATAIN P1                                               //定义数据输出端口
uchar g_ucDataInStatus;  
uchar g_ucShowStatus = 0;
uchar g_ucSoundStatus = 0;      
uchar g_ucSoundStatus2 = 0;                                   //定义时分秒变量
unsigned char i = 0;                                            //定时器增量值,用以记数
unsigned char j = 0;                                            //定时器跟踪变量,用以记数还原  

uchar code disout1[8]= {0X46, 0X05, 0X05, 0X05, 0X03, 0X03, 0X03, 0X46};    //输出口1编码
uchar code disout2[8]= {0X01, 0X09, 0X31, 0X11, 0X21, 0X00, 0x01, 0X00};    //输出口2段

//--------------------延时子函数-------------------------
delay()   //
{
  uchar d2;
  for(d2 = 0; d2 < 0xff; d2++);
}

//-------------------数据输出----------------------------
ShowOut()
{
 SHOW1 = disout1[g_ucDataInStatus];
 SHOW2 = disout2[g_ucDataInStatus];
}


//-------------------关闭实时显示函数-------------------------
void CloseLink()
{
   g_ucShowStatus = 1;             //关闭实时显示量 
   TR0 = 1;                         //启动计时器0
}


//-------------------打开实时显示函数-------------------------
void OpenLink()
{
   g_ucShowStatus = 0;             //打开实时显示量 
   TR0 = 0;                         //关闭计时器0   
} 


//-------------------声音状态恢复函数-------------------------
void SoundBack()
{
      g_ucSoundStatus = 0;
      g_ucSoundStatus2 = 0;
} 


//-------------------获得输入信号-------------------------
void GetSuatusNo()
{
   if( (DATAIN & 0x04) == 0x04 )
   {
     
     if(g_ucSoundStatus2 == 0)
       {CloseLink();
       g_ucDataInStatus = 0;}
     else
      { g_ucDataInStatus = 0;}
    g_ucSoundStatus = 0;
     goto p;
   }
   
   if( (DATAIN & 0x08) == 0x08 )
   {
     g_ucDataInStatus = 1;
     SoundBack();
     goto p;
   }

   if( (DATAIN & 0x10) == 0x10 )
   {
     g_ucDataInStatus = 2;
     SoundBack();
     goto p;
   }

   if( (DATAIN & 0x20) == 0x20 )
  {
     g_ucDataInStatus = 3;
     SoundBack();
     goto p;
   }

   if( (DATAIN & 0x40) == 0x40 )
   {
     g_ucDataInStatus = 4; 
     SoundBack();
     goto p;   
    }
   if(g_ucSoundStatus == 0)
   {
    g_ucDataInStatus = 5;
    }
    else
    {
    g_ucDataInStatus = 6;
    }
    g_ucSoundStatus2 = 0;
 p: delay();
}


//------------------------定时器-------------------------
void waterhign_check() interrupt 1  //time0_int  waterhign_check
{

 TH0 = 0x3c;    //定时器0初值设置
 TL0 = 0xb0;    //
 //GetSuatusNo();
 // delay();

 //TR0 = 1;
 i++;

 if(i==10)
 {
   i = 0;
   j++;
   if(g_ucDataInStatus == 0)
    {g_ucDataInStatus = 7;}
   else
    g_ucDataInStatus = 0; 
 }
 if(j == 6)
 {
   j = 0;
   OpenLink();   
   g_ucSoundStatus2 = 1;
 }

} 


static void soundoff(void) interrupt 0 
{
    if( g_ucSoundStatus == 0)
    {
     
      g_ucSoundStatus = 1;
    }
  

}


//---------------------主程序函数-------------------------
void main(void)
{
      
        
 TMOD = 0X01;   //设定时器工作在1模式
 TH0 = 0x3c;    //定时器0初值设置
 TL0 = 0xb0;    //
 EA = 0;
 EX0 = 1;
 PX0 = 1;
 EA = 1;        //开总中断
 ET0 = 1;       //开定时0中断  
     
 //TR0 = 1;       //启动计时器0
 while(1)     //无限循环
   { 
      if(g_ucShowStatus == 0)
      {
        GetSuatusNo() ;     
      }
      ShowOut();
  }
}

⌨️ 快捷键说明

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