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

📄 wds12887led8.lst

📁 C8051F.rar
💻 LST
字号:
C51 COMPILER V7.05   WDS12887LED8                                                          02/14/2006 08:52:14 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE WDS12887LED8
OBJECT MODULE PLACED IN WDS12887LED8.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe WDS12887LED8.c DB OE

stmt level    source

   1          //参考程序B.    WDS12887LED8.c程序功能:读取时钟值,并将时,分,秒显示在数码管上. 可以实现时钟初始化(授时)
   2          // Includes
   3          #include <c8051f020.h>                    // SFR declarations
   4          #include <intrins.h>
   5          // Global CONSTANTS
   6          #define CS12887         0x8300          /*DS12887时间寄存器首地址*/
   7          #define CS12887A        0x830A          /*DS12887内部寄存器A地址*/
   8          #define CS12887B        0x830B          /*DS12887内部寄存器B地址*/
   9          #define CS12887C        0x830C          /*DS12887内部寄存器C地址*/
  10          #define PORTA           0x8000          /*8255的A口*/
  11          #define PORTB           0x8001
  12          #define PORTC           0x8002
  13          #define PORTCON         0x8003
  14          unsigned long x;
  15          unsigned char *lcdpoint;         //指向 lcddata数组的指针
  16          unsigned char lcd_data_count;        //要显示的数据个数 
  17          // Function PROTOTYPES
  18          void PORT_Init (void);
  19          void sleep_ms(unsigned int count)// 延时
  20          {
  21   1        unsigned int ii,jj;
  22   1        for(ii=0;ii<count;ii++)
  23   1          {
  24   2            for(jj=0;jj<250;jj++)
  25   2                _nop_();                      
  26   2          }   
  27   1      }
  28          void SYSCLK_Init (void) //函数功能:      系统时钟初始化
  29          {
  30   1       OSCICN = 0x05;           // 系统时钟初始化为片内的4MHz
  31   1                                               
  32   1       }
  33           
  34          void DS12887INIT(void)// 初始化时钟芯片并写入时间初值
  35          {
  36   1      unsigned char i;
  37   1      unsigned char xdata *idata Point1;      
  38   1      Point1=CS12887B;
  39   1      *Point1=0x80;           /*设置SET=1,禁止时间更新*/
  40   1      Point1=CS12887;
  41   1      *Point1=0x00;           /*写入当前秒值:"30"秒*/
  42   1      Point1++;
  43   1      *Point1=0xff;           /*秒不报警(不闹秒)*/
  44   1      Point1++;
  45   1      *Point1=0x00;           /*写入当前分值:"58"分*/
  46   1      Point1++;
  47   1      *Point1=0xff;           /*分不报警(不闹分)*/
  48   1      Point1++;
  49   1      *Point1=0x12;           /*写入当前时值:"23" 时*/
  50   1      Point1++;
  51   1      *Point1=0xff;           /*时不报警(不闹时)*/
  52   1      Point1++;
  53   1      *Point1=0x04;           /*写入当前周日:"5"*/
  54   1      Point1++;
  55   1      *Point1=0x04;           /*写入当前日期:"01"日*/
C51 COMPILER V7.05   WDS12887LED8                                                          02/14/2006 08:52:14 PAGE 2   

  56   1      Point1++;
  57   1      *Point1=0x08;           /*写入当前月份:"07"月*/
  58   1      Point1++;
  59   1      *Point1=0x05;           /*写入当前年份:"05"年*/
  60   1      Point1=CS12887C;
  61   1      i=*Point1;                      /*CLEAR C*/
  62   1      Point1++;
  63   1      i=*Point1;                      /*CLEAR D*/
  64   1      Point1=CS12887B;/*更新周期正常运行,禁止中断,采用BCD码格式,24[小]时制*/
  65   1      *Point1=0x02;           /*不用复时制*/
  66   1      }
  67          void PORT_Init (void)// 初始化I/O
  68          { 
  69   1         XBR2    = 0x40;      /*时能交叉开关,弱上拉*/
  70   1         P74OUT  = 0xc0;       /*P7为推拉方式,P4,P5,P6漏极开路*/
  71   1         EMI0CF |= 0x2c;      /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
  72   1         EMI0TC |= 0x6d;      /*地址建立/保持时间占1个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
  73   1      }
  74          // MAIN Routine
  75          void main (void) {
  76   1              unsigned char j,k,temp;
  77   1              unsigned int i;
  78   1              unsigned char TimeVal[10];
  79   1              unsigned char xdata  *idata Pointm;
  80   1              unsigned char HMS[6],YMD[6];    
  81   1          /*无效看门狗*/
  82   1              WDTCN = 0xde;
  83   1              WDTCN = 0xad;
  84   1              SYSCLK_Init ();
  85   1              PORT_Init ();
  86   1              //DS12887INIT();
  87   1              Pointm=PORTCON;
  88   1              *Pointm=0x80;                   //B口输出,A口输出
  89   1         // sleep_ms(4000);
  90   1              do{
  91   2                      temp=temp&0x7f;         /*UIP=0*/
  92   2                      Pointm=CS12887A;        /*判断更新周期结束否?查询UIP位*/
  93   2                      temp=*Pointm;
  94   2                      temp=temp&0x80;         /*UIP=0,时钟更新已经完成,可以读取时钟值*/
  95   2              }while(temp==0x80);     /*UIP=1,时钟更新周期正在进行,需继续等待*/
  96   1              while(1)
  97   1              {
  98   2                      Pointm=CS12887;
  99   2                      for(temp=0;temp<10;temp++)      /*读时间寄存器*/
 100   2                      {
 101   3                              TimeVal[temp]=*Pointm;
 102   3                              Pointm++;
 103   3                              switch(temp){           /*准备待显示数据*/
 104   4                                      case 0x00:              /*秒*/
 105   4                                              HMS[4]=(TimeVal[temp]>>4);
 106   4                                              HMS[5]=TimeVal[temp]&0x0f;
 107   4                                              break;
 108   4                                      case 0x02:              /*分*/
 109   4                                              HMS[2]=(TimeVal[temp]>>4);
 110   4                                              HMS[3]=TimeVal[temp]&0x0f;
 111   4                                              break;
 112   4                                      case 0x04:              /*时*/
 113   4                                              HMS[0]=(TimeVal[temp]>>4);
 114   4                                              HMS[1]=TimeVal[temp]&0x0f;
 115   4                                              break;
 116   4                                      case 0x07:              /*日*/
 117   4                                              YMD[4]=(TimeVal[temp]>>4);
C51 COMPILER V7.05   WDS12887LED8                                                          02/14/2006 08:52:14 PAGE 3   

 118   4                                              YMD[5]=TimeVal[temp]&0x0f;
 119   4                                              break;          
 120   4                                      case 0x08:              /*月*/
 121   4                                              YMD[2]=(TimeVal[temp]>>4);
 122   4                                              YMD[3]=TimeVal[temp]&0x0f;
 123   4                                              break;
 124   4                                      case 0x09:              /*年*/
 125   4                                              YMD[0]=(TimeVal[temp]>>4);
 126   4                                              YMD[1]=TimeVal[temp]&0x0f;
 127   4                                              break;
 128   4                                      default:
 129   4                                              _nop_();
 130   4                              }
 131   3                      }
 132   2                      for(j=0;j<6;j++)
 133   2                  { 
 134   3                              switch(HMS[j]){         /*转化成数码管数字显示码*/
 135   4                                      case 0x01:
 136   4                                               k=0x06;        // '1'
 137   4                                               break; 
 138   4                                      case 0x02:
 139   4                                               k=0x5b;        // '2'
 140   4                                               break; 
 141   4                                      case 0x03:
 142   4                                               k=0x4f;        // '3'
 143   4                                               break; 
 144   4                                      case 0x04:
 145   4                                               k=0x66;        // '4'
 146   4                                               break; 
 147   4                                      case 0x05:
 148   4                                               k=0x6d;        // '5'
 149   4                                               break; 
 150   4                                      case 0x06:
 151   4                                               k=0x7d;        // '6'
 152   4                                               break; 
 153   4                                      case 0x07:
 154   4                                               k=0x07;        // '7'
 155   4                                               break; 
 156   4                                      case 0x08:
 157   4                                               k=0x7f;        // '8'
 158   4                                               break; 
 159   4                                      case 0x09:
 160   4                                               k=0x6f;        // '9'
 161   4                                               break; 
 162   4                                      case 0x00:
 163   4                                               k=0x3f;        // '0'
 164   4                                               break;
 165   4                                      default:
 166   4                                               k=0x80;        // 'dot'
 167   4                              }
 168   3                              switch(j)                       //动态驱动6数码管
 169   3                              {
 170   4                                      case 0x00:
 171   4                                              Pointm=PORTB;
 172   4                                              *Pointm=0x01;
 173   4                                              break;
 174   4                                      case 0x01:
 175   4                                          Pointm=PORTB;
 176   4                                              *Pointm=0x02;
 177   4                                              break;
 178   4                                      case 0x02:
 179   4                                              Pointm=PORTB;
C51 COMPILER V7.05   WDS12887LED8                                                          02/14/2006 08:52:14 PAGE 4   

 180   4                                              *Pointm=0x04;
 181   4                                              break;
 182   4                                      case 0x03:
 183   4                                              Pointm=PORTB;
 184   4                                              *Pointm=0x08;
 185   4                                              break;
 186   4                                      case 0x04:
 187   4                                              Pointm=PORTB;
 188   4                                              *Pointm=0x10;
 189   4                                              break;
 190   4                                      case 0x05:
 191   4                                              Pointm=PORTB;
 192   4                                              *Pointm=0x20;
 193   4                                              break;
 194   4                                      default:
 195   4                                              _nop_();
 196   4                              }
 197   3                              Pointm=PORTC; 
 198   3                      *Pointm=k;                              /*送显示码*/
 199   3                              for(i=0;i<=600;i++);
 200   3                              _nop_();
 201   3                      }
 202   2                      _nop_();
 203   2              }
 204   1      }
 205          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    826    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      22
   IDATA SIZE       =   ----       4
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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