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

📄 1302.lst

📁 52单片机开发板的实例程序
💻 LST
字号:
C51 COMPILER V7.20   1302                                                                  09/20/2011 08:31:26 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          sbit rs=P1^0;
   6          sbit rw=P1^1;
   7          sbit en=P1^2;
   8          sbit clk=P1^7;
   9          sbit dat=P1^4;
  10          sbit cs=P1^3;
  11          uchar code a[]="  2010-11-30   1";
  12          uchar code b[]="   00:00:00     ";
  13          uchar read_date[]={0x00,0x59,0x23,0x30,0x11,0x06,0x10};
  14                                      //秒、分、小时、日、月、星期、年
  15          code uchar write_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; 
  16          code uchar read_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
  17          void delay(uint z)
  18          {
  19   1              uint x,y;
  20   1              for(x=z;x>0;x--)
  21   1              for(y=110;y>0;y--);
  22   1      }
  23          void delayus(uint k)
  24          {
  25   1         for(;k>0;k--);
  26   1      }
  27          void check_1602()
  28          {
  29   1        P2=0xff;
  30   1        rs=0;
  31   1        rw=1;
  32   1        en=1;
  33   1        delayus(3);
  34   1        while(P2&0x80);
  35   1        en=0;
  36   1        
  37   1      }
  38          void write1602_command(uchar d,uchar command)//写指令子函数
  39          {
  40   1         if(d)
  41   1         check_1602();
  42   1         rs=0;
  43   1         rw=0;
  44   1         P2=command;
  45   1         delayus(100);
  46   1         en=1;
  47   1         delay(4);
  48   1         en=0;
  49   1      }
  50          void write1602_data(uchar date)//写数据子函数
  51          {
  52   1         rs=1;
  53   1         rw=0;
  54   1         P2=date;
  55   1         delayus(100);
C51 COMPILER V7.20   1302                                                                  09/20/2011 08:31:26 PAGE 2   

  56   1         en=1;
  57   1         delay(4);
  58   1         en=0;
  59   1      }
  60          void init()
  61          {       
  62   1              en=0;
  63   1              rw=0;
  64   1              write1602_command(1,0x38);
  65   1              write1602_command(1,0x01);
  66   1              write1602_command(1,0x0c);
  67   1              write1602_command(1,0x06);
  68   1              write1602_command(1,0x80);
  69   1      }
  70          void write_1302_byte(uchar temp) 
  71          {
  72   1       uchar i;
  73   1       for (i=0;i<8;i++)      //循环8次 写入数据
  74   1        { 
  75   2           clk=0;
  76   2           dat=temp&0x01;             //每次传输低字节 
  77   2           temp>>=1;                  //右移一位
  78   2           clk=1;
  79   2         }
  80   1      }   
  81          void write_1302( uchar add,uchar date )     
  82          {
  83   1              cs=0;
  84   1              _nop_();
  85   1              clk=0;
  86   1              _nop_();
  87   1              cs=1;   
  88   1              _nop_();   //启动
  89   1              write_1302_byte(add);   //发送地址
  90   1              write_1302_byte(date);          //发送数据
  91   1              cs=0;           //恢复
  92   1      }       
  93          uchar Read_Ds1302 (uchar addr )
  94          {
  95   1              uchar i,temp=0x00;
  96   1              cs=0;
  97   1              _nop_();
  98   1              clk=0;
  99   1              _nop_();
 100   1              cs=1;
 101   1              _nop_();
 102   1              write_1302_byte(addr);
 103   1              for (i=0;i<8;i++)               //循环8次 读取数据
 104   1              {
 105   2                      clk=1;  
 106   2                      _nop_();        
 107   2                      if(dat)
 108   2                      temp|=0x80;                     //每次传输低字节
 109   2                      clk=0;
 110   2                      temp>>=1;                       //右移一位
 111   2              } 
 112   1              cs=0;
 113   1              _nop_();                
 114   1              cs=1;
 115   1              dat=0;
 116   1      
 117   1              return (temp);                  //返回
C51 COMPILER V7.20   1302                                                                  09/20/2011 08:31:26 PAGE 3   

 118   1      }
 119          void Read_RTC(void)             //读取 日历
 120          {
 121   1       unsigned char i,*p;
 122   1       p=read_address;        //地址传递
 123   1       for(i=0;i<7;i++)               //分7次读取 年月日时分秒星期
 124   1       {
 125   2        read_date[i]=Read_Ds1302(*p);
 126   2        p++;
 127   2       }
 128   1      }
 129          void Set_RTC(void)              //设定 日历
 130          {
 131   1              unsigned char i,*p,tmp;
 132   1              /*for(i=0;i<7;i++){
 133   1                      tmp=l_tmpdate[i]/10;
 134   1                      l_tmpdate[i]=l_tmpdate[i]%10;
 135   1                      l_tmpdate[i]=l_tmpdate[i]+tmp*16;
 136   1              }*/
 137   1              write_1302(0x8E,0X00);
 138   1              
 139   1              p=write_address;        //传地址        
 140   1              for(i=0;i<7;i++)                //7次写入 年月日时分秒星期
 141   1              {
 142   2                        write_1302(*p,read_date[i]);
 143   2                       p++;  
 144   2               }
 145   1               write_1302(0x8E,0x80);
 146   1      }
*** WARNING C280 IN LINE 131 OF 1302.C: 'tmp': unreferenced local variable
 147          void display(uchar num)
 148          {
 149   1         write1602_data(num/16+0x30);
 150   1         write1602_data(num%16+0x30);  
 151   1      }
 152          void main()
 153          {               uchar i;
 154   1                      init();
 155   1          write1602_command(1,0x80);
 156   1              for(i=0;i<16;i++)
 157   1                              {
 158   2                                      write1602_data(a[i]);
 159   2                                      delay(1);
 160   2                              }
 161   1           write1602_command(1,0x80+0x40);
 162   1              for(i=0;i<16;i++)
 163   1                              {
 164   2                                      write1602_data(b[i]);
 165   2                                      delay(1);
 166   2                              }
 167   1          //cs=0;
 168   1              //Set_RTC();
 169   1                  while(1)   
 170   1                      {
 171   2                 Read_RTC();
 172   2                write1602_command(1,0x80+0x40+9);
 173   2                 display(read_date[0]);
 174   2                write1602_command(1,0x80+0x40+6);
 175   2                 display(read_date[1]);
 176   2               write1602_command(1,0x80+0x40+3);
 177   2                 display(read_date[2]);
 178   2               write1602_command(1,0x80+10);
C51 COMPILER V7.20   1302                                                                  09/20/2011 08:31:26 PAGE 4   

 179   2                 display(read_date[3]);
 180   2              write1602_command(1,0x80+7);
 181   2                 display(read_date[4]);
 182   2               write1602_command(1,0x80+15);
 183   2                 write1602_data(0x30+read_date[5]);
 184   2                write1602_command(1,0x80+4);
 185   2                 display(read_date[6]);
 186   2                      }
 187   1              
 188   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    490    ----
   CONSTANT SIZE    =     48    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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