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

📄 1.lst

📁 实时时钟芯片DS12c887的51单片机驱动程序,能读出年月日时分秒等日历信息.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   1                                                                     06/06/2008 15:43:25 PAGE 1   


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

line level    source

   1          //芯片:AT89C51
   2          //主频:12MHz
   3          
   4          #include "reg52.h"
   5          #include "lcd12864_driver.h"
   6          #define ds12887_out P1
   7          sbit ds12887_cs= P3^2;
   8          sbit ds12887_as =P3^3;
   9          sbit ds12887_rw =P3^4;
  10          sbit ds12887_ds =P3^5;
  11          sbit set_s=P2^0 ;
  12          sbit DQ =P2^1;//根据实际情况定义18B20 
  13          void s_init(void);
  14          void dis_one_zi(uchar x_add,uchar y_add,uchar code *po,bit back_flag,bit char_moudle);
  15          void dis_one_char(uchar x,uchar y,uchar asc_num,bit b_flag);
  16          
  17          uchar code x0[32] = { //16*16汉字点阵字模
  18          /*年   CC4EA */
  19          0x00,0x00,0x20,0x30,0xF8,0xDC,0x4C,0x48,
  20          0x48,0xF8,0xF8,0x48,0x48,0x48,0x48,0x08,
  21          0x00,0x04,0x04,0x04,0x07,0x07,0x04,0x04,
  22          0x04,0x7F,0x7F,0x04,0x04,0x04,0x04,0x04};
  23          uchar code x1[32] = {
  24          /*月   CD4C2 */
  25          0x00,0x00,0x00,0x00,0xF8,0xF8,0x48,0x48,
  26          0x48,0x48,0x48,0x48,0xF8,0xF8,0x00,0x00,
  27          0x00,0x00,0x40,0x70,0x3F,0x0F,0x02,0x02,
  28          0x02,0x02,0x42,0x42,0x7F,0x7F,0x00,0x00};
  29          uchar code x2[32] = {
  30          /*日   CC8D5 */
  31          0x00,0x00,0x00,0xF8,0xF8,0x08,0x08,0x08,
  32          0x08,0x08,0x08,0x08,0xF8,0xF8,0x00,0x00,
  33          0x00,0x00,0x00,0x7F,0x7F,0x11,0x11,0x11,
  34          0x11,0x11,0x11,0x11,0x3F,0x3F,0x00,0x00};
  35          uchar code x3[32] = {
  36          /*星   CD0C7 */
  37          0x00,0x00,0x00,0xF8,0xF8,0xA8,0xA8,0xA8,
  38          0xA8,0xA8,0xA8,0xA8,0xF8,0xF8,0x00,0x00,
  39          0x00,0x48,0x4C,0x4F,0x4B,0x4A,0x4A,0x4A,
  40          0x7F,0x7F,0x4A,0x4A,0x4A,0x4A,0x42,0x40};
  41          uchar code x4[32] = {
  42          /*期   CC6DA */
  43          0x00,0x10,0x10,0xFC,0xFC,0x50,0x50,0xFC,
  44          0xFC,0x10,0xF8,0xF8,0x48,0x48,0xF8,0xF8,
  45          0x00,0x44,0x64,0x3F,0x1F,0x05,0x15,0x37,
  46          0x37,0x64,0x7F,0x1F,0x42,0x42,0x7F,0x7F};
  47          uchar code x5[32] = {
  48          /*时   CCAB1 */
  49          0x00,0x00,0xF8,0xF8,0x88,0x88,0xF8,0xF8,
  50          0x20,0x20,0x20,0x20,0xFC,0xFC,0x20,0x20,
  51          0x00,0x00,0x3F,0x3F,0x08,0x08,0x1F,0x1F,
  52          0x01,0x43,0x47,0x46,0x7F,0x7F,0x00,0x00};
  53           uchar code x6[32] = {
  54          /*分   CB7D6 */
  55          0x00,0x00,0x80,0xC0,0xE0,0x70,0x1C,0x0C,
C51 COMPILER V8.08   1                                                                     06/06/2008 15:43:25 PAGE 2   

  56          0x04,0x00,0x0C,0x1C,0x70,0xE0,0xC0,0x80,
  57          0x00,0x41,0x41,0x61,0x21,0x31,0x1F,0x0F,
  58          0x01,0x41,0x41,0x61,0x7F,0x1F,0x01,0x01};
  59           uchar code x7[32] = {
  60          /*秒   CC3EB */
  61          0x00,0x40,0x48,0xC8,0xF8,0xF8,0x4C,0x44,
  62          0xC0,0xF0,0x30,0xFC,0xFC,0x30,0x70,0xE0,
  63          0x00,0x08,0x0E,0x07,0x7F,0x7F,0x43,0x43,
  64          0x41,0x60,0x20,0x37,0x1F,0x1C,0x0E,0x02
  65          
  66          };
  67          
  68          
  69          //DS1820 子程序 
  70          //这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间 
  71          
  72          typedef unsigned char byte; 
  73          typedef unsigned int word; 
  74          //延时 
  75          void delay(word useconds) 
  76          { 
  77   1              for(;useconds>0;useconds--); 
  78   1      } 
  79          //复位 
  80          byte ow_reset(void)   //总线复位
  81          { 
  82   1              byte presence; 
  83   1              DQ = 0; //pull DQ line low 
  84   1              delay(29); // leave it low for 480us 
  85   1              DQ = 1; // allow line to return high 
  86   1              delay(3); // wait for presence 
  87   1              presence = DQ; // get presence signal 
  88   1              delay(25); // wait for end of timeslot 
  89   1              return(presence); // presence signal returned 
  90   1      } // 0=presence, 1 = no part 
  91          //从 1-wire 总线上读取一个字节 
  92          byte read_byte(void)    //读取DS12b80单线总线字节
  93          { 
  94   1              byte i; 
  95   1              byte value = 0; 
  96   1              for (i=8;i>0;i--) 
  97   1              { 
  98   2                      value>>=1; 
  99   2                      DQ = 0; // pull DQ low to start timeslot 
 100   2                      DQ = 1; // then return high 
 101   2                      delay(1); //for (i=0; i<3; i++); 
 102   2                      if(DQ)value|=0x80; 
 103   2                              delay(6); // wait for rest of timeslot 
 104   2              } 
 105   1              return(value); 
 106   1      } 
 107          //向 1-WIRE 总线上写一个字节 
 108          void write_byte(char val) //写入DS12b80单线总线字节
 109          { 
 110   1              byte i; 
 111   1              for (i=8; i>0; i--) // writes byte, one bit at a time 
 112   1              { 
 113   2                      DQ = 0; // pull DQ low to start timeslot 
 114   2                      DQ = val&0x01; 
 115   2                      delay(5); // hold value for remainder of timeslot 
 116   2                      DQ = 1; 
 117   2                      val=val/2; 
C51 COMPILER V8.08   1                                                                     06/06/2008 15:43:25 PAGE 3   

 118   2              } 
 119   1              delay(5); 
 120   1      } 
 121           
 122          char Read_Temperature(void)//读取温度 
 123          { 
 124   1              union 
 125   1              {
 126   1                      byte c[2]; 
 127   1                      int x; 
 128   1              }temp; 
 129   1              ow_reset(); 
 130   1              write_byte(0xCC); // Skip ROM 
 131   1              write_byte(0xBE); // Read Scratch Pad 
 132   1              temp.c[1]=read_byte(); 
 133   1              temp.c[0]=read_byte(); 
 134   1              ow_reset(); 
 135   1              write_byte(0xCC); //Skip ROM 
 136   1              write_byte(0x44); // Start Conversion 
 137   1              return temp.x/2; 
 138   1      } 
 139          
 140          uchar ds12887_read(uchar addr)//读取DS12C887数据
 141          {
 142   1              uchar temp;
 143   1              ds12887_cs=0;
 144   1              ds12887_ds=0;
 145   1              ds12887_as=1;
 146   1              ds12887_out=addr;
 147   1              _nop_();
 148   1              ds12887_as=0;
 149   1              ds12887_rw=1;
 150   1              ds12887_ds=1;
 151   1              _nop_();        
 152   1              temp=ds12887_out;
 153   1              ds12887_ds=0;  
 154   1              ds12887_cs=1;
 155   1              return temp;
 156   1      }
 157          
 158          void ds12887_write(uchar addr,uchar sdata) //写DS12c887
 159          {
 160   1      
 161   1              ds12887_cs=0;
 162   1              ds12887_ds=0;
 163   1              ds12887_as=1;
 164   1              ds12887_out=addr;
 165   1              _nop_();
 166   1              ds12887_as=0;
 167   1              ds12887_rw=0;
 168   1              ds12887_ds=1;
 169   1              ds12887_out=sdata;
 170   1              _nop_();        
 171   1              ds12887_ds=0;  
 172   1              ds12887_cs=1;
 173   1      }       
 174          
 175          uchar get_s() //获取DS12c887秒数据
 176          {
 177   1              uchar uip,temp;
 178   1              while(uip & 0x80 !=0x80)
 179   1              {
C51 COMPILER V8.08   1                                                                     06/06/2008 15:43:25 PAGE 4   

⌨️ 快捷键说明

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