📄 水位(定).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 + -