⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 51单片机实现的温湿度采集监控
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include "LCD12864.h"
   3          #include "SHT10.h"
   4          #include "DS1302.h"
   5          #include <delay.h>
   6          #include<stdio.h>
   7          
   8          #define ADDR_YEAR 0x8d
   9          #define ADDR_MON  0x89
  10          #define ADDR_DATE 0x87
  11          #define ADDR_HOUR 0x85
  12          #define ADDR_MIN  0x83
  13          #define ADDR_SEC  0x81
  14          #define ADDR_DAY  0x8B
  15          
  16          #define POS_YEAR ADDR_LINE1+2
  17          #define POS_MON  ADDR_LINE1+4
  18          #define POS_DATE ADDR_LINE1+6
  19          #define POS_HOUR ADDR_LINE2
  20          #define POS_MIN  ADDR_LINE2+1
  21          #define POS_SEC  ADDR_LINE2+3
  22          #define POS_DAY  ADDR_LINE2+7 
  23          #define POS_TEMP ADDR_LINE3+5
  24          #define POS_HUMI ADDR_LINE4+5
  25          
  26          #define SEC  0
  27          #define MIN  1
  28          #define HOUR 2
  29          #define DATE 3
  30          #define MON  4
  31          #define DAY  5
  32          #define YEAR 6  
  33          
  34          float idata     humiLimit = 80;         //温湿度上限
  35          float idata     tempLimit = 28;
  36          
  37          sbit buzzer=P2^5;
  38          uchar idata sysData[7]={0x00,0x00,0x00,0x31,0x10,0x05,0x08};//DS1302数据(BCD码)
  39          float tempf,humif;
  40          uchar idata temps[5],humis[5];
  41          uchar code MonSheet[2][19]={0,0x31,0x28,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0,0,0,0,0,0,0x31,0x30,0x31,
  42                                            0,0x31,0x29,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0,0,0,0,0,0,0x31,0x30,0x31};
  43          
  44          
  45          bit flagSettings,pFlagSettings,flagInc,flagDec,flagInc10,flagDec10; //依次为系统设置标志位,前次系统设置标
             -志位,加标志位,减标志位(长按加标志位,长按减标志位,实现长按加减10的功能,尚未实现)
  46          bit n;
  47          uchar m;
  48          uchar flagOpt;                                                                  //选项的标志位,0-8,对应9项数据
  49          
  50          sbit key1=P2^2;
  51          sbit key2=P2^3;
  52          sbit key3=P2^4;
  53          
  54          uint SHTcount,blinkCount;
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 2   

  55          /********************************************************************
  56          函数名称:keyscan 
  57          功      能:按键监测,分长按短按(用定时器实现),长按时间为1秒,按键1短按返回11,长按返
  58                          回12,按键2短按返回21,长按返回22,以此类推,同时改变按键对应
  59                          的标志位
  60          入口参数:无
  61          返回参数:a
  62          ********************************************************************/
  63          int keyscan()
  64          {
  65   1              unsigned char a;
  66   1              if(key1==0)
  67   1              {
  68   2                      delay(5);
  69   2                      if(key1==0)
  70   2                      {
  71   3                              TR0=1;
  72   3                                      
  73   3                      }
  74   2                      while(!key1);
  75   2                      delay(5);
  76   2                      while(!key1);
  77   2                      if(n==0)
  78   2                      {
  79   3                              if(flagSettings==1)
  80   3                              {
  81   4                                      flagOpt++;
  82   4                                      if(flagOpt==9)
  83   4                                      flagOpt=0;
  84   4                              }
  85   3                                      a=11;
  86   3                                      m=0;
  87   3                                      TR0=0;
  88   3      
  89   3                      }
  90   2                      else if(n==1)
  91   2                      {       
  92   3                              flagSettings=~flagSettings;             //系统设置的标志位,1进入系统设置,0退出
  93   3                              flagOpt=0;
  94   3                              LcdClear();
  95   3                              a=12;
  96   3                              n=0;
  97   3                              m=0;
  98   3                              TR0=0;
  99   3                      }
 100   2              }
 101   1              if(key2==0)
 102   1              {
 103   2                      delay(5);
 104   2                      if(key2==0)
 105   2                      {
 106   3                              TR0=1;
 107   3              
 108   3                      }
 109   2                      while(!key2);
 110   2                      delay(5);
 111   2                      while(!key2);
 112   2                      if(n==0)
 113   2                      {
 114   3                              if(flagSettings==1)
 115   3                                      flagInc=1;
 116   3                              a=21;
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 3   

 117   3                              m=0;
 118   3                              TR0=0;
 119   3      
 120   3                      }
 121   2                      else if(n==1)
 122   2                      {       
 123   3                              flagInc10=1;
 124   3                              a=22;
 125   3                              n=0;
 126   3                              m=0;
 127   3                              TR0=0;
 128   3                      }
 129   2              }
 130   1              if(key3==0)
 131   1              {
 132   2                      delay(5);
 133   2                      if(key3==0)
 134   2                      {
 135   3                              TR0=1;
 136   3                                      
 137   3                      }
 138   2                      while(!key3);
 139   2                      delay(5);
 140   2                      while(!key3);
 141   2                      if(n==0)
 142   2                      {
 143   3                              if(flagSettings==1)
 144   3                                      flagDec=1;
 145   3                              a=31;
 146   3                              m=0;
 147   3                              TR0=0;
 148   3      
 149   3                      }
 150   2                      else if(n==1)
 151   2                      {       
 152   3                              flagDec10=1;
 153   3                              a=32; 
 154   3                              n=0;
 155   3                              m=0;
 156   3                              TR0=0;
 157   3                      }
 158   2              }
 159   1              return a;
 160   1      }
 161          
 162          void timer0() interrupt 1 using 3
 163          {
 164   1              TH0=(65536-10000)/256;
 165   1              TL0=(65536-10000)%256;
 166   1              m++;
 167   1              if(m==100)
 168   1              {
 169   2                      m=0;
 170   2                      n=1;
 171   2              }
 172   1      }
 173          /********************************************************************
 174          函数名称:Display***()
 175          功      能:显示年月日星期时分秒
 176          入口参数:无
 177          返回参数:无
 178          ********************************************************************/
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 4   

 179          
 180          
 181          void DisplayYear()
 182          {
 183   1              WriteCmd12864(POS_YEAR);
 184   1              WriteData12864(sysData[YEAR]/16+0x30);
 185   1              WriteData12864(sysData[YEAR]%16+0x30);
 186   1      }
 187          void DisplayMon()
 188          {
 189   1              WriteCmd12864(POS_MON);
 190   1              WriteData12864(sysData[MON]/16+0x30);
 191   1              WriteData12864(sysData[MON]%16+0x30);
 192   1      }
 193          void DisplayDate()
 194          {
 195   1              WriteCmd12864(POS_DATE);
 196   1              WriteData12864(sysData[DATE]/16+0x30);
 197   1              WriteData12864(sysData[DATE]%16+0x30);
 198   1      }
 199          void DisplayHour()
 200          {
 201   1              WriteCmd12864(POS_HOUR);
 202   1              WriteData12864(sysData[HOUR]/16+0x30);
 203   1              WriteData12864(sysData[HOUR]%16+0x30);
 204   1      }
 205          void DisplayMin()
 206          {
 207   1              WriteCmd12864(POS_MIN);
 208   1              WriteData12864(0x3A);
 209   1              WriteData12864(sysData[MIN]/16+0x30);
 210   1              WriteData12864(sysData[MIN]%16+0x30);
 211   1              WriteData12864(0x3A);
 212   1      }
 213          void DisplaySec()
 214          {
 215   1              WriteCmd12864(POS_SEC);
 216   1              WriteData12864(sysData[SEC]/16+0x30);
 217   1              WriteData12864(sysData[SEC]%16+0x30);
 218   1      }      
 219          
 220          void DisplayDay()
 221          {
 222   1              switch (sysData[DAY])   
 223   1              {
 224   2                      case 1: Display12864(POS_DAY,"一"); break;
 225   2                      case 2: Display12864(POS_DAY,"二"); break;
 226   2                      case 3: Display12864(POS_DAY,"三"); break;
 227   2                      case 4: Display12864(POS_DAY,"四"); break;
 228   2                      case 5: Display12864(POS_DAY,"五"); break;
 229   2                      case 6: Display12864(POS_DAY,"六"); break;
 230   2                      case 7: Display12864(POS_DAY,"日"); break;
 231   2                      default: break;
 232   2              }
 233   1      }
 234          /********************************************************************
 235          函数名称:DisplayFrame() 
 236          功      能:初试显示,仅在flagsettings发生变化的时候调用
 237          入口参数:无
 238          返回参数:无
 239          ********************************************************************/
 240          
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 5   

 241          
 242          
 243          void DisplayFrame()
 244          {
 245   1              Display12864(ADDR_LINE1+3,"年");
 246   1              Display12864(ADDR_LINE1+5,"月");
 247   1              Display12864(ADDR_LINE1+7,"日");
 248   1              Display12864(ADDR_LINE2+5,"星期");
 249   1              
 250   1              DisplayYear();
 251   1              DisplayMon();
 252   1              DisplayDate();
 253   1              DisplayHour();
 254   1              DisplayMin();
 255   1              DisplaySec();
 256   1              DisplayDay();
 257   1      
 258   1      
 259   1              if(flagSettings==0)                              //监视状态显示当前温湿度的字样,设置状态显示要设置的报警温湿度的字样
 260   1              {
 261   2                      Display12864(ADDR_LINE3,"当前温度:");
 262   2                      Display12864(ADDR_LINE4,"当前湿度:");
 263   2              }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -