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

📄 text.lst

📁 用12864液晶显示电子时钟,并能进行温度显示,可更改时间
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   TEXT                                                                  04/15/2009 13:03:06 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEXT
OBJECT MODULE PLACED IN Text.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************/
   2          /*                                                                 */
   3          /* 51单片机- 128*64LCD显示                                */
   4          /*                                                                 */
   5          //;*  LCD型号:带汉字库)或兼容型号    控制器ST7920                */
   6          //;*  MCU:STC89C52 ,晶体频率:12MHz                                */                                     
             -                         
   7          /*                                                                 */
   8          /*******************************************************************/
   9          
  10          
  11          #include<AT89X52.H>
  12          #include <absacc.h>
  13          #include <intrins.h>
  14          #define uchar   unsigned char
  15          #define uint    unsigned int
  16          
  17          
  18          sbit T_CLK      = P2^4;         /* 实时时钟的时钟线引脚*/
  19          sbit T_IO       = P2^5;         /* 实时时钟的数据线*/
  20          sbit T_RST      = P2^6;         /* 实时时钟的复位线引脚*/
  21          uint  ucCurtime[7]={0x40,0x59,0x23,0x29,0x03,0x00,0x09}; // 秒 分 时 日 月 星期 年
  22          
  23          /*******************************************************************/
  24          /*                                                                 */
  25          /*  输入字节                                                       */
  26          /*                                                                 */
  27          /*******************************************************************/ 
  28          void v_RTInputByte(uchar ucDa)
  29          {
  30   1       uchar i;
  31   1       ACC=ucDa;
  32   1       for(i=8;i>0;i--)
  33   1       {
  34   2         if((ACC&0x01)==1)  
  35   2        //T_IO=ACC0;  /* 相当于汇编中的RRC */
  36   2        T_IO=1;
  37   2        else T_IO=0;//if((ACC&0x01)==0)
  38   2        T_CLK=1;
  39   2        T_CLK=0;
  40   2        ACC=ACC>>1;
  41   2        }
  42   1       }
  43          
  44          /*******************************************************************/
  45          /*                                                                 */
  46          /*  读取字节                                                       */
  47          /*                                                                 */
  48          /*******************************************************************/
  49          uchar uc_RTOutputByte(void)
  50          {
  51   1       uchar i,ACC;
  52   1       ACC=0;
  53   1       for(i=0;i<8;i++)
  54   1       {
C51 COMPILER V8.02   TEXT                                                                  04/15/2009 13:03:06 PAGE 2   

  55   2        ACC=ACC>>1;   /*相当于汇编中的RRC*/
  56   2        if(T_IO==1)
  57   2        ACC=ACC|0x80;
  58   2        T_CLK=1;
  59   2        T_CLK=0;
  60   2       }
  61   1      return(ACC);
  62   1      }
  63          
  64          /*******************************************************************/
  65          /*                                                                 */
  66          /*  按地址写命令                                                   */
  67          /*                                                                 */
  68          /*******************************************************************/
  69          void v_W1302(uchar ucAddr,uchar ucDa)
  70          {
  71   1       T_RST=0;
  72   1       T_CLK=0;
  73   1       T_RST=1;
  74   1       v_RTInputByte(ucAddr);  /*地址,命令*/
  75   1       v_RTInputByte(ucDa);    /*写1Byte数据*/
  76   1       T_CLK=1;
  77   1       T_RST=0;
  78   1      
  79   1      }
  80          
  81          /*******************************************************************/
  82          /*                                                                 */
  83          /*  按地址读取命令                                                 */
  84          /*                                                                 */
  85          /*******************************************************************/
  86          uchar uc_R1302(uchar ucAddr)
  87          {
  88   1       unsigned char ucDa,k;
  89   1       k=0x00;
  90   1       T_RST=0;
  91   1       T_CLK=0;
  92   1       T_RST=1;
  93   1       v_RTInputByte(ucAddr);  /*地址,命令*/
  94   1       ucDa=uc_RTOutputByte(); /*读取1Byte数据*/
  95   1       T_CLK=1;
  96   1       T_RST=0;
  97   1       k=ucDa/16;
  98   1       ucDa=ucDa%16;
  99   1       ucDa=ucDa+k*10;
 100   1       return(ucDa);
 101   1      }
 102          
 103          /*******************************************************************/
 104          /*                                                                 */
 105          /*  设置状态                                                       */
 106          /*                                                                 */
 107          /*******************************************************************/
 108          void v_Set1302()//uchar *pSecDa) 
 109          {
 110   1      uchar i,j;
 111   1      uchar ucAddr=0x80; 
 112   1      v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
 113   1      for(i=0;i<7;i++)
 114   1      {
 115   2      j=ucCurtime[i]; 
 116   2      v_W1302(ucAddr,j); /* 秒 分 时 日 月 星期 年 */
C51 COMPILER V8.02   TEXT                                                                  04/15/2009 13:03:06 PAGE 3   

 117   2      ucAddr +=2;
 118   2      }
 119   1      v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
 120   1      }
 121           
 122          /*******************************************************************/
 123          /*                                                                 */
 124          /*  获取状态                                                       */
 125          /*                                                                 */
 126          /*******************************************************************/
 127          void v_Get1302() 
 128          {
 129   1      uchar i;
 130   1      uchar ucAddr=0x81;
 131   1      
 132   1      for (i=0;i<7;i++)
 133   1      {
 134   2      ucCurtime[i]=uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 135   2      ucAddr +=2;
 136   2      }
 137   1      }
 138          ////////////////////////////////////////////////////////////////////
 139          ////////////////////////////////////////////////////////////////////
 140          ////////////////////////////////////////////////////////////////////
 141          /* DS18B20端口定义及初始化*/
 142          uchar tCount=0;
 143          uint nCurTemp;
 144            
 145          sbit DQ=P1^0; 
 146          
 147          bit Reset(void) 
 148          { 
 149   1        uchar i; 
 150   1        
 151   1        DQ=0; 
 152   1        for(i=255;i>0;i--); 
 153   1        DQ=1; 
 154   1        for(i=60;i>0;i--); 
 155   1        return(DQ); 
 156   1        //for(i=200;i>0;i--); 
 157   1      } 
 158          /*******************************************************************/
 159          /*                                                                 */
 160          /*  DS18B20写字节                                                  */
 161          /*                                                                 */
 162          /*******************************************************************/ 
 163          void WriteDS18b20(uchar CMD) 
 164          { 
 165   1        uchar i,j; 
 166   1         
 167   1        for(i=0;i<8;i++) 
 168   1          { 
 169   2            if((CMD & 0x01)==0) 
 170   2              { 
 171   3                DQ=0; 
 172   3                for(j=35;j>0;j--); 
 173   3                DQ=1; 
 174   3              } 
 175   2              else 
 176   2                { 
 177   3                  DQ=0; 
 178   3                  for(j=2;j>0;j--); 
C51 COMPILER V8.02   TEXT                                                                  04/15/2009 13:03:06 PAGE 4   

 179   3                  DQ=1; 
 180   3                  for(j=33;j>0;j--); 
 181   3                } 
 182   2            CMD = _cror_(CMD,1);       
 183   2          } 
 184   1      } 
 185          /*******************************************************************/
 186          /*                                                                 */
 187          /*  DS18B20读字节                                                  */
 188          /*                                                                 */
 189          /*******************************************************************/ 
 190          unsigned char ReadDS18b20(void) 
 191          { 
 192   1        uchar i,j,temp; 
 193   1        
 194   1        temp=0; 
 195   1        for(i=0;i<8;i++) 
 196   1          { 
 197   2            temp=_cror_(temp,1); 
 198   2            DQ=0; 
 199   2            _nop_(); 
 200   2            _nop_(); 
 201   2            DQ=1; 
 202   2            for(j=10;j>0;j--); 
 203   2            if(DQ==1) 
 204   2              { 
 205   3                temp=temp | 0x80; 
 206   3              } 
 207   2              else 
 208   2                { 
 209   3                  temp=temp | 0x00; 
 210   3                } 
 211   2            for(j=200;j>0;j--); 
 212   2          } 
 213   1        return(temp); 
 214   1      }
 215          
 216          /*******************************************************************/
 217          /*                                                                 */
 218          /*  DS18B20初始化                                                  */
 219          /*                                                                 */
 220          /*******************************************************************/ 
 221          void DS18b20_Init(void)
 222          { 
 223   1              TMOD=0x01;
 224   1              TH0=(65536-4000)/256; 
 225   1              TL0=(65536-4000)%256; 
 226   1              ET0=1; 
 227   1              //
 228   1              EX0=1;
 229   1              IT0=1;
 230   1              EA=1; 
 231   1      
 232   1              while( Reset() ){}; 
 233   1              WriteDS18b20(0xcc);  //跳过ROM配置
 234   1              WriteDS18b20(0x44);  //启动温度转换
 235   1              TR0=1;
 236   1      }                                                       
 237          
 238          /*******************************************************************/
 239          /*                                                                 */
 240          /*  定时T1读取DS18B20当前温度                                      */
C51 COMPILER V8.02   TEXT                                                                  04/15/2009 13:03:06 PAGE 5   

 241          /*                                                                 */
 242          /*******************************************************************/ 
 243           void t0(void) interrupt 1 using 0 
 244          { 
 245   1        uchar a;
 246   1        
 247   1        TH0=(65536-4000)/256; 
 248   1        TL0=(65536-4000)%256; 
 249   1      
 250   1        tCount++; 
 251   1        if(tCount>=150) 

⌨️ 快捷键说明

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