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

📄 ds12cr887mnl.lst

📁 基于DS12887的多功能电子智能时钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.05a   DS12CR887MNL                                                         04/15/2009 21:34:52 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE DS12CR887MNL
OBJECT MODULE PLACED IN DS12CR887mnl.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS12CR887mnl.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*-----------------------------------------------------------------------------
   2          电子智能时钟源wj
   3          单片机:STC89C52RC
   4          晶振:12MHz
   5          时钟芯片:DS12CR887+5
   6          液晶屏:LCM-12864-ST7920
   7          时间:2009.04.16
   8          LCM12864使用并口连接方式
   9          -----------------------------------------------------------------------------*/
  10          /*头文件---------------------------------------------------------------------*/
  11          #include <reg52.h>
  12          #include <string.h>
  13          #include "DS12CR887mnl.h"
  14          
  15          /*定义全局变量---------------------------------------------------------------*/
  16          uchar sec,min,hour, day, date, month,year;
  17                  //秒,分,小时,星期,日期,月,  年
  18          bit w = 0; //调时标志位
  19          
  20          /*延时程序-------------------------------------------------------------------*/
  21          //延时函数 1MS/次
  22          void DelayM(uint a)             
  23          {
  24   1              uchar i;
  25   1              while( --a != 0)
  26   1          {           
  27   2                      for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
  28   2              }                                  //i 从0加到125,CPU大概就耗时1毫秒
  29   1      }
  30          
  31          //延时函数
  32          void Delay(int num)
  33          {
  34   1              while(num--);
  35   1      }
  36          
  37          /*DS12CR887驱动程序----------------------------------------------------------*/
  38          //往DS12CR887写数据函数
  39          void ds_write(uchar add,uchar date)      
  40          {
  41   1              DS_CS=0;
  42   1              DS_DS=1;
  43   1              DS_RW=1;
  44   1              DS_AS=1;
  45   1              Ds_Bus=add;
  46   1              DS_AS=0;
  47   1              DS_RW=0;
  48   1              Ds_Bus=date;
  49   1              DS_RW=1;
  50   1              DS_AS=1;
  51   1              DS_CS=1;
  52   1      }
  53          
  54          //读取DS12CR887的数据
  55          uchar ds_read(uchar add)
C51 COMPILER V8.05a   DS12CR887MNL                                                         04/15/2009 21:34:52 PAGE 2   

  56          {
  57   1              uchar z;
  58   1              DS_CS=0;
  59   1              DS_RW=1;
  60   1              DS_DS=1;
  61   1              DS_AS=1;
  62   1              Ds_Bus=add;
  63   1              DS_AS=0;
  64   1              DS_DS=0;
  65   1          Ds_Bus=0xff;
  66   1              z=Ds_Bus;
  67   1              DS_DS=1;
  68   1              DS_AS=1;
  69   1              DS_CS=1;
  70   1              return z;
  71   1      }
  72          
  73          //DS12CR887初始化
  74          void ds_int()
  75          {
  76   1              DS_AS=0;
  77   1              DS_DS=0;
  78   1              DS_RW=0;
  79   1              ds_write(0x0a,0x20);//DS12CR887寄存器A功能设置,开启时钟振荡器
  80   1      }
  81          
  82          /*12864液晶显示屏并口驱动程序------------------------------------------------*/
  83          
  84          //检查忙位(底层)
  85          void chk_busy()
  86          {
  87   1         LCM_RS=0;
  88   1         LCM_RW=1;
  89   1         LCM_EN=1;
  90   1         Lcd_Bus=0xff;
  91   1         while((Lcd_Bus&0x80)==0x80);
  92   1         LCM_EN=0;
  93   1      }
  94          
  95          //写指令到LCD(底层)
  96          void write_com(uchar cmdcode)
  97          {
  98   1              chk_busy();
  99   1              LCM_RS=0;
 100   1              LCM_RW=0;
 101   1              LCM_EN=1;
 102   1              Lcd_Bus=cmdcode;
 103   1              LCM_EN=0;
 104   1      }
 105          
 106          //写数据到LCD(底层)
 107          void write_data(uchar Dispdata)
 108          {        
 109   1              chk_busy();
 110   1              LCM_RS=1;
 111   1              LCM_RW=0;
 112   1              LCM_EN=1;
 113   1              Lcd_Bus=Dispdata;
 114   1              LCM_EN=0;
 115   1      }
 116          
 117          //初始化LCD屏(被调用层)
C51 COMPILER V8.05a   DS12CR887MNL                                                         04/15/2009 21:34:52 PAGE 3   

 118          void lcm_init()
 119          {
 120   1         LCM_PSB=1;  //如果液晶屏的PSB在电路板中接了高电平的,这里可以屏蔽
 121   1         LCM_RST=1;  //如果液晶屏的RST在电路板中接了高电平的,这里可以屏蔽   
 122   1         write_com(0x30);  //选择8bit数据流
 123   1         write_com(0x0c);  //开显示(无游标、不反白)
 124   1         write_com(0x01);  //清除显示,并且设定地址指针为00H
 125   1      }
 126          
 127          //向LCM发送一个字符串,长度64字符之内。(被调用层)
 128          //应用:lcm_w_word("您好!");
 129          void lcm_w_word(uchar *s)
 130          {
 131   1              while(*s>0)
 132   1              {                                       
 133   2              write_data(*s); 
 134   2              s++;
 135   2          }
 136   1      }
 137          
 138          //写指令或数据(被调用层)
 139          void lcm_w_test(bit i,uchar word)
 140          {
 141   1              if(i == 0)
 142   1              {
 143   2                      write_com(word);//写指令或数据(0,指令)
 144   2              }
 145   1              else
 146   1              {
 147   2                      write_data(word);//写指令或数据(1,数据)
 148   2              }
 149   1      }
 150          
 151          //清屏函数
 152          void lcm_clr(void)
 153          {
 154   1              lcm_w_test(0,0x01);     
 155   1      }
 156          
 157          /*DS18B20驱动程序------------------------------------------------------------*/
 158          //初始化ds1820函数
 159          void Init_DS18B20(void)
 160          {
 161   1              uchar x=0;
 162   1              DQ = 1;    //DQ复位
 163   1              Delay(8);  //稍做延时
 164   1              DQ = 0;    //单片机将DQ拉低
 165   1              Delay(80); //精确延时 大于 480us
 166   1              DQ = 1;    //拉高总线
 167   1              Delay(14);
 168   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 169   1              Delay(20);
 170   1      }
 171          
 172          //读一个字节函数
 173          uchar ReadOneChar(void)
 174          {
 175   1              uchar i=0;
 176   1              uchar dat = 0;
 177   1              for (i=8;i>0;i--)
 178   1              {
 179   2                      DQ = 0; // 给脉冲信号
C51 COMPILER V8.05a   DS12CR887MNL                                                         04/15/2009 21:34:52 PAGE 4   

 180   2                      dat>>=1;
 181   2                      DQ = 1; // 给脉冲信号
 182   2                      if(DQ)
 183   2                      dat|=0x80;
 184   2                      Delay(4);
 185   2              }
 186   1              return(dat);

⌨️ 快捷键说明

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