//---------------------------------------------------//
//--------------------毕业设计-----------------------//
//------------------水位控制系统---------------------//
//---------------------main.c------------------------//
//---------------------------------------------------//
#include<reg51.h>
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit LED1=P0^0; //位定义
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P2^7;
void delay (int); //延时函数的声明
unsigned char count_T0=0; //控制定时器0中断变量
unsigned char scan=0,temp=0;
unsigned int results;
void init()
{
P1=0xff; //初始化P1口
P2=0xff; //初始化P2口
TMOD=0x22; //定时器0、1的工作方式都为工作方式2
TH0=(256-250); //给计数器0的高8位装初值
TL0=(256-250);
TH1=(256-2); //给计数器1的高8位装初值
TL1=(256-2);
ET0 =1; //开启定时器0中断
ET1 =1; //开启定时器1中断
EA = 1; //开启总中断位
TR0=1; //允许计数器0工作
TR1=1; //允许计数器1工作
}
void main()
{
init();
while(1)
{
OE=0; //让输出线呈高阻态
ST=0;
ST=1; //start产生一个上升沿,使寄存器清0
ST=0; //start产生一个下降沿,开始数据转换
delay(2); //延时2毫秒
while(EOC==0); //等待EOC为1,即数据转换完成
OE=1; //允许寄存器中的数据输出
temp=P1; //将此时P1口的值给temp
delay(2); //延时2毫秒
OE=0; //让寄存器输出呈高阻态
// results= temp * 196; //每个二进制位对应0.0196V
// results= results/10; //将转换得到的值换成十进制数 取该数的前4位
}
}
//延时函数
void delay (int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
//定时器1中断服务程序
void T1_8ms(void)interrupt 3
{
if (++count_T0==20) //判断中断控制变量是否达到20
{
count_T0=0; //清0
if(temp>0x42 && temp<=0x7b)
{
LED5=1;
if(temp>0x66 && temp<=0x7b) //水位在100%位置,LED灯全亮。
{
LED1=0;
LED2=0;
LED3=0;
LED4=0;
// LED5=0;
}
if(temp>0x55 && temp<=0x66) //水位在80%处,八个LED灯亮。
{
LED1=1;
LED2=0;
LED3=0;
LED4=0;
// LED5=0;
}
if(temp>0x48 && temp<=0x55) //水位在50%处,五个LED灯亮。
{
LED1=1;
LED2=1;
LED3=0;
LED4=0;
// LED5=0;
}
if(temp>0x42 && temp<=0x48) //水位在20%处,两个LED灯亮
{
LED1=1;
LED2=1;
LED3=1;
LED4=0;
// LED5=0;
}
}
if(temp<=0x42|| temp>0x7b)
{
LED5=0;
LED1=1;
LED2=1;
LED3=1;
LED4=1;
}
}
}
void T0_CLK() interrupt 1
{
CLK=~CLK; //给ADC0808提供时钟信号
}