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

📄 万年历.lst

📁 以12864液晶作为显示模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   万年繽                                                                11/15/2008 19:16:03 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 万年繽
OBJECT MODULE PLACED IN 万年历.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 万年历.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***************************************************************
   2          系统名称:电子万年历
   3          创建人:w418781840 日期:2008,7,18
   4          功能描述:LCD12864串行模式显示,DS1302读取时间年月份,
   5          18B20 读取温度
   6          ****************************************************************/
   7          #include <reg51.h>
   8          #include <intrins.h>
   9          #include <stdio.h>
  10          #define uchar unsigned char
  11          #define uint unsigned int
  12          /*------------LCD12864相关声明-----------------------------*/
  13          #define com 0
  14          #define dat 1
  15          sbit cs =P1^5;
  16          sbit sid=P1^6;
  17          sbit sck=P1^7;
  18          uchar code TAB1[]={"欢迎使用系统"};//第一行初始化.
  19          uchar code TAB2[]={"20  年  月  日"}; //第二行
  20          uchar code TAB3[]={"星期    :  :  "}; //第三行
  21          uchar code TAB4[]={"室温: ℃"}; //第四行
  22          /*----------------------DS1302相关声明-------------------------*/
  23          char TAB_1302[]={ 0x00,0x29,0x02, //秒:分:时.
  24          0x18,0x06,0x06,0x08}; //日:月:星期:年.
  25          uchar code TAB_XQ[]={"一二三四五六日"};//把DS1302数字日期转换为中文字符.
  26          sbit T_CLK=P3^1; /* 实时时钟的时钟线引脚*/
  27          sbit T_IO=P3^3; /* 实时时钟的数据线*/
  28          sbit T_RST=P3^6; /* 实时时钟的复位线引脚*/
  29          uchar bdata datbyte;
  30          sbit datbyte0=datbyte^0;
  31          sbit datbyte7=datbyte^7; 
  32          /*--------------18B20相关声明-------------------------------*/
  33          uchar dis1[16];
  34          sbit DQ=P1^4; /*DS18B20温度检测*/ 
  35          /*----------键盘相关声明-------------------------------------*/
  36          sbit key=P2^1; //功能键
  37          sbit key1=P2^0; //只有加1键
  38          uchar sum,keyflag=0; //调用时,分,秒,标志,调用键盘处理标志.
  39          /*--------------以下为LCD12864相关函数--------------------------*/
  40          /************************************************************** 
  41          函数名称:void delay1ms(uint x)
  42          函数功能: 延时1MS
  43          ***************************************************************/
  44          void delay1ms(uint x)
  45          {
  46   1      uint i,j;
  47   1      for(i=0;i<x;i++)
  48   1      for(j=0;j<120;j++);
  49   1      } 
  50          /**************************************************************
  51          函数名称:void w_12864byte(uchar byte)
  52          函数功能: 写字节
  53          **************************************************************/
  54          void w_12864byte(uchar byte)
  55          {
C51 COMPILER V7.50   万年繽                                                                11/15/2008 19:16:03 PAGE 2   

  56   1      uchar i;
  57   1      for(i=0;i<8;i++)
  58   1      {
  59   2      sck=0;
  60   2      byte<<=1;
  61   2      sid=CY;
  62   2      sck=1; 
  63   2      }
  64   1      }
  65          /**************************************************************
  66          函数名称:uchar r_12864byte(void)
  67          函数功能: 读字节
  68          ***************************************************************/
  69          uchar r_12864byte(void)
  70          {
  71   1      uchar i,temp1,temp2;
  72   1      temp1 = 0;
  73   1      temp2 = 0;
  74   1      for(i=0;i<8;i++)
  75   1      {
  76   2      temp1=temp1<<1;
  77   2      sck = 0;
  78   2      sck = 1; 
  79   2      sck = 0;
  80   2      if(sid) temp1++;
  81   2      }
  82   1      for(i=0;i<8;i++)
  83   1      {
  84   2      temp2=temp2<<1;
  85   2      sck = 0;
  86   2      sck = 1; 
  87   2      sck = 0; 
  88   2      if(sid) temp2++; 
  89   2      } 
  90   1      return ((0xf0&temp1)+(0x0f&temp2));
  91   1      }
  92          /**************************************************************
  93          函数名称:void c_12864busy( void )
  94          函数功能: 检测忙函数
  95          **************************************************************/
  96          void c_12864busy( void )
  97          {
  98   1      do 
  99   1      w_12864byte(0xfc); //11111,RW(1),RS(0),0
 100   1      while(0x80&r_12864byte()); 
 101   1      }
 102          /**************************************************************
 103          函数名称:void w_12864(bit dat_com,uchar byt)
 104          函数功能: 写入函数
 105          ***************************************************************/
 106          void w_12864(bit dat_com,uchar byt)
 107          {
 108   1      uchar temp;
 109   1      if(dat_com==0) //为零,写入指令 
 110   1      temp=0xf8; //11111,RS(0),RW(0),0
 111   1      else //否则,写入数据
 112   1      temp=0xfa; //11111,RS(1),RW(0),0 
 113   1      cs=1;
 114   1      c_12864busy();
 115   1      w_12864byte(temp);
 116   1      w_12864byte(byt&0xf0); //写入高四位
 117   1      w_12864byte(byt<<4); //写入低四位
C51 COMPILER V7.50   万年繽                                                                11/15/2008 19:16:03 PAGE 3   

 118   1      cs=0;
 119   1      }
 120          /**************************************************************
 121          函数名称:void init_12864(void)
 122          函数功能:初始化12864
 123          ***************************************************************/
 124          void init_12864(void)
 125          {
 126   1      w_12864(com,0x30); //基本指令功能.
 127   1      w_12864(com,0x0c); //显示打开,关光标,反白关.
 128   1      w_12864(com,0x01); //清屏指令.
 129   1      w_12864(com,0x06); //AC自动加一
 130   1      }
 131          /*----------------以下为DS1302相关函数-------------------------*/
 132          /**************************************************************
 133          函数名称:void w_1302byte(uchar date)
 134          函数功能:写一个字节(上升沿)
 135          ***************************************************************/
 136          void w_1302byte(uchar date)
 137          { uchar i; 
 138   1      datbyte=date;
 139   1      for(i=0;i<8;i++)
 140   1      { T_IO=datbyte0; //写最低位
 141   2      T_CLK=0;
 142   2      T_CLK=1;
 143   2      datbyte>>=1;
 144   2      }
 145   1      }
 146          /**************************************************************
 147          函数名称:uchar r_1302byte(void)
 148          函数功能:读一个字节(下降沿)
 149          ***************************************************************/
 150          uchar r_1302byte(void)
 151          { uchar i;
 152   1      datbyte=0;
 153   1      for(i=0;i<8;i++)
 154   1      { datbyte7=T_IO; //读最低位
 155   2      T_CLK=1;
 156   2      T_CLK=0;
 157   2      datbyte>>=1;
 158   2      }
 159   1      return(datbyte);
 160   1      }
 161          /***************************************************************
 162          函数名称:void write_1302(uchar addr,uchar date)
 163          函数功能: 指定位置写数据
 164          ****************************************************************/ 
 165          void write_1302(uchar addr,uchar date)
 166          { T_RST=0;
 167   1      T_CLK=0;
 168   1      T_RST=1;
 169   1      w_1302byte(addr);
 170   1      w_1302byte(date);
 171   1      T_CLK=0;
 172   1      T_RST=0;
 173   1      } 
 174          /**************************************************************
 175          函数名称:uchar read_1302(uchar addr)
 176          函数功能: 指定位置读数据
 177          ****************************************************************/ 
 178          uchar read_1302(uchar addr)
 179          { uchar dat1,dat2,temp;
C51 COMPILER V7.50   万年繽                                                                11/15/2008 19:16:03 PAGE 4   

 180   1      T_RST=0;
 181   1      T_CLK=0;
 182   1      T_RST=1;
 183   1      w_1302byte(addr);
 184   1      temp=r_1302byte();
 185   1      T_RST=0;
 186   1      T_CLK=0;
 187   1      dat1=temp/16;
 188   1      dat2=temp%16;
 189   1      temp=dat1*10+dat2;
 190   1      return(temp);
 191   1      } 
 192          /***************************************************************
 193          函数名称:void init_1302(void)
 194          函数功能: 初始化
 195          *****************************************************************/
 196          void init_1302(void)
 197          { uchar i;
 198   1      uchar addr=0x80;
 199   1      write_1302(0x8e,0x00);
 200   1      for(i=0;i<7;i++)
 201   1      { 
 202   2      write_1302(addr,TAB_1302[i]);
 203   2      addr+=2;
 204   2      }
 205   1      write_1302(0x8e,0x80);
 206   1      }
 207          /****************************************************************
 208          函数名称:void get_1302(void) 
 209          功能说明:读取DS1302时钟信息.
 210          *****************************************************************/ 
 211          void get_1302(void)
 212          { uchar i,addr=0x81;
 213   1      for(i=0;i<7;i++)
 214   1      { TAB_1302[i]=read_1302(addr); 
 215   2      addr+=2;
 216   2      }
 217   1      }
 218          /*---------------以下为18B20相关函数-----------------------------*/
 219          /******************************************************************
 220          函数名称:void delay (uint x) 
 221          功能说明:若机器周期为1us,则本延时程序为延时 4*x(us) 
 222          ******************************************************************/
 223          void delay (uint x) //本板延时8us
 224          {
 225   1      while (--x); 
 226   1      }
 227          
 228          /*****************************************************************
 229          函数名称:uchar bus_rest(void) 
 230          功能说明:产生单总线系统信号的总线复位信号,并返回
 231          总线上是否存在单总线器件信息 
 232          ******************************************************************/
 233          uchar bus_rest(void)
 234          {
 235   1      uchar presence;
 236   1      DQ=0; //将DQ信号线拉低
 237   1      delay(29); //持续48US
 238   1      DQ=1; //释放总线
 239   1      delay(3); //等待从设备将总线拉低
 240   1      presence=DQ; //保存当前总线状态
 241   1      delay(25); //等待总线初始化过程结束
C51 COMPILER V7.50   万年繽                                                                11/15/2008 19:16:03 PAGE 5   

 242   1      return presence;//返回是否有从设备将总线拉低 
 243   1      
 244   1      }
 245          
 246          /****************************************************************
 247          函数名称:uchar r_1820BYTE(void) 
 248          功能说明:向单总线读取一个数据字节 
 249          *****************************************************************/
 250          uchar r_1820BYTE(void)
 251          {
 252   1      uchar i=0;
 253   1      uchar date = 0;
 254   1      for (i=8;i>0;i--)
 255   1      {
 256   2      DQ = 0; // 将DQ信号线拉低启动读时隙 
 257   2      DQ=1;// 释放总线,等待从机动车辆返回数据位
 258   2      delay(1); //越接近15us越好; 准备采样总线上的信号
 259   2      date>>=1 ;
 260   2      if (DQ)
 261   2      date=date|0x80;
 262   2      delay(6); 
 263   2      }
 264   1      return(date);
 265   1      }
 266          
 267          /*****************************************************************
 268          函数名称:void w_1280Byte(uchar bytevalue) 

⌨️ 快捷键说明

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