一、系统方案
1、本设计采用这51单片机作为主控器。
2、MPX4115采集压力值、DS18B20采集温度值送到液晶1602显示。
3、按键设置报警值。
4、蜂鸣器报警。
二、硬件设计
原理图如下:
三、单片机软件设计
1、首先是系统初始化
/*******************************************************************
液晶初始化
*****************************************************************/
void chushihua()
{
delayxms(20); //给液晶一段时间
en=0;
xiemingling(0x38);//设置162显示,57点阵,8位数据接口
delayxms(20);
xiemingling(0x38);//
delayxms(20);
xiemingling(0x0c);//设置开显示,不显示光标
delayxms(20);
xiemingling(0x06);//写一个字符后地址指针加1
delayxms(20);
xiemingling(0x01);//显示清零,数据指针清零
delayxms(20);
xiemingling(0x80);//指定字符显示的实际地址,,,显示位置的确定方法规定为”80H+地址码x”
delayxms(20);
}
2、液晶显示程序
//毫秒
void delayxms(uint ms) //延时 x ms
{
uint a,j;
for(a=0;a for(j=0;j }
/*******************************************************************
写命令
/
void xiemingling(unsigned char mingling)
{
en=0;
rs=0;
rw=0;
P0=mingling;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
/
写数据
/
void xieshuju(unsigned char shuju)
{
en=0;
rs=1;
rw=0;
P0=shuju;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
3、按键程序
//
// 按键扫描
/*************************************/
void key()
{
if(key5==0)
{
delay(10);
if(key5==0)
{
while(!key5);
c1=c;
temp1=temp;
}
}
if(key6==0)
{
delay(10);
if(key6==0)
{
while(!key6);
mode=!mode;
chushihua(); //LCD1602初始化
}
}
if(key1==0)
{
delay(10);
if(key1==0)
{
while(!key1);
h++;
if(h>1000) h=1000;
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
while(!key2);
if(h>=1) h--;
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
while(!key3);
l++;
if(l>1000) l=1000;
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
while(!key4);
if(l>=1) l--;
}
}
}
4、核心算法程序
void main(void)
{
chushihua(); //LCD1602初始化
while(1)
{
key();
getdata=Adc0832(0);
check_wendu();
if(0 {
int vary=getdata;
press=((10.0/23.0)vary)+9.3;
temp=(int)(press10);
dispbuf[3]=temp/1000; //取压力值百位
dispbuf[2]=(temp%1000)/100; //取压力值十位
dispbuf[1]=((temp%1000)%100)/10; //取压力值个位
dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位
if(temp/10h){led1=1;led2=0;beep=0;}
else {led1=1;led2=1;beep=1;}
}
if(mode==0)
{
xiemingling(0x80+0);
xieshuju('Q');
xieshuju(':');
xieshuju(dispbuf[3]+0x30);
xieshuju(dispbuf[2]+0x30);
xieshuju(dispbuf[1]+0x30);
xieshuju('.');
xieshuju(dispbuf[0]+0x30);
xieshuju(' ');
xieshuju('T');
xieshuju(':');
xieshuju(c/1000+0x30);
xieshuju(c%1000/100+0x30);
xieshuju(c%1000%100/10+0x30);
xieshuju('.');
xieshuju(c%10+0x30);
xiemingling(0x80+0x40);
xieshuju('H');
xieshuju(':');
xieshuju(h/100+0x30);
xieshuju(h%100/10+0x30);
xieshuju(h%10+0x30);
xieshuju(' ');
xieshuju('L');
xieshuju(':');
xieshuju(l/100+0x30);
xieshuju(l%100/10+0x30);
xieshuju(l%10+0x30);
}
else
{
xiemingling(0x80+0);
xieshuju('R');
xiemingling(0xC0+0);
xieshuju('Q');
xieshuju(':');
xieshuju(temp1/1000+0x30);
xieshuju(temp1%1000/100+0x30);
xieshuju(temp1%1000%100/10+0x30);
xieshuju('.');
xieshuju(temp1%10+0x30);
xieshuju(' ');
xiemingling(0xC0+0);
xieshuju('Q');
xieshuju(':');
xieshuju(temp1/1000+0x30);
xieshuju(temp1%1000/100+0x30);
xieshuju(temp1%1000%100/10+0x30);
xieshuju('.');
xieshuju(temp1%10+0x30);
xieshuju(' ');
xieshuju('T');
xieshuju(':');
xieshuju(c1/1000+0x30);
xieshuju(c1%1000/100+0x30);
xieshuju(c1%1000%100/10+0x30);
xieshuju('.');
xieshuju(c1%10+0x30);
}
}
}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定服务器托管网的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
服务器托管,北京服务器托管,服务器租用 http://服务器托管网www.fwqtg.net
文章目录 文章专栏 前言 Halcon文档 Halcon基础案例文档 英语阅读建议 结论 文章专栏 Halcon开发 前言 在我完成上一篇代码,halcon基础窗口事件写完了之后,我已经基本掌握了如何写一个简单的halcon程序。后面我学习新的知识的时候感觉遇…