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

📄 gongcheng28.lst

📁 1602显示DS1302和按键对时源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V9.05   GONGCHENG28                                                           04/01/2012 18:06:48 PAGE 1   


C51 COMPILER V9.05, COMPILATION OF MODULE GONGCHENG28
OBJECT MODULE PLACED IN gongcheng28.OBJ
COMPILER INVOKED BY: D:\电路仿真\C51\BIN\C51.EXE gongcheng28.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          
   7          sbit  sck=P2^7;
   8          sbit  io = P2^6;
   9          sbit  res = P2^5;
  10          
  11          sbit rs=P2^0;    //rs1602
  12          sbit rw=P2^1;    //rw
  13          sbit en=P2^2;    //en
  14          
  15          sbit key0=P3^0;
  16          sbit key1=P3^1;
  17          sbit key2=P3^2;
  18          sbit key3=P3^3;
  19          
  20          sbit beep=P3^5;
  21          
  22          uchar time_date[7] ={12,4,1,7,17,55,30};//年,yue ,日,星期, 时,分,秒
  23          uchar write_add[7] ={0x8c,0x88,0x86,0x8a,0x84,0x82,0x80};        //写的地址
  24          uchar read_add[7] ={0x8d,0x89,0x87,0x8b,0x85,0x83,0x81};   //读的地址
  25          uchar disp[13],dispb[8];
  26          uchar nian,nian1,nian2,yue,yue1,yue2,ri,ri1,ri2,zhou1,zhou2,shi,shi1,shi2,fen1,fen2;
  27          uchar an_num;
  28          
  29          
  30          
  31          void delay(int z)
  32          {
  33   1              int x,y;
  34   1              for(x=z;x>0;x--)
  35   1              for(y=110;y>0;y--);
  36   1      }
  37          void write_cmd(uchar cmd)       //1602
  38          {
  39   1               rs=0;
  40   1               P0=cmd;
  41   1               delay(5);
  42   1               en=1;
  43   1               delay(5);
  44   1               en=0;
  45   1      }
  46          void write_date(uchar date)        //1602
  47          {
  48   1              rs=1;
  49   1              P0=date;
  50   1              delay(5);
  51   1              en=1;
  52   1              delay(5);
  53   1              en=0;
  54   1      }
  55          void init()                                //1602初始化
C51 COMPILER V9.05   GONGCHENG28                                                           04/01/2012 18:06:48 PAGE 2   

  56          {
  57   1              rw=0 ;
  58   1              rs=0 ;
  59   1              en=0;
  60   1              write_cmd(0x38); //16X2  
  61   1              write_cmd(0x0c); //
  62   1              write_cmd(0x06); //
  63   1              write_cmd(0x01); //清屏
  64   1      }
  65          
  66          void write_ds1302_byte(uchar date);
  67          void write_ds1302(uchar add,uchar date);
  68          uchar read_ds1302(uchar add);    //返回的为十六进制数
  69           void set_rtc(void);
  70           void read_rtc(void);                                                     
  71           void time_pros(void);
  72           void time_pros0(void);
  73          void display1(void);
  74          
  75          
  76                  void write_ds1302_byte(uchar date)      //单字节写
  77                  {  
  78   1                      uchar i;
  79   1                      for(i=0;i<8;i++ )
  80   1                      {
  81   2                              sck=0;
  82   2                              io=date&0x01;
  83   2                              date=date>>1;
  84   2                              sck=1;
  85   2                      }
  86   1              }
  87          
  88                  void write_ds1302(uchar add,uchar date)
  89                                  {
  90   1                                      res =0;
  91   1                                      _nop_();
  92   1                                      sck = 0;
  93   1                                      _nop_();
  94   1                                      res = 1;
  95   1                                      _nop_();
  96   1                                       write_ds1302_byte(add);
  97   1                                       write_ds1302_byte(date);
  98   1                                      res =0;
  99   1                                      _nop_();
 100   1                                      io = 1;
 101   1                                      sck = 1;
 102   1                              }
 103          
 104          
 105                  uchar read_ds1302(uchar add)
 106                                  {
 107   1                                      uchar i,value;
 108   1                                              res = 0;
 109   1                                              _nop_();
 110   1                                              sck = 0;        
 111   1                                              _nop_();
 112   1                                              res = 1;        
 113   1                                              _nop_();
 114   1                                              write_ds1302_byte(add);
 115   1                                              for(i = 0;i<8;i++ )
 116   1                                              {
 117   2                                                      value = value>>1; //value是字符型
C51 COMPILER V9.05   GONGCHENG28                                                           04/01/2012 18:06:48 PAGE 3   

 118   2                                                      sck = 0;
 119   2                                                      if(io == 1)
 120   2                                                      value = value|0x80;
 121   2                                                      sck = 1;
 122   2                                              }
 123   1                                              res = 0;
 124   1                                               _nop_();
 125   1                                              sck = 0;
 126   1                                              _nop_();
 127   1                                              sck = 1;
 128   1                                              io = 0;
 129   1                                              _nop_();
 130   1                                              return value;
 131   1                              } 
 132          
 133          
 134          
 135                          void set_rtc(void)      //设置初始时间
 136                          {
 137   1                              uchar i,j;
 138   1                              for(i=0;i<7;i++)
 139   1                              {
 140   2                                       j=time_date[i]/10;                //十进制转化为十六进制
 141   2                                       time_date[i]=time_date[i]%10;
 142   2                                       time_date[i]=time_date[i]+j*16;                
 143   2                              }
 144   1                                write_ds1302(0x8e,0x00);       //去除写保护 ,0x8e是写保护寄存器的地址
 145   1                              for(i =0;i<7;i++)
 146   1                              {
 147   2                              write_ds1302(write_add[i],time_date[i]);
 148   2                              }
 149   1                               write_ds1302(0x8e,0x80);        //加写保护
 150   1                      }
 151                          
 152                                                  
 153                   void read_rtc(void)     //读出时间,存入数组中,十六进制形式
 154                          {
 155   1                              uchar i;
 156   1                              for(i= 0;i<7;i++)
 157   1                              {
 158   2                                      time_date[i]=read_ds1302(read_add[i]);
 159   2                              }
 160   1                      }
 161          
 162                          void time_pros0(void)             //把读出的时间转化十位个位
 163                          {
 164   1                              nian1=time_date[0]/16;
 165   1                              nian2=time_date[0]%16;
 166   1                              nian=nian1*10+nian2;
 167   1                              yue1=time_date[1]/16;
 168   1                              yue2=time_date[1]%16;
 169   1                              yue=yue1*10+yue2;
 170   1                              ri1=time_date[2]/16;
 171   1                              ri2=time_date[2]%16;
 172   1                              ri=ri1*10+ri2;
 173   1                              zhou1=time_date[3]/16;
 174   1                              zhou2=time_date[3]%16;
 175   1                              shi1=time_date[4]/16;
 176   1                              shi2=time_date[4]%16;
 177   1                              shi=shi1*10+shi2;
 178   1                              fen1=time_date[5]/16;
 179   1                              fen2=time_date[5]%16;

⌨️ 快捷键说明

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