📄 改进程序.c
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uint c=340;
ulong l,time;
char i=1,j=1,k=80,aa;
char t,tp=10,ts,tg,lb,ls,lg,lsf,fh,cb,cs,cg;
sbit RW=P2^1;
sbit RS=P2^0;
sbit E=P2^2;
sbit rece=P3^3;
sbit k2=P1^1;
sbit k1=P1^0;
sbit k3=P1^2;
sbit k4=P1^3;
sbit sg=P3^7;
sbit ctl=P3^5;
void delay(uint i) //延时程序//
{while(i--);
}
//************液晶显示***************//
void writercom(uchar q) //写命令//
{E=1;
RS=0;
RW=0;
P0=q;
E=0;
delay(20);
}
void writerdata(uchar o)//写数据//
{
E=1;
RS=1;
RW=0;
P0=o;
E=0;
delay(20);
}
void writer_d(uchar *u)//写数据串//
{while(*u)
writerdata(*u++);
}
void xsinit(void)
{writercom(0x01);
writercom(0x38);//使用8位数据,显示两行,使用5*7的字型//
writercom(0x0c);//显示设置,不显示光标,字符不显闪琐//
writercom(0x06);//光标从左往右移,内容不移//
}
/**************温度输入程序***********************/
void inptt()
{while(1)
{if(k2==0){tp++;if(tp>=99)tp=99;}
delay(7000);
if(k1==0){tp--;if(tp<=(-30))tp=(-30);}
delay(7000);
t=tp;
if(t<0){fh=0x2d;t=~t+1;}
else{fh=0x20;}
ts=t/10;
tg=t%10;
writercom(0x80);
writer_d(" T:");
writerdata(fh);
writerdata(ts+0x30);
writerdata(tg+0x30);
writerdata(0xdf);
writer_d("C ");
writercom(0xba);
writer_d("Press K4 finish ");
if(k4==0)break;
}
}
//**********超声波发射程序**************************//
void sen() //超声波发射程序//
{uchar times=0;
TMOD=0x12; //定时器1工作在定时方式1,定时器0工作在定时方式2//
IE=0x84; //中断设置//
TH0=244;
TL0=244;
TR0=1;
TR1=1; //开定时器//
while(1)
{while(TF0==0);
sg=~sg;
times++; //翻转20次,发送10个脉冲信号的超声波//
TF0=0;
if(times==20)break;}
TR0=0;
times=0;
}
//**********外中断服务程序******************************//
rec()interrupt 2 using 2//接收中断程序//
{TR1=0; //关计数器//
ctl=0;
time=TH1*256+TL1; //算出t的值,t的单位为us//
l=time*c/2;
TH1=0;
TL1=0;
}
//************数据处理,显示结果***************//
void dataxs()
{if(tp>=10)c=338+(tp-10)*0.6;
else c=338+(10-tp)*0.6;
cb=c/100;
cs=c%100/10;
cg=c%100%10;
lb=l/1000000;
ls=l%1000000/100000;
lg=l%1000000%100000/10000;
/******显示********/
writercom(0x80);
if(l<=130000)writer_d("too near! ");
else if(l>=5000000)writer_d("too long! ");
else {writer_d("L=");
writerdata(lb+0x30);
writerdata('.');
writerdata(ls+0x30);
writerdata(lg+0x30);
writer_d("m ");
writer_d("c=");
writerdata(cb+0x30);
writerdata(cs+0x30);
writerdata(cg+0x30);
writer_d("m/s ");
}
}
//****状态1,手动控制******************//
void unauto()
{while(i)
{while(k--)
{writercom(0xba);
writer_d("Press K4 measure");
if(k4==0||k3==0){i=0;break;}
delay(2000);}
k=20;
while(k--)
{writercom(0xba);
writer_d(" ");
if(k4==0||k3==0){i=0;break;}
delay(2000);}
k=20;
}
i=1;
ctl=0;
sen();//调超声波发射程序;
delay(50);
ctl=1;
}
//****状态2,实时监控******************//
void aut()
{writercom(0xba);
writer_d("real time measur");
ctl=0;
sen();
delay(50);
ctl=1;
}
//*****状态选择************************//
ztxz()
{while(k3==0&&aa==0)
{while(1)
{if(k3==1)break;}
aa=1;
}
while(k3==0&&aa==1)
{while(1)
{if(k3==1)break;}
aa=0;
}
}
//********主程序*******************//
main()
{xsinit();
inptt();//温度输入//
while(1)
{while(!aa)
{unauto();
break;
}
while(aa)
{aut();
break;
}
while(k--)//等待回波//
{ztxz();//状态切换键判断
delay(2000);
}
k=20;
dataxs();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -