📄 main.c
字号:
#include<head.h>
//#include<reg51.h>
//#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
//======================================================================================
#define keyport P2
code uchar fuhu[]="我们还能不能见面 我在佛前求了几千年 让我再吻一吻你的脸";
code uchar num[]="如果有一天失去了信心 就好比我们失去了一条腿";
code uchar lled[]="我们都是好孩子 善良的好孩子";
code uchar number[]="为了你 我变成狼人摸样 为了你 染上了疯狂 为了你穿上厚厚的伪装";
//====================水位显示==============
code uchar zhongwen[]="现在测量得的水位";
code uchar shuzi[]="0123456789";
code uchar zifu[]="厘米";
code uchar kai_fa[]="开阀状态: ";
code uchar guan_fa[]="关阀状态: ";
code uchar kaiguan[]="关开";
extern int keyvalue;
ulong Pinlv;
uint Hign_shui;
uint f_h,yichu_count,count_over;
//====================================================================================================
//====================频率表=============================================================================
code ulong pin_lv[]={855,1034,1244,1421,1594,1706,1824,1931,2010,2092,2166,2222,2285,
2335,2385,2416,2458,2499,2511,2533,2557,2561,2584,2596,2607,2618,2630,
2643,2653,2664,2670,2680,2687,2692,2695,2705,2707,2712,2717};
//=======================================================================================================
///============水位表===========================================================
code uint Hign[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//================================================================================
unsigned long get_f();
void delay22(unsigned long i)
{
while(--i);
}
void display_jianzhi()
{
shift_164(keyvalue%10);
shift_164(keyvalue/10);
shift_164(0xff);
shift_164(0xff);
shift_164(0xff);
shift_164(0xff);
shift_164(0xff);
shift_164(0xff);
}
void delay11(uint i)
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<500;k++);
}
//=========================频率判断
pinlv_panduan()
{
ulong idata x,y,i,k,a,dat;
x=pin_lv[i];
y=pin_lv[i+1];
//y=pin_lv[i+2];
//x=Hign_shui;
if((x<Pinlv)&(Pinlv<y))
{
k=((Pinlv-x)*3)/5;
a=((y-Pinlv)*3)/5;
k=x+k;
a=y-a;
if((Pinlv-k)>(a-Pinlv)) dat=x;
else dat=y;
}
return(dat);
}
//===========================取水位高度=========
get_Hign()
{
uint idata i,num,num11,dat;
num=Hign[i];
num11=pinlv_panduan();
if(num==num11) dat=num;
I2cByteWrite_24C64(0xa0,0x00,dat);
udelay(100);
return(dat);
}
//=============液晶显示水位=====================
void display_shuiwei()//加水显示
{
ulong idata number,n1,n2;
number=get_Hign();
n1=number%10;
n2=number/10;
display_strword(0,0,zhongwen);
display_oneword(4,1,shuzi[n2],shuzi[n1]);
display_oneword(5,1,zifu);
display_strword(0,2,kai_fa);
disponechar(6,2,kaiguan,0);
display_strword(0,3,guan_fa);
disponechar(6,3,kaiguan,1);
}
void display_shuiwei11()//关水显示
{
ulong idata number,n1,n2;
number=get_Hign();
n1=number%10;
n2=number/10;
display_strword(0,0,zhongwen);
display_oneword(4,1,shuzi[n2],shuzi[n1]);
display_oneword(5,1,zifu);
display_strword(0,2,kai_fa);
disponechar(6,2,kaiguan,1);
display_strword(0,3,guan_fa);
disponechar(6,3,kaiguan,0);
}
void display_shuiwei22()//关水显示
{
ulong idata number,n1,n2;
number=get_Hign();
n1=number%10;
n2=number/10;
display_strword(0,0,zhongwen);
display_oneword(4,1,shuzi[n2],shuzi[n1]);
display_oneword(5,1,zifu);
display_strword(0,2,kai_fa);
disponechar(6,2,kaiguan,0);
display_strword(0,3,guan_fa);
disponechar(6,3,kaiguan,0);
}
//===============加水程序===============
void jia_shui()
{}
//===================减水程序==========
void jian_shui()
{}
//===============================键盘控制水位
void key_change_xianshi()
{
switch(keyvalue)
{
case 5: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<5)
{
jia_shui();
display_shuiwei();
while(Hign_shui<5);
}
if(Hign_shui>5)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>5);
}
if(Hign_shui==5) display_shuiwei22();
break;
case 6: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<6)
{
jia_shui();
display_shuiwei();
while(Hign_shui<6);
}
if(Hign_shui>6)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>6);
}
if(Hign_shui==6) display_shuiwei22();
break;
case 7:
display_jianzhi();
clear_disppanel();
//display_shuiwei();
if(Hign_shui<7)
{
jia_shui();
display_shuiwei();
while(Hign_shui<7);
//display_strword(0,3,zhongwen);
}
if(Hign_shui>7)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>7);
}
if(Hign_shui==7) display_shuiwei22();
break;
case 8: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<8)
{
jia_shui();
display_shuiwei();
while(Hign_shui<8);
}
if(Hign_shui>8)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>8);
}
if(Hign_shui==8) display_shuiwei22();
break;
case 9: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<9)
{
jia_shui();
display_shuiwei();
while(Hign_shui<9);
}
if(Hign_shui>9)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>9);
}
if(Hign_shui==9) display_shuiwei22();
break;
case 10: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<10)
{
jia_shui();
display_shuiwei();
while(Hign_shui<10);
}
if(Hign_shui>10)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>10);
}
if(Hign_shui==10) display_shuiwei22();
break;
case 11: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<11)
{
jia_shui();
display_shuiwei();
while(Hign_shui<11);
}
if(Hign_shui>11)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>11);
}
if(Hign_shui==11) display_shuiwei22();
break;
case 12: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<12)
{
jia_shui();
display_shuiwei();
while(Hign_shui<12);
}
if(Hign_shui>12)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>12);
}
if(Hign_shui==12) display_shuiwei22();
break;
case 13: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<13)
{
jia_shui();
display_shuiwei();
while(Hign_shui<13);
}
if(Hign_shui>13)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>13);
}
if(Hign_shui==13) display_shuiwei22();
break;
case 14: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<14)
{
jia_shui();
display_shuiwei();
while(Hign_shui<14);
}
if(Hign_shui>14)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>14);
}
if(Hign_shui==14) display_shuiwei22();
break;
case 15: display_jianzhi();
clear_disppanel();
display_shuiwei();
if(Hign_shui<15)
{
jia_shui();
display_shuiwei();
while(Hign_shui<15);
}
if(Hign_shui>15)
{
jian_shui();
display_shuiwei11();
while(Hign_shui>15);
}
if(Hign_shui==15) display_shuiwei22();
break;
default: //display_jianzhi();
//delay11(200);
break;
}
}
void setto_12864()
{
while(kbscan()!=15)
{
key_change_xianshi();
}
}
main()
{
reset_lcd();
clear_disppanel();
while(1)
{
reset_lcd();
Pinlv=get_f();//外部取频率
pinlv_panduan();//判断频率
get_Hign();//取对应频率的水的高度
I2cByteRead_24C64(0xa0,0x00);//从24C64读出水位
display_shuiwei(); //显示水位
keyport=0xf0;
if(keyport-0xf0)//对有按键的处理
{
kbscan();
Hign_shui=get_Hign();
display_jianzhi();
setto_12864();
delay11(2);
}
}
}
void intt1_time()interrupt 3//T1作为门控时间产生器200US中断一次
{
if (yichu_count>=50000)//50000
{
TR0=0;//频率停止计数
TR1=0;//时间停止计数
EA=0;//关中断
count_over=1;
yichu_count=0;
return;
}
yichu_count=yichu_count+1;
}
unsigned long get_f()
{
unsigned long f;
count_over=0;
TMOD=0X25;
TH1=TL1=0X38;//设置T1计数初值,可以100US中断一次
f_h=TH0=TL0=0;//频率值清零
count_over=0;//清零计数完成标志
EA=1;//开所有中断
ET0=1;
ET1=1;
TR0=1;//频率计数器开始计数
TR1=1;//时间计数器开始计时
wait_count_over:
if(count_over!=1)
goto wait_count_over;
f=(TL0+TH0*256+f_h*65535)/5;
return (f);
}
//******************************测频率子程序*******************/
//******************************测频率子程序*******************
void intt0_f()interrupt 1//T0作为频率值最高八位,频率值共24位
{
f_h=f_h+1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -