/**************************************************************************
程 序 名:數字溫度計(基本)
編 寫 者:楊范
指導老師:王韌
時 間 :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;
}
}
}
}
|