📄 chongqibeng.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
void warning();
void initial();
void gengxin(uchar b);
void LED_DISPLAY(uint b,uchar i);
void LED_DISPLAY1(uchar i);
void delay1(unsigned int time);
void delay2(unsigned int time);
void delay3(unsigned int time);
void WriteEeprom(uchar t_addr,uchar dataa,uchar datab,uchar datac);
void EraseEeprom(uchar t_addr);
uchar kbscan();
uchar kbscan1();
uchar ReadEeprom(uchar s_addr,uchar addl);
uint TLC1549read();
unsigned char code table1[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x76,0x38,0x39};
unsigned char code table2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbit P1_0=P1^0;//检漏按钮
sbit P1_1=P1^1;//设置按钮
sbit P1_2=P1^2;//-1按钮
sbit P1_3=P1^3;//+1按钮
sbit P1_5=P1^5;//报警指示灯
sbit P1_6=P1^6;//充气指示灯
sbit P1_7=P1^7;//检漏指示灯
sbit P2_1=P2^1;//蜂鸣器开关
sbit P2_0=P2^0;//外接报警装置
sbit P2_2=P2^2;
sbit P3_2=P3^2;//tlc1549时钟
sbit P3_3=P3^3;//tlc1549I/O
sbit P3_5=P3^5;//tlc1549使能
sbit P3_6=P3^6;//充气泵工作控制端
sbit P3_7=P3^7;//切断阀工作控制端
sfr isp_wdt=0xe1;
sfr isp_data=0xe2;
sfr isp_addrh=0xe3;
sfr isp_addrl=0xe4;
sfr isp_cmd=0xe5;
sfr isp_trig=0xe6;
sfr isp_contr=0xe7;
long int value=0;
uchar b=0,cc=0,max=10,min=3,e=0,cishu=9,a1,a2,a3;
uint qiya,z1,z2,z3,z4,z5,z6,z7,z8,z;
void timer0(void) interrupt 1 using 1
{
TH0=60;
TL0=176;
value++;
}
main()
{
uchar jianhao;
long int T1,Time;
int tempDisplay=0;
int tempDisplay1=0;
int tempDisplay2=0;
initial();//初始化
a1=ReadEeprom(0x20,0x00);
a2=ReadEeprom(0x20,0x01);
a3=ReadEeprom(0x20,0x02);
for(;;)
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
for (tempDisplay=0;tempDisplay<30;tempDisplay++)
{
jianhao=kbscan();
if (jianhao==0x03||jianhao==0x04)
break;
}
if(jianhao==0x03)//功能键按下反应
{
cc++;
P2_1=1;
delay1(8);
P2_1=0;
gengxin(b);
for(;;)
{
jianhao=kbscan();
LED_DISPLAY(b,0);
if(jianhao==0)
break;
}
}
else if(jianhao==0x04)//检漏状态启动
{
P1_7=0;//检漏指示灯亮
P2_1=1;
delay1(10);
P2_1=0;
for(;;)
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
jianhao=kbscan();
if(jianhao==0)
break;//判断按键是否已经放开,若放开,退出循环
}
for(;;)
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
for (tempDisplay=0;tempDisplay<30;tempDisplay++)
{
jianhao=kbscan();
if (jianhao==0x04)
break;
}
if(jianhao==0x04)
{
P1_7=1;//检漏指示灯灭
P2_1=1;
delay1(10);
P2_1=0;
break;
}
}
for(;;)
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
jianhao=kbscan();
if(jianhao==0)
break;
LED_DISPLAY(b,4);
}
}
Time=value;
if(Time>1728000)//时间差大于24小时
{
initial();
}
if(qiya<(a2*50))
{
if(e==0)
b=b+1;
if(b>a3)
{
P2_0=1;
P2_1=1;
P1_5=0;
}
T1=value;
P3_6=0;
P3_7=0;
P1_6=0;//充气开始且指示灯亮
for(;;)
{
Time=value;
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
delay1(1);
if(((Time-T1)<=36000)&&(qiya>=(a1*50)))
{
P3_6=1;
P3_7=1;
P1_6=1;
e=0;
break;
}
else if(((Time-T1)>36000)&&(qiya<(a1*50)))
{
for(;;)
{
LED_DISPLAY(b,0);
warning();//循环充气停机,并不停报警
if(qiya>=a1*50)
break;
}
break;
}
jianhao=kbscan();
if(jianhao==0x03)//功能键按下反应
{
e=1;
P3_6=1;
P3_7=1;
P1_6=1;
cc++;
P2_1=1;
delay1(8);
P2_1=0;
gengxin(b);
for(;;)
{
jianhao=kbscan();
//LED_DISPLAY(b,0);
if(jianhao==0)
break;
}
break;
}
else if(jianhao==0x04)//检漏状态启动
{
e=1;
P3_6=1;
P3_7=1;
P1_6=1;
P1_7=0;//检漏指示灯亮
P2_1=1;
delay1(8);
P2_1=0;
for(;;)
{
jianhao=kbscan();
if(jianhao==0)
break;//判断按键是否已经放开,若放开,退出循环
}
for(;;)
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
for (tempDisplay=0;tempDisplay<30;tempDisplay++)
{
jianhao=kbscan();
if (jianhao==0x04)
break;
}
if(jianhao==0x04)
{
P1_7=1;//检漏指示灯灭
P2_1=1;
delay1(8);
P2_1=0;
break;
}
LED_DISPLAY(b,4);
}
for(;;)
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
LED_DISPLAY(b,4);
//delay1(3);
jianhao=kbscan();
if(jianhao==0)
break;
LED_DISPLAY(b,4);
}
break;
}
}
}
}
}
void warning()//执行充气一小时停一小时的操作,其中报警器一直报警,报警灯始终亮,直到气压达到上限为止跳出
{
long int T,Time;
uchar i,key;
T=value;
P1_5=0;//报警灯亮
P2_1=1;//蜂鸣器响
P2_0=1;//遥信接口报警
P3_6=1;
P3_7=1;//停止充气
P1_6=1;//充气灯灭
for(;;)//做停机一小时处理
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
LED_DISPLAY(b,5);
for(i=0;i<30;i++)
{
key=kbscan();
}
Time=value;
if(Time-T>=72000)
{
P3_6=0;
P3_7=0;
P1_6=0;
break;
}
}
T=value;
for(;;)//做充气一小时处理
{
z1=TLC1549read();
z2=TLC1549read();
z3=TLC1549read();
z4=TLC1549read();
//z5=TLC1549read();
//z6=TLC1549read();
qiya=(z1+z2+z3+z4)/4;
LED_DISPLAY(b,5);
Time=value;
if(Time-T>72000)
{
P3_6=1;
P3_7=1;
P1_6=1;
break;
}
if(qiya>=a1*50)
{
P3_6=1;
P3_7=1;
P1_6=1;
P1_5=1;
P2_1=0;
P2_0=0;
break;
}
}
}
void gengxin(uchar b)//参数b为已经充气的次数//该函数表示当功能键按下一次即进入该函数处理和显示,直到功能键按下4次为止退出
{
uchar t,key;//cc为功能键按下次数%4
uint i=0;
for(;;)//进入该函数的条件为功能键按下,此循环保证了不松开按键只做按键一次响应
{
LED_DISPLAY(b,cc);
key=kbscan();
if(key==0)
break;
}
for(;;)//最大值状态,最小值状态,显示次数状态得显示和操作程序,当功能键按下四次时,跳出该循环,进而退出函数
{
for(i=1;i<70;i++)
{
key=kbscan();
if(key==0x01)
{
P2_1=1;
delay1(8);
P2_1=0;
if(cc==0x01)
{
if(a1<0x14)
{
a1=a1+1;
}
LED_DISPLAY(b,cc);
}
else if(cc==0x02)
{
if(a1-a2>1)
{
a2=a2+1;
}
LED_DISPLAY(b,cc);
}
else if(cc==0x03)
{
if(a3<0xff)
{
a3=a3+1;
}
LED_DISPLAY(b,cc);
}
for(;;)
{
key=kbscan();
if(key==0)
break;
}
}
else if(key==0x02)
{
P2_1=1;
delay1(8);
P2_1=0;
if(cc==0x01)
{
if(a1>0x02&&a1-a2>1)
{
a1=a1-1;
}
LED_DISPLAY(b,cc);
}
else if(cc==0x02)
{
if(a2>0x01)
{
a2=a2-1;
}
LED_DISPLAY(b,cc);
}
else if(cc==0x03)
{
if(a3>0x01)
{
a3=a3-1;
}
LED_DISPLAY(b,cc);
}
for(;;)
{
key=kbscan();
if(key==0)
break;
}
}
else if(key==0x03)
{
cc=(cc+1)%4;
if(cc!=0)
{
P2_1=1;
delay1(8);
P2_1=0;
}
if(cc==0)
{
P2_1=1;
delay2(60);
P2_1=0;
WriteEeprom(0x20,a1,a2,a3);
break;
}
for(;;)
{
key=kbscan();
if(key==0)
break;
}
}
}
if(cc==0)
break;
for(i=1;i<70;i++)
{
key=kbscan1();
delay2(4);
for(t=0;t<220;t++);
if(key==0x01)
{
P2_1=1;
delay1(8);
P2_1=0;
if(cc==0x01)
{
if(a1<0x14)
{
a1=a1+1;
}
}
else if(cc==0x02)
{
if(a1-a2>1)
{
a2=a2+1;
}
}
else if(cc==0x03)
{
if(a3<0xff)
{
a3=a3+1;
}
}
P2_2=0;
for(;;)
{
key=kbscan();
if(key==0)
break;
}
break;
}
else if(key==0x02)
{
P2_1=1;
delay1(8);
P2_1=0;
if(cc==0x01)
{
if(a1>0x01&&a1-a2>1)
{
a1=a1-1;
}
}
else if(cc==0x02)
{
if(a2>0x01)
{
a2=a2-1;
}
}
else if(cc==0x03)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -