/**************************************************************************
程 序 名:数字温度计(基本)
编 写 者:杨范
指导老师:王韧
时 间 :2016.12.20
班 级 :自卓1401班
功 能 :DS18B20显示温度
使用说明:将单片机的P2口用杜邦线线连于液晶的数据总线(P20--D0...P27--D7),
点阵E连至P37,点阵RW连至P36,点阵RS连至P35,DS18B20接于P3^3
********************************************************************************/
#include<reg52.h>
#include"lcd12864.h"
#include"delay.h"
#include<intrins.h>
#include"ds18b20.h"
#include"key_hl.h"
#define uchar unsigned char
#define uint unsigned int
//uchar disp_temp[9]; //DS18B20处理后数据存放数组
sbit fmq=P0^0;
extern uchar disp_temp[9]; //DS18B20处理后数据存放数组
extern int shangxian,xiaxian; //报警温度上下限
extern int wendu;
uchar shangfenchai[5]; //报警上限处理后数据存放数组
uchar xiafenchai[5]; //报警下限处理后数据存放数组
void xianshi()
{
shangfenchai[0]=shangxian/100+'0';
shangfenchai[1]=shangxian/10%10+'0';
shangfenchai[2]=shangxian%10+'0';
shangfenchai[3]=0x20;
xiafenchai[0]=xiaxian/100+'0';
xiafenchai[1]=xiaxian/10%10+'0';
xiafenchai[2]=xiaxian%10+'0';
xiafenchai[3]=0x20;
if(shangfenchai[0]=='0') //去掉最高位的0
{
shangfenchai[0]=0x20;
if(shangfenchai[1]=='0')
{
shangfenchai[1]=0x20;
}
}
if(xiafenchai[0]=='0') //去掉最高位的0
{
xiafenchai[0]=0x20;
if(xiafenchai[1]=='0')
{
xiafenchai[1]=0x20;
}
}
}
/*************** 以下为主函数 *****************/
void main()
{
uchar v,i;
uchar shangxian1,zancun; //调节温度上下限暂存所用
shangxian=30; //报警温度上限初赋值
xiaxian=27; //报警温度下限初赋值
lcd12864_init();
Delay(10);
lcd12864_display(1,2,"湖南工学院");
lcd12864_display(2,3,"电信学院");
lcd12864_display(3,3,"自卓1401班");
lcd12864_display(4,4,"杨范");
Delay(2000);
lcd12864_write_command(0x01);
Delay(10);
while(1)
{
top:while(v!=0x48)
{
lcd12864_display(1,2,"数\xfd字温度计");
lcd12864_display(3,2,"P.确定进入?");
v=keyscan();
}
lcd12864_write_command(0x01);
if(v==0x48)
{
switch(v)
{
Delay(10);
case 0x48:if(v==0x48)
{
v=keyscan();
while(v!=0x18&&v!=0x48&&v!=0x88)
{
lcd12864_display(1,4,"确认");
lcd12864_display(3,2,"是 否 ");
v=keyscan();
}
switch(v)
{
case 0x48:if(v==0x48)
{
fmq=1;
lcd12864_init();
Delay(1);
lcd12864_display(1,1,"现在室内温度");
lcd12864_display(2,5,"℃");
xianshi();
lcd12864_display(3,1,"上限");
lcd12864_display(3,3,shangfenchai);
lcd12864_display(3,5,"下限");
lcd12864_display(3,7,xiafenchai);
lcd12864_display(4,1,"A 调上限B 调下限");
while(v==0x48||v==0x00||v==0x11||v==0x21||v==0x41||v==0x81||
v==0x12||v==0x22||v==0x42||v==0x82||v==0x14||v==0x24)
{
v=keyscan();
get_temperature();
if(wendu>=xiaxian&&wendu<=shangxian)
{
fmq=1;
}
if(wendu<xiaxian||wendu>shangxian)
{
fmq=0;
}
lcd12864_display(2,1,disp_temp);
for(i=0;i<250&&((v==0x48||v==0x00||v==0x11||v==0x21||v==0x41||v==0x81||
v==0x12||v==0x22||v==0x42||v==0x82||v==0x14||v==0x24));i++)
{
Delay(1);
v=keyscan();
}
}
}
}
}
case 0x18:if(v==0x18)
{
fmq=1;
v=keyscan();
lcd12864_write_command(0x01);
break;
}
case 0x88:if(v==0x88)
{
fmq=1;
v=keyscan();
lcd12864_write_command(0x01);
goto top;
}
case 0x44:if(v==0x44)
{
lcd12864_init();
lcd12864_display(1,2,"设置报警上限");
lcd12864_display(2,1,"您将输入:0~255"); //设置报警上限
lcd12864_display(4,1,"S15 确定S14 归零");
lcd12864_write_command(0x88);
shangxian1=0;
while(v!=0x48)
{
v=keyscan( );
switch(v)
{
case 0x11:zancun=0;
lcd12864_write_data('0');
shangxian1=shangxian1*10+zancun;
break;
case 0x21:zancun=1;
lcd12864_write_data('1');
shangxian1=shangxian1*10+zancun;
break;
case 0x41:zancun=2;
lcd12864_write_data('2');
shangxian1=shangxian1*10+zancun;
break;
case 0x81:zancun=3;
lcd12864_write_data('3');
shangxian1=shangxian1*10+zancun;
break;
case 0x12:zancun=4;
lcd12864_write_data('4');
shangxian1=shangxian1*10+zancun;
break;
case 0x22:zancun=5;
lcd12864_write_data('5');
shangxian1=shangxian1*10+zancun;
break;
case 0x42:zancun=6;
lcd12864_write_data('6');
shangxian1=shangxian1*10+zancun;
break;
case 0x82:zancun=7;
lcd12864_write_data('7');
shangxian1=shangxian1*10+zancun;
break;
case 0x14:zancun=8;
lcd12864_write_data('8');
shangxian1=shangxian1*10+zancun;
break;
case 0x24:zancun=9;
lcd12864_write_data('9');
shangxian1=shangxian1*10+zancun;
break;
case 0x28:lcd12864_init();
lcd12864_display(1,2,"设置报警上限");
lcd12864_display(2,1,"您将输入:0~255");
lcd12864_display(4,1,"S15 确定S14 归零");
lcd12864_write_command(0x88);
shangxian1=0;
}
}
shangxian=shangxian1;
break;
}
case 0x84:if(v==0x84)
{
lcd12864_init();
lcd12864_display(1,2,"设置报警下限"); // 设置报警下限
lcd12864_display(2,1,"您将输入:0~255");
lcd12864_display(4,1,"S15 确定S14 归零");
lcd12864_write_command(0x88);
shangxian1=0;
while(v!=0x48)
{
v=keyscan( );
switch(v)
{
case 0x11:zancun=0;
lcd12864_write_data('0');
shangxian1=shangxian1*10+zancun;
break;
case 0x21:zancun=1;
lcd12864_write_data('1');
shangxian1=shangxian1*10+zancun;
break;
case 0x41:zancun=2;
lcd12864_write_data('2');
shangxian1=shangxian1*10+zancun;
break;
case 0x81:zancun=3;
lcd12864_write_data('3');
shangxian1=shangxian1*10+zancun;
break;
case 0x12:zancun=4;
lcd12864_write_data('4');
shangxian1=shangxian1*10+zancun;
break;
case 0x22:zancun=5;
lcd12864_write_data('5');
shangxian1=shangxian1*10+zancun;
break;
case 0x42:zancun=6;
lcd12864_write_data('6');
shangxian1=shangxian1*10+zancun;
break;
case 0x82:zancun=7;
lcd12864_write_data('7');
shangxian1=shangxian1*10+zancun;
break;
case 0x14:zancun=8;
lcd12864_write_data('8');
shangxian1=shangxian1*10+zancun;
break;
case 0x24:zancun=9;
lcd12864_write_data('9');
shangxian1=shangxian1*10+zancun;
break;
case 0x28:lcd12864_init();
lcd12864_display(1,2,"设置报警下限");
lcd12864_display(2,1,"您将输入:0~255");
lcd12864_display(4,1,"S15 确定S14 归零");
lcd12864_write_command(0x88);
shangxian1=0;
}
}
xiaxian=shangxian1;
break;
}
default:v=keyscan();
break;
}
}
}
}
|