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

📄 wds12887lcd.lst

📁 C8051F系列单片机外围电路功能模块程序
💻 LST
字号:
C51 COMPILER V7.05   WDS12887LCD                                                           02/14/2006 08:52:31 PAGE 1   


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

stmt level    source

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

  56   1              i=*Point1;                      /*CLEAR D*/
  57   1              Point1=CS12887B;        /*更新周期正常运行,禁止中断,采用BCD码格式,24[小]时制*/
  58   1              *Point1=0x02;           /*不用复时制*/
  59   1      }
  60          void PORT_Init (void)
  61          {
  62   1         //XBR2    = 0x40;      /*时能交叉开关,弱上拉*/
  63   1         P74OUT  = 0xff;              /*推挽输出*/
  64   1         EMI0CF |= 0x2c;              /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
  65   1         EMI0TC |= 0x6c;              /*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
  66   1      }
  67          void LCD_Init(void)
  68          {
  69   1         P6 = 0x01;
  70   1         for(x=0;x<50000;x++);
  71   1         //P7 = 0x30;                         /*一行显示*/
  72   1         P7 = 0x38;                           /*两行显示*/
  73   1         P6 = 0x0;
  74   1         P6 = 0x1; 
  75   1         for(x=0;x<1000;x++);
  76   1         P7 = 0x0e;                           /*显示开,光标显示,光标不闪烁*/
  77   1         P6 = 0x0;
  78   1         P6 = 0x1;
  79   1         for(x=0;x<1000;x++);
  80   1         P7= 0x06;                            /*显示增加,不平移*/
  81   1         P6 = 0x0;
  82   1         P6 = 0x1;
  83   1         for(x=0;x<5000;x++);
  84   1         P7 = 0x01;                           /*清屏*/
  85   1         P6 = 0x0;
  86   1         P6 = 0x1; 
  87   1         for(x=0;x<5000;x++);
  88   1      }
  89          void main (void) {
  90   1              unsigned char temp,data1;
  91   1              unsigned char TimeVal[10];
  92   1              unsigned char xdata  *idata Pointm;
  93   1              unsigned char HMS[10]={0x70,0x70},YMD[10]={0x02,0x00};  
  94   1              WDTCN = 0xde;  /*无效看门狗*/
  95   1              WDTCN = 0xad;
  96   1              SYSCLK_Init ();                 /*初始化系统时钟*/
  97   1              PORT_Init ();                       /*初始化端口*/
  98   1                       //DS12887INIT();                       /*时钟芯片授时*/
  99   1                        LCD_Init();               /*LCD初始化*/
 100   1              //sleep_ms(4000);
 101   1      do{
 102   2      temp=temp&0x7f; /*UIP=0*/
 103   2      Pointm=CS12887A;/*判断更新周期结束否?查询UIP位*/
 104   2      temp=*Pointm;
 105   2      temp=temp&0x80; /*UIP=0,时钟更新已经完成,可以读取时钟值*/
 106   2      }while(temp==0x80);/*UIP=1,时钟更新周期正在进行,不能读取时钟值,需继续等待*/
 107   1              while(1)
 108   1              {
 109   2                      P7 = 0x02;                      /*回到起始位置*/
 110   2                      P6 = 0x0;
 111   2                      P6 = 0x01; 
 112   2                      Pointm=CS12887;
 113   2                      for(temp=0;temp<10;temp++)      /*读时间寄存器*/
 114   2                      {
 115   3                              TimeVal[temp]=*Pointm;
 116   3                              Pointm++;
 117   3                              switch(temp){   /*准备待显示的时间数据*/
C51 COMPILER V7.05   WDS12887LCD                                                           02/14/2006 08:52:31 PAGE 3   

 118   4                                      case 0x00:
 119   4                                              HMS[7]=0x0a;
 120   4                                              HMS[8]=(TimeVal[temp]>>4);
 121   4                                              HMS[9]=TimeVal[temp]&0x0f;
 122   4                                              break;
 123   4                                      case 0x02:
 124   4                                              HMS[4]=0x0a;
 125   4                                              HMS[5]=(TimeVal[temp]>>4);
 126   4                                              HMS[6]=TimeVal[temp]&0x0f;
 127   4                                              break;
 128   4                                      case 0x04:
 129   4                                              HMS[2]=(TimeVal[temp]>>4);
 130   4                                              HMS[3]=TimeVal[temp]&0x0f;
 131   4                                              break;
 132   4                                      case 0x07:
 133   4                                              YMD[7]=0x0a;
 134   4                                              YMD[8]=(TimeVal[temp]>>4);
 135   4                                              YMD[9]=TimeVal[temp]&0x0f;
 136   4                                              break;
 137   4                                      case 0x08:
 138   4                                              YMD[4]=0x0a;
 139   4                                              YMD[5]=(TimeVal[temp]>>4);
 140   4                                              YMD[6]=TimeVal[temp]&0x0f;
 141   4                                              break;
 142   4                                      case 0x09:
 143   4                                              YMD[2]=(TimeVal[temp]>>4);
 144   4                                              YMD[3]=TimeVal[temp]&0x0f;
 145   4                                              break;
 146   4                                      default:
 147   4                                              _nop_();
 148   4                              }
 149   3                      }
 150   2      Pointm=CS12887C;
 151   2      temp=*Pointm;                   /*CLEAR C*/
 152   2      Pointm++;
 153   2      temp=*Pointm;                   /*CLEAR D*/
 154   2      Pointm=CS12887B;        /*更新周期正常运行,禁止中断,采用BCD码格式,24[小]时制*/
 155   2      *Pointm=0x02;           /*不用复时制*/
 156   2      _nop_();
 157   2       P6  = 0x05;                             //准备送数据
 158   2        for(x=0;x<5000;x++);
 159   2      lcdpoint=&YMD;
 160   2      for(lcd_data_count=10;lcd_data_count>0;lcd_data_count--)     //显示第一行字符
 161   2      { 
 162   3      data1=*lcdpoint;
 163   3      data1 += 0x30;          /*转化成字符码*/
 164   3      P7 = data1;             /*送字符数据*/
 165   3      P6 = 0x04;
 166   3      P6 = 0x05;
 167   3      lcdpoint++;
 168   3      for(x=0;x<100;x++);
 169   3      }
 170   2                      P6 = 0x01;
 171   2                P7 = 0xc0;            /*切换到第二行*/
 172   2                      P6 = 0x00;      
 173   2                      P6 = 0x01;      
 174   2                      for(x=0;x<1000;x++);
 175   2                  lcdpoint=&HMS;
 176   2                  for(lcd_data_count=10;lcd_data_count>0;lcd_data_count--)     //显示第二行字符
 177   2                  { 
 178   3                          data1=*lcdpoint;
 179   3                              data1 += 0x30;          /*转化成字符码*/
C51 COMPILER V7.05   WDS12887LCD                                                           02/14/2006 08:52:31 PAGE 4   

 180   3                          P7 = data1;                 /*送字符数据*/
 181   3                              P6 = 0x04;
 182   3                      P6 = 0x05;
 183   3                      lcdpoint++;
 184   3                              for(x=0;x<100;x++);
 185   3                      }
 186   2              }
 187   1      }
 188          
 189          
 190          
 191          
 192          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1287    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      32
   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 + -