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

📄 lcd12887_1.lst

📁 数字时钟芯片DS12CR887的驱动与LCD1602液晶显示~采用8位数据总线的方式进行读写~
💻 LST
📖 第 1 页 / 共 5 页
字号:
  14      =1  /*--------------------------------------------------------------*/
  15      =1  //LCD接口定义                                   
  16      =1  sfr              io     = 0xA0;                         //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0;
  17      =1  sbit     rs = P3^4;                             //LCD数据/命令选择端(H/L)
  18      =1  sbit     rw = P3^5;                             //LCD读/写选择端(H/L)
  19      =1  sbit     ep = P3^6;                             //LCD使能控制
  20      =1  sbit     bz = io^7;                             //LCD忙标志位
  21      =1  
  22      =1  
  23      =1  /*--------------------------------------------------------------*/
  24      =1  //函数声明              
  25      =1  void lcd_busy(void);                                    //测试LCD忙碌状态程序
  26      =1  void lcd_wcmd(unsigned char cmd);               //写入指令到LCD程序
  27      =1  void lcd_wdat(unsigned char dat);               //写入数据到LCD程序
  28      =1  void lcd_pos (unsigned char x, bit y);  //LCD数据指针位置程序
  29      =1  //void printc(unsigned char CHAR);              //显示字符
  30      =1  void prints(unsigned char *string);             //显示字符串
  31      =1  void lcd_init(void);                                    //LCD初始化设定程序
  32      =1  
  33      =1  
  34      =1  /*--------------------------------------------------------------*/
  35      =1  //测试LCD忙碌状态
  36      =1  void lcd_busy(void)
  37      =1  {       
  38   1  =1          do{
  39   2  =1                  ep = 0;
  40   2  =1                  rs = 0;         //指令
  41   2  =1                  rw = 1;         //读出
  42   2  =1                  io = 0xff;
  43   2  =1                  ep = 1;
  44   2  =1                  _nop_();        //高电平读出    1us     
  45   2  =1          }while(bz);             //bz=1表示忙,bz=0表示空闲
  46   1  =1          ep = 0;         
  47   1  =1  }
  48      =1  
  49      =1  
  50      =1  /*--------------------------------------------------------------*/
  51      =1  //写入指令到LCD
  52      =1  void lcd_wcmd(unsigned char cmd)
  53      =1  {                                                       
  54   1  =1          lcd_busy();     //检测忙
C51 COMPILER V7.06   LCD12887_1                                                            10/26/2008 21:45:08 PAGE 6   

  55   1  =1          rs = 0;         //指令
  56   1  =1          rw = 0;         //写入
  57   1  =1          ep = 1; 
  58   1  =1          io = cmd;       //指令
  59   1  =1          ep = 0;         //下降沿有效    
  60   1  =1  }
  61      =1  
  62      =1  
  63      =1  /*--------------------------------------------------------------*/
  64      =1  //写入数据函数
  65      =1  void lcd_wdat(unsigned char Data)
  66      =1  {
  67   1  =1          lcd_busy();  //检测忙
  68   1  =1          rs = 1;          //数据
  69   1  =1          rw = 0;          //写入
  70   1  =1          ep = 1;
  71   1  =1          io = Data;       //数据
  72   1  =1          ep = 0;          //下降沿有效
  73   1  =1  }
  74      =1  
  75      =1  
  76      =1  /*--------------------------------------------------------------*/
  77      =1  //LCD数据指针位置程序
  78      =1  void lcd_pos(unsigned char x, bit y)
  79      =1  {                                               
  80   1  =1          if(y)lcd_wcmd(x|0xc0);  //y=1,第二行显示;y=0,第一行显示         0<=x<16
  81   1  =1          else lcd_wcmd(x|0x80);  //数据指针=80+地址码(00H~27H,40H~67H)
  82   1  =1  }
  83      =1  
  84      =1  
  85      =1  /*--------------------------------------------------------------*/
  86      =1  //显示字符
  87      =1  /*
  88      =1  void printc(unsigned char CHAR)
  89      =1  {
  90      =1          lcd_wdat(CHAR);
  91      =1  }
  92      =1  */
  93      =1  
  94      =1  
  95      =1  /*--------------------------------------------------------------*/
  96      =1  //显示字符串
  97      =1  void prints(unsigned char *string)
  98      =1  {
  99   1  =1          while(*string) {lcd_wdat(*string);string++;}
 100   1  =1  }
 101      =1  
 102      =1  
 103      =1  /*--------------------------------------------------------------*/
 104      =1  //LCD初始化设定
 105      =1  void lcd_init()
 106      =1  {                                               
 107   1  =1          lcd_wcmd(0x38);         //设置LCD为16X2显示,5X7点阵,八位数据接口
 108   1  =1          lcd_wcmd(0x06);         //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
 109   1  =1          lcd_wcmd(0x0c);         //LCD开显示及光标设置(光标不闪烁,不显示"_")
 110   1  =1          lcd_wcmd(0x01);         //清除LCD的显示内容
 111   1  =1  }
 112      =1  
 113      =1  
 114      =1  /*--------------------------------------------------------------*/
 115      =1  #endif
   5          #include"DS12887_1.H"
C51 COMPILER V7.06   LCD12887_1                                                            10/26/2008 21:45:08 PAGE 7   

   1      =1  /*--------------------------------------------------------------*/
   2      =1  //File: DS12887驱动程序
   3      =1  //Date: 08-10-20 ~ 10-23
   4      =1  //Time: 21:20 ~ 16:53
   5      =1  //Source: Web
   6      =1  
   7      =1  
   8      =1  /*--------------------------------------------------------------*/
   9      =1  #ifndef __DS12887_1_H__ 
  10      =1  #define __DS12887_1_H__ 
  11      =1  
  12      =1  
  13      =1  /*--------------------------------------------------------------*/
  14      =1  //接口定义
  15      =1  sbit DS_AS      =       P3^0;   //地址选择      
  16      =1  sbit DS_RW      =       P3^1;   //读写选择
  17      =1  sbit DS_DS      =       P3^2;   //数据选择
  18      =1  sbit DS_IRQ     =       P3^3;   //中断,低电平有效,通过读出0x0c来清除信号
  19      =1  sfr  DS_DAT =   0x90;   //8位数据线P1口
  20      =1  
  21      =1  
  22      =1  /*--------------------------------------------------------------*/
  23      =1  //数据地址定义
  24      =1  #define DS12887_Second          0x00    //秒
  25      =1  #define DS12887_Minute          0x02    //分
  26      =1  #define DS12887_Hour            0x04    //时
  27      =1  #define DS12887_Week            0x06    //星期
  28      =1  #define DS12887_Day                     0x07    //日
  29      =1  #define DS12887_Month           0x08    //月
  30      =1  #define DS12887_Year            0x09    //年
  31      =1  
  32      =1          
  33      =1  /*--------------------------------------------------------------*/
  34      =1  //定义时间类型
  35      =1  typedef struct _SYSTEMTIME_
  36      =1  {
  37      =1          unsigned  char Second;
  38      =1          unsigned  char Minute;
  39      =1          unsigned  char Hour;
  40      =1          unsigned  char Week;
  41      =1          unsigned  char Day;
  42      =1          unsigned  char Month;
  43      =1          unsigned  char Year;
  44      =1          unsigned  char DateString[9];
  45      =1          unsigned  char TimeString[9];
  46      =1  }SYSTEMTIME;
  47      =1  
  48      =1  
  49      =1  /*--------------------------------------------------------------*/
  50      =1  //函数声明
  51      =1  void DS12887_Init(void);                                                                                        //DS12887初始化
  52      =1  void DS12887_Write(unsigned char Address, unsigned char Value);         //DS12887指定地址写入数据
  53      =1  unsigned char DS12887_Read(unsigned char Address);                                      //DS12887指定地址中读出数据     
  54      =1  void DS12887_SetTime(unsigned  char Address, unsigned  char Value);     //设置时间函数
  55      =1  void DS12887_GetTime(SYSTEMTIME *Time);                                                         //读出时间
  56      =1  void DateToStr(SYSTEMTIME *Time);                                                                       //日期转化成字符
  57      =1  void TimeToStr(SYSTEMTIME *Time);                                                                       //时间转化成字符        
  58      =1  
  59      =1  
  60      =1  /*--------------------------------------------------------------*/
  61      =1  //DS12887指定地址写入数据
  62      =1  void DS12887_Write(unsigned char Address, unsigned char Value)
C51 COMPILER V7.06   LCD12887_1                                                            10/26/2008 21:45:08 PAGE 8   

  63      =1  {       
  64   1  =1          DS_AS = 0;
  65   1  =1          DS_DS = 1;
  66   1  =1          DS_RW = 1;
  67   1  =1          DS_AS = 1;
  68   1  =1          DS_DAT= Address; 
  69   1  =1          DS_AS = 0;
  70   1  =1          DS_RW = 0;
  71   1  =1          DS_DAT= Value;
  72   1  =1          DS_RW = 1;
  73   1  =1          DS_AS = 1;
  74   1  =1  }
  75      =1  
  76      =1  
  77      =1  /*--------------------------------------------------------------*/
  78      =1  //DS12887指定地址中读出数据     
  79      =1  unsigned char DS12887_Read(unsigned char Address)
  80      =1  {
  81   1  =1          unsigned char DS_RDAT;
  82   1  =1          DS_AS = 0;
  83   1  =1          DS_DS = 1;
  84   1  =1          DS_RW = 1;
  85   1  =1          DS_AS = 1;
  86   1  =1          DS_DAT= Address;
  87   1  =1          DS_AS = 0;
  88   1  =1          DS_DS = 0;
  89   1  =1          DS_DAT=0xff;
  90   1  =1          DS_RDAT = DS_DAT;
  91   1  =1          DS_DS = 1;
  92   1  =1          DS_AS = 1;
  93   1  =1          return (DS_RDAT);
  94   1  =1  }
  95      =1  
  96      =1  
  97      =1  /*--------------------------------------------------------------*/
  98      =1  //DS12887初始化
  99      =1  void DS12887_Init(void)
 100      =1  {
 101   1  =1          DS12887_Write(0x0a, 0x20);      //启动DS12887
 102   1  =1          DS12887_Write(0x0b, 0x86);      //禁止更新,接下来初始化数据,即写入时间,日期等
 103   1  =1          DS12887_Write(0x0b, 0x06);      //正常更新,二进制格式,24进制小时
 104   1  =1  }
 105      =1  
 106      =1  
 107      =1  /*--------------------------------------------------------------*/
 108      =1  //设置时间函数
 109      =1  void DS12887_SetTime(unsigned  char Address, unsigned  char Value)
 110      =1  {
 111   1  =1          DS12887_Write(0x0b, 0x86);      //禁止更新,接下来初始化数据,即写入时间,日期等
 112   1  =1          DS12887_Write(Address,Value);
 113   1  =1          DS12887_Write(0x0b, 0x06);      //正常更新,二进制格式,24进制小时
 114   1  =1  }
 115      =1  
 116      =1  
 117      =1  /*--------------------------------------------------------------*/
 118      =1  //读出时间
 119      =1  void DS12887_GetTime(SYSTEMTIME *Time)
 120      =1  {
 121   1  =1          Time->Second = DS12887_Read(DS12887_Second);
 122   1  =1          Time->Minute = DS12887_Read(DS12887_Minute);
 123   1  =1          Time->Hour   = DS12887_Read(DS12887_Hour  );
 124   1  =1          Time->Day    = DS12887_Read(DS12887_Day   );
C51 COMPILER V7.06   LCD12887_1                                                            10/26/2008 21:45:08 PAGE 9   

 125   1  =1          Time->Week   = DS12887_Read(DS12887_Week  );
 126   1  =1          Time->Month  = DS12887_Read(DS12887_Month );
 127   1  =1          Time->Year   = DS12887_Read(DS12887_Year  );
 128   1  =1  }
 129      =1  
 130      =1  
 131      =1  /*--------------------------------------------------------------*/
 132      =1  //日期转化成字符
 133      =1  void DateToStr(SYSTEMTIME *Time)
 134      =1  {
 135   1  =1          Time->DateString[0] = Time->Year/10 + '0';
 136   1  =1          Time->DateString[1] = Time->Year%10 + '0';
 137   1  =1          Time->DateString[2] = '-';
 138   1  =1          Time->DateString[3] = Time->Month/10 + '0';
 139   1  =1          Time->DateString[4] = Time->Month%10 + '0';
 140   1  =1          Time->DateString[5] = '-';
 141   1  =1          Time->DateString[6] = Time->Day/10 + '0';
 142   1  =1          Time->DateString[7] = Time->Day%10 + '0';
 143   1  =1          Time->DateString[8] = '\0';
 144   1  =1  }
 145      =1  
 146      =1  
 147      =1  /*--------------------------------------------------------------*/
 148      =1  //时间转化成字符
 149      =1  void TimeToStr(SYSTEMTIME *Time)
 150      =1  {
 151   1  =1          Time->TimeString[0] = Time->Hour/10 + '0';
 152   1  =1          Time->TimeString[1] = Time->Hour%10 + '0';
 153   1  =1          Time->TimeString[2] = ':';
 154   1  =1          Time->TimeString[3] = Time->Minute/10 + '0';
 155   1  =1          Time->TimeString[4] = Time->Minute%10 + '0';
 156   1  =1          Time->TimeString[5] = ':';
 157   1  =1          Time->TimeString[6] = Time->Second/10 + '0';
 158   1  =1          Time->TimeString[7] = Time->Second%10 + '0';
 159   1  =1          Time->TimeString[8] = '\0';
 160   1  =1  }
 161      =1  
 162      =1  
 163      =1  /*--------------------------------------------------------------*/
 164      =1  #endif
   6          
   7          
   8          /*--------------------------------------------------------------*/
   9          unsigned char k;        //键值

⌨️ 快捷键说明

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