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

📄 timer_thermometer_12864.lst

📁 用单片机实现的温度检测 是整个电路的代码调试
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   TIMER_THERMOMETER_12864                                               03/22/2007 10:01:19 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TIMER_THERMOMETER_12864
OBJECT MODULE PLACED IN Timer_thermometer_12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Timer_thermometer_12864.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //时钟和温度显示程序.制作:№→蓝海啸浪 404530302
   2          //用T0中断定时,DS18B20测温,12864完成显示.原创
   3          #include<reg52.h>
   4          //#include<math.h>
   5          #include<Write_12864.h>
   6          #include<DB_12864.h>
   7          #include<Read_DS18b20.h>
   8          #define SETUP   0x0FE
   9          #define LEFT    0x0FB
  10          #define UP      0x0F7
  11          #define DOWN    0x0EF
  12          #define RIGHT   0x0DF
  13          #define ENTER   0x07F
  14          #define CANCEL  0x0BF
  15          #define CLEAR   0x0FD
  16          #define TCONST  49970
  17          unsigned char   *p;                     //显示程序查表指针
  18          unsigned char   *pdt;           //时间日期显示区指针
  19          unsigned char   secf=0;         //秒闪标志
  20          unsigned char   DTBUF[7]={07,1,15,1,12,30,30};//年/月/日/星期/时/分/秒;
  21          unsigned char   DTTMP[7];
  22          unsigned char   MSFLAG=20;                      //20MS倒计时标志
  23          unsigned char   dp;             //显示允许,控制中断显示调用     dispermit
  24          unsigned char   TMPBUF_MSB,TMPBUF_LSB;
  25          unsigned char   TCOUNT=0;
  26          
  27          //显示程序,
  28          //sn控制显示数组的第几个元素serial number//年/月/日/星期/时/分/秒;
  29          //,fl用来控制闪烁,当为0时显示" ",k为显示的开关参数,为0则显示程序段有效,开显示
  30          void    DateTime_Display(unsigned char *arrayp,unsigned char sn,unsigned char fl,unsigned char k)
  31          {               unsigned char   h,l,buf,xp,bs,cs,yp;
  32   1                      unsigned char   *arraypointer,*pp;                              
  33   1                      //unsigned char yp;位置指针,即时间数据在Y轴的坐标
  34   1                      //unsigned char cs;时间数据在LCD上的左右边标志,0在左
  35   1                      //unsigned char bs;定义扫描的位数,当为0-9时,则扫描位数为8,倍率为16
  36   1                                                      //为一,二,时则扫描位数为16,倍率为32                     
  37   1                      arraypointer=arrayp;                                    
  38   1                      if(k==0)
  39   1              {
  40   2                      if(sn<3)
  41   2                              xp=0;                           //小于3则为日期,显示在第一行
  42   2                      else    xp=2;                   //大于等于三则显示第二行,分别为时间和星期,      
  43   2                      buf=*(arraypointer+sn);
  44   2                      switch(sn)
  45   2                              {       case 0: yp=16;  cs=0;   break;  //      年,显示在第一行左边,坐标从16开始
  46   3                                      case 1: yp=48;  cs=0;   break;  //      月,显示在第一行左边,坐标从48开始
  47   3                                      case 2: yp=16;  cs=1;   break;  //      日,显示在第一行右边,坐标从16开始
  48   3                                      case 3: yp=32;  cs=0;   break;  //      星期,显示在第三行左边,坐标从48开始
  49   3                                      case 4: yp=0;   cs=1;   break;  //      时,显示在第三行左边,坐标从0开始
  50   3                                      case 5: yp=24;  cs=1;   break;  //      分,显示在第三行左边,坐标从24开始
  51   3                                      case 6: yp=48;  cs=1;   break;  //      秒,显示在第三行左边,坐标从48开始
  52   3                                      default:                                break;
  53   3                              }               
  54   2                      //****************
  55   2                      if(fl==1)                               //闪烁标志,当FL为0时显示" ",为1时正常显示
C51 COMPILER V7.06   TIMER_THERMOMETER_12864                                               03/22/2007 10:01:19 PAGE 2   

  56   2                              {if(sn==3)
  57   3                                      {       pp=tabb;        //星期,调用B数组显示
  58   4                                              bs=16;
  59   4                                              h=buf;          //当显示星期时,16*16的编码只要送高位;
  60   4                                      }
  61   3                              else
  62   3                                      {       pp=taba;        //日期与时间为数字,调用A数组,
  63   4                                              bs=8;
  64   4                                              h=buf/10;
  65   4                                              l=buf%10;       
  66   4                                      }
  67   3                              }       
  68   2                      else if(fl==0)                  //为0则显示" "
  69   2                                      {       pp=tabe;                                                
  70   3                                              h=0;
  71   3                                              l=0;            
  72   3                                              if(sn==3)       bs=16;
  73   3                                                      else    bs=8;
  74   3                                      }
  75   2                      //****************
  76   2                      p=pp;                                   
  77   2                      if(cs==0)
  78   2                              {       p=p+h*bs*2;                     Left_Bytes_DaSend(xp, yp, p,bs);
  79   3                                      p=p+bs;                         Left_Bytes_DaSend(xp+1, yp, p,bs);
  80   3                                      if(bs==8)                       //为8位的数字,则需要显示低位;
  81   3                                              {p=pp;                  p=p+l*bs*2;
  82   4                                              yp=yp+bs;               Left_Bytes_DaSend(xp, yp, p,bs);
  83   4                                              p=p+bs;                 Left_Bytes_DaSend(xp+1, yp, p,bs);
  84   4                                              }
  85   3                              }
  86   2                      else if(cs==1)
  87   2                              {
  88   3                                      p=p+h*bs*2;                     Right_Bytes_DaSend(xp, yp, p,bs);
  89   3                                      p=p+bs;                         Right_Bytes_DaSend(xp+1, yp, p,bs);
  90   3                                      if(bs==8)                               //为8位的数字,则需要显示低位;
  91   3                                              {p=pp;                  p=p+l*bs*2;
  92   4                                              yp=yp+bs;               Right_Bytes_DaSend(xp, yp, p,bs);
  93   4                                              p=p+bs;                 Right_Bytes_DaSend(xp+1, yp, p,bs);
  94   4                                              }
  95   3                              }               
  96   2              }
  97   1              //else{;} 
  98   1      }
  99          //秒闪显示
 100          void    Second_Flash(unsigned char      f)
 101                  {               
 102   1                      if(f==1)
 103   1                      {p=tabc;
 104   2                      p=p+64;}
 105   1                      else p=tabe;            
 106   1                      Right_Bytes_DaSend( 2, 40, p,8);
 107   1                      p=p+8;
 108   1                      Right_Bytes_DaSend( 3, 40, p,8);        
 109   1              }
 110          
 111          
 112          //清屏子程序
 113          void    Clean_Lcd(void)
 114          {
 115   1                      unsigned char   i;
 116   1                      p=tabe;
 117   1                      for(i=0;i<8;i++)
C51 COMPILER V7.06   TIMER_THERMOMETER_12864                                               03/22/2007 10:01:19 PAGE 3   

 118   1                      {
 119   2                      Left_Bytes_DaSend( i, 0, p,32);
 120   2                      Left_Bytes_DaSend( i, 32, p,32);
 121   2                      Right_Bytes_DaSend( i, 0, p,32);
 122   2                      Right_Bytes_DaSend( i, 32, p,32);
 123   2                      }
 124   1      }
 125          //显示"水位 .米"在第四行
 126          void    Display_LCD_1(void)
 127                  {
 128   1                              p=tabd;                 Left_Bytes_DaSend( 6, 16, p,16);
 129   1                              p=p+16;                 Left_Bytes_DaSend( 7, 16, p,16);
 130   1                              p=p+16;                 Left_Bytes_DaSend( 6, 32, p,16);
 131   1                              p=p+16;                 Left_Bytes_DaSend( 7, 32, p,16);
 132   1                              p=p+16;                 Right_Bytes_DaSend( 6, 16, p,8);
 133   1                                                              Right_Bytes_DaSend( 4, 32, p,8);                                                        
 134   1                              p=p+8;                  Right_Bytes_DaSend( 7, 16, p,8);                                                        Right_Bytes_DaSend( 5, 24, p,8);
 135   1                                                              Right_Bytes_DaSend( 5, 32, p,8);
 136   1                              p=p+8;                  Right_Bytes_DaSend( 6, 40, p,16);
 137   1                              p=p+16;                 Right_Bytes_DaSend( 7, 40, p,16);                               
 138   1              }
 139          
 140          //显示"年月日"在第二行
 141          void    Display_LCD_2(void)
 142                  {
 143   1                      p=tabc;         Left_Bytes_DaSend( 0, 32, p,16);
 144   1                      p=p+16;         Left_Bytes_DaSend( 1, 32, p,16);
 145   1                      p=p+16;         Right_Bytes_DaSend( 0, 0, p,16);
 146   1                      p=p+16;         Right_Bytes_DaSend( 1, 0, p,16);
 147   1                      p=tabb;
 148   1                      p=p+192;        Right_Bytes_DaSend( 0, 32, p,16);
 149   1                      p=p+16;         Right_Bytes_DaSend( 1, 32, p,16);
 150   1              }
 151          //显示"20"在第一行,年
 152          void    Display_LCD_3(void)
 153                  {
 154   1                      p=taba;         Left_Bytes_DaSend( 0, 8, p,8);
 155   1                      p=p+8;          Left_Bytes_DaSend( 1, 8, p,8);
 156   1                      p=p+24;         Left_Bytes_DaSend( 0, 0, p,8);
 157   1                      p=p+8;          Left_Bytes_DaSend( 1, 0, p,8);  
 158   1              }
 159          
 160          //显示":"在第二三行
 161          void    Display_LCD_4(void)
 162                  {               
 163   1                      p=tabc;         p=p+64;
 164   1                      Right_Bytes_DaSend( 2, 16, p,8);
 165   1                      Left_Bytes_DaSend( 4, 48, p,8);
 166   1                      Left_Bytes_DaSend( 6, 48, p,8);
 167   1                      p=p+8;
 168   1                      Right_Bytes_DaSend( 3, 16, p,8);
 169   1                      Left_Bytes_DaSend( 5, 48, p,8);

⌨️ 快捷键说明

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