level 7
请叫我大仙长
楼主

#include <reg51.h>#include "ADC0832.h"
#include"i2c.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit beep=P2^3;//蜂鸣器
uchar disp1[]="Volt:00.00V";
uchar disp2[]="H:00.0V L:00.0V";
uint volt=0;//电压
uint limit1=50,limit2=200;//报警阀值
uchar k=0;
void delay(uint i) //延时
{
while(i--);
}
void main()//主函数
{
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
init_1602();
limit1=At24c02Read(0);//初始化存储
limit1<<=8;
limit1+=At24c02Read(1);
if(limit1>500)
{
limit1=50;
At24c02Write(0,limit1>>8);
At24c02Write(1,limit1);
}
limit2=At24c02Read(2);//初始化存储
limit2<<=8;
limit2+=At24c02Read(3);
if(limit2>500)
{
limit2=200;
At24c02Write(2,limit2>>8);
At24c02Write(3,limit2);
}
write_string(1,0,disp1); //显示
write_string(2,0,disp2);
while(1)
{
if(!k3)//上限加
{
if(limit1<limit2)
limit1++;
At24c02Write(0,limit1>>8);
At24c02Write(1,limit1);
delay(10000);
while(!k3);
}
if(!k4)//上限减
{
if(limit1>0)
limit1--;
At24c02Write(0,limit1>>8);
At24c02Write(1,limit1);
delay(10000);
while(!k4);
}
if(!k1)//下限加
{
if(limit2<500)
limit2++;
At24c02Write(2,limit2>>8);
At24c02Write(3,limit2);
delay(10000);
while(!k1);
}
if(!k2)//下限减
{
if(limit2>limit1)
limit2--;
At24c02Write(2,limit2>>8);
At24c02Write(3,limit2);
delay(10000);
while(!k2);
}
}
}
void Timer0() interrupt 1//定时器中断
{
unsigned long i;
TH0=0X3C;//重装定时器
TL0=0XB0;
if(k<10)
k++;
else
{
k=0;
i=ADC0832(0);//测电压
volt=i*5000/255;
//显示
disp1[5]=volt/1000+0x30;
disp1[6]=volt%1000/100+0x30;
disp1[8]=volt%100/10+0x30;
disp1[9]=volt%10+0x30;
disp2[2]=limit2/100+0x30;
disp2[3]=limit2%100/10+0x30;
disp2[5]=limit2%10+0x30;
disp2[10]=limit1/100+0x30;
disp2[11]=limit1%100/10+0x30;
disp2[13]=limit1%10+0x30;
write_string(1,0,disp1); //显示
write_string(2,0,disp2);
//报警控制
if((volt>limit2*10)||(volt<limit1*10))
beep=0;
else
beep=1;
}
}