標題: 帶有12864液晶的數(shù)字溫度計 [打印本頁]

作者: 12323ff    時間: 2017-11-16 21:45
標題: 帶有12864液晶的數(shù)字溫度計
/**************************************************************************
程 序 名:數(shù)字溫度計(基本)
編 寫 者:楊范
指導(dǎo)老師:王韌
時   間 :2016.12.20
班   級        :自卓1401班
功   能 :DS18B20顯示溫度
使用說明:將單片機的P2口用杜邦線線連于液晶的數(shù)據(jù)總線(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處理后數(shù)據(jù)存放數(shù)組
sbit fmq=P0^0;

extern uchar  disp_temp[9];        //DS18B20處理后數(shù)據(jù)存放數(shù)組
extern int shangxian,xiaxian;        //報警溫度上下限
extern int wendu;

uchar shangfenchai[5];                 //報警上限處理后數(shù)據(jù)存放數(shù)組
uchar xiafenchai[5];                 //報警下限處理后數(shù)據(jù)存放數(shù)組


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;
                }
        }
}


/***************  以下為主函數(shù)  *****************/
void main()
{
        uchar v,i;
        uchar shangxian1,zancun;        //調(diào)節(jié)溫度上下限暫存所用
        shangxian=30;                                //報警溫度上限初賦值
        xiaxian=27;                                        //報警溫度下限初賦值
        lcd12864_init();
        Delay(10);
        lcd12864_display(1,2,"湖南工學(xué)院");
        lcd12864_display(2,3,"電信學(xué)院");
        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,"數(shù)\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,"現(xiàn)在室內(nèi)溫度");
                                                                                                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 調(diào)上限B 調(diào)下限");                                                                                               
                                                                                                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,"設(shè)置報警上限");
                                                          lcd12864_display(2,1,"您將輸入:0~255");   //設(shè)置報警上限
                                                          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,"設(shè)置報警上限");
                                                                                                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,"設(shè)置報警下限");                    //          設(shè)置報警下限
                                                          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,"設(shè)置報警下限");
                                                                                                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;                                                          
                        }
                                                                                                                                                                                                                          
                }
        }
}
       
                                                       






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1