找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2197|回复: 0
打印 上一主题 下一主题
收起左侧

带有12864液晶的数字温度计

[复制链接]
跳转到指定楼层
楼主
ID:250103 发表于 2017-11-16 21:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**************************************************************************
程 序 名:数字温度计(基本)
编 写 者:杨范
指导老师:王韧
时   间 :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;                                                          
                        }
                                                                                                                                                                                                                          
                }
        }
}
       
                                                       

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表