代码拉取完成,页面将自动刷新
#include <reg52.h>
#include "keynew.h"
#include "delay.h"
#include "12232.h"
#include "warning.h"
#include "1549.h"
#include "1302.h"
char keyX,keyY;
//
sbit sss=P1^7;
bit ij=0;
uchar code keyfunction[3][2]={{0x00,0x01,},
{0x10,0x11,},
{0x20,0x21,} };
uchar j;
uint idata history[30]; //128-85=30
uchar idata thistory[30][2];
/*************************键盘扫描**************************************************/
uchar key_scan()
{uchar keytemp=0;
P1=0x0f;
if(P1!=0x0f)
{delay_ms(5);
if(P1!=0x0f)
keytemp=0x0f^P1;
}
return keytemp;
while(P1!=0x0f); //按键松手检测
}
void addrb(uchar addr)
{uchar temp;
temp=(addr&0xf0)>>4;
if(temp>9)LCD_write_data(0x40+(temp-9));
else LCD_write_data(0x30+temp);
addr=addr&0x0f;
if(addr>9)LCD_write_data(0x40+(addr-9));
else LCD_write_data(0x30+addr);
}
/***********************desktop界面******************************/
void desktop()
{uint adtmp,numb;
uchar ii;
numb=0;
//i=0;
j=0;
P1=0x0f;
LCD_clear();
LCD_write_com(0x90); ///第二行显示温度
LCD_write_zfc("水位:");
LCD_write_com(0x96);
LCD_write_zfc("M");
LCD_write_com(0x82);
LCD_write_zfc("时间:");
EX0=0;
do{LCD_write_com(0x80);
ii=P0;
addrb(ii);
LCD_write_com(0x85);
timeb(Read1302(READ_HOUR)); //显示秒
LCD_write_zfc(":");
timeb(Read1302(READ_MINUTE)); //显示分钟
adtmp=ad_read(); //读取温度的数值
delay_ms(300);
if(adtmp>shangxian)
{write8512(0xf0,0x5d); //高速4V
bjbz=1;}
else
{
if(adtmp<xiaxian)
{write8512(0xd0,0x0d); //3V数模转换 write8512(0xf0,0x5d);write8512(0xe0,0xfb);
bjbz=1;} //判断温度是否在上下界限 外,是的话就报警标志位置1
else
{write8512(0xb0,0x0d); //3.5v中速
bjbz=0;} //每1秒检测一次
}
wendu(adtmp); ////////////////////////////////////////
/*i++;
if(i==200) //每秒钟记录一次
{ history[j]=adtmp;
thistory[j][1]=Read1302(READ_MINUTE);
thistory[j][0]=Read1302(READ_HOUR);
delay_us(4);
j++;
if(j==31){j=0;ij=1;}
i=0;}
delay_ms(400);*/
if(key_scan()==8)bjkz=~bjkz; //设定温度的扫描时间
}while(key_scan()==8|key_scan()==0);
keyX=keyY=0;
P1=0xf0;
EX0=1;
LCD_clear();
LCD_write_com(0x34); //使用扩充指令集
LCD_write_com(0x04); //第一行反白显示
LCD_write_com(0x30); //使用基本指令集
zhuping();
} //主菜单的标识
/************************主屏temp****************************/
void zhuping_temp()
{LCD_clear();
LCD_write_com(0x34); //使用扩充指令集
LCD_write_com(0x04); //第一行反白显示
LCD_write_com(0x30); //使用基本指令集
zhuping();
}
/***********************水位变化率*************************
void historydisplay(uchar temp,tmp) //temp 记录查询的条数 tmp 真实的条数
{uchar i,j;
i=temp/10;
j=temp%10;
LCD_clear();
LCD_write_com(0x80);
LCD_write_data(0x30+i);
LCD_write_data(0x30+j);
LCD_write_com(0x82);
LCD_write_zfc("时间:");
timeb(thistory[tmp][0]);
LCD_write_zfc(":");
timeb(thistory[tmp][1]);
LCD_write_com(0x90); ///第二行显示温度
LCD_write_zfc("水位:");
LCD_write_com(0x96);
LCD_write_zfc("M");
wendu(history[tmp]);
} */
void erro()
{uchar i,j,temp;
LCD_clear();
LCD_write_com(0x80);
LCD_write_zfc("水位变化率为:");
LCD_write_com(0x92);
if(sw>=sw1)
{temp=sw-sw1;LCD_write_zfc("+");}
else
{temp=sw1-sw;LCD_write_zfc("-");}
i=temp/10;
j=temp%10;
LCD_write_data(0x30+i);
LCD_write_data(0x30+j);
LCD_write_zfc("M");
while(key_scan()==0);
while(key_scan()!=8);
}
/***********************历史记录查询************************* **/
/*void select()
{char nub,i=1;
EX0=0;
if(ij)
{nub=j;
erro(30);
dog=apple;
dog=sweet;
historydisplay(i,nub);
do{if(key_scan()==1)
{nub=nub+1;
i++;
if(i>30)i=1;
if(nub>31)nub=0;
historydisplay(i,nub);
while(key_scan()==1);
}
if(key_scan()==2)
{nub=nub-1;
i--;
if(i<1)i=30;
if(nub<0)nub=30;
historydisplay(i,nub);
while(key_scan()==2);
}
}while(key_scan()!=8);
}
else
{erro(j);
historydisplay(i,nub);
do{if(key_scan()==1)
{nub=nub+1;
i++;
if(i>j)i=1;
if(nub>j+1)nub=0;
historydisplay(i,nub);
while(key_scan()==1);
}
if(key_scan()==2)
{nub=nub-1;
i--;
if(i<1)i=j;
if(nub<0)nub=j;
historydisplay(i,nub);
while(key_scan()==2);
}
}while(key_scan()!=8);
}
EX0=1;
}
**********************************设置成功***************************/
void adjsuccess()
{LCD_clear();
LCD_write_com(0x80);
LCD_write_zfc("设置成功");
delay_ms(700);
}
/***********************按键中断程序**************************/
/*功能:按键中断查询*/
void keysevice() interrupt 0
{uchar keytemp,temp,key_temp;
P1=0x0f; //送给P1…4低电平
delay_ms(1); //演示五秒消堵
temp=(P1&0x0f)^0x0f; //检测按键的序号
switch(temp) //根据按键的序列号开始相应的功能
{case 1 : //如果是
if(keyY==0&keyX<3&keyX>=0)
{if(keyX==0)keyX=2;
else keyX=keyX-1;}
keytemp=0;break; //功能表的运算法则
case 2 :
if(keyY==0&keyX<3&keyX>=0)
{if(keyX==2)keyX=0;
else keyX=keyX+1;}
keytemp=0;
break;
case 4 :
keyY=1;
keytemp=0;
break;
case 8 :
if(keyY==0)
{dog=apple;
dog=sweet;
desktop();}
else
keyY=0;
keytemp=0;
break;
case 3 :
keytemp=3;
break; //查询上下限
}
if(keytemp!=0)
{
if(keytemp==3)
{shangxiaxian();while(key_scan()!=8);desktop(); }
}
else{
key_temp=keyfunction[keyX][keyY];
switch (key_temp)
{case 0x00:
{zhuping_temp();
break;}
case 0x10:
{LCD_clear();
LCD_write_com(0x34); //使用扩充指令集
LCD_write_com(0x05); //第2行反白显示
LCD_write_com(0x30); //使用基本指令集
zhuping();
break;}
case 0x20:
{fuping();
break;}
case 0x01:
{ES=0;tadj();adjsuccess();ES=1;
zhuping_temp();
keyX=keyY=0;
break;}
case 0x11:
{LCD_clear();
ES=0;szsxx();adjsuccess();ES=1; //设置上下限模块
zhuping_temp();
keyX=keyY=0;
break;}
case 0x21:
{ES=0;erro();ES=1;
zhuping_temp();
keyX=keyY=0;
break;}
default:
{zhuping_temp();
keyX=keyY=0;
break;}
}
P1=0xf0; //送给P14高电平准备下一次的中断
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。