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

📄 main.lst

📁 改程序为基于STC单片机的实时时钟芯片8563在液晶屏上显示实时时钟的程序。 单片机型号为:STC89C52RC 用的是1602字符液晶
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  10/24/2008 14:18:00 PAGE 1   


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

line level    source

   1          
   2          #include<reg52.h>
   3          #include <intrins.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int 
   6          
   7          #define true 1
   8          #define false 0 
   9          
  10          sbit SDA=P3^7;
  11          sbit SCL=P3^6;
  12          
  13          sbit write=0xA2;
  14          sbit read=0xA3;
  15          
  16          
  17          sbit a_138=P2^2;
  18          sbit b_138=P2^3;
  19          sbit c_138=P2^4;
  20          sbit cs_138=P2^6;
  21          sbit cs_373=P2^5;
  22          
  23          
  24          unsigned code zima1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  25                                  //{0x88,0x83,0xc6,0xa1,0x86,0x8e};
  26          unsigned char zima2[10];
  27          unsigned code zima3[]={0xbf};//显示"-";
  28          
  29          /*以下是显示函数的声明*/
  30          void delay();
  31          void xianshi();
  32          void shuju(unsigned int i);
  33          
  34          /*---------------以下是pcf8563的函数声明---------------------------*/
  35          void delay_iic(void);
  36          void I2CStart(void);                    
  37          void I2CStop(void);                     
  38          bit WaitAck(void);                           
  39          void SendAck(void);           
  40          void SendNotAck(void);
  41          void SendNotAck(void);
  42          void I2CSendByte(uchar);
  43          uchar I2CReceiveByte(void);
  44          void GetPCF8563(uchar ,uchar ,uchar *);
  45          void SetPCF8563(uchar ,uchar );
  46          void SetAlarm(uchar alarmtype,uchar count);
  47          void CleanAlarm(void);    
  48          void I2CInit(void);
  49          
  50          
  51          main()
  52          {
  53   1              idata uchar rom_sed[9];            //定义保存时间初值的数组
  54   1          idata uchar rom_rec[7];            //定义保存读取时间的数组
  55   1          idata uint i;
C51 COMPILER V7.50   MAIN                                                                  10/24/2008 14:18:00 PAGE 2   

  56   1         
  57   1               cs_138=1;
  58   1               cs_373=1;
  59   1           rom_sed[0]=0x00; rom_sed[1]=0x00;  //要发送的数据初始化
  60   1           rom_sed[2]=0x00; rom_sed[3]=0x05;
  61   1           rom_sed[4]=0x11; rom_sed[5]=0x15;
  62   1           rom_sed[6]=0x04; rom_sed[7]=0x03;
  63   1           rom_sed[8]=0x07;
  64   1      
  65   1          for (i=0;i<9;i++)
  66   1           {
  67   2             SetPCF8563(i,rom_sed[i]);        //设定时间初值,2007年03月15日11点05分0秒
  68   2           }
  69   1         
  70   1      
  71   1           while(1)
  72   1            {
  73   2               
  74   2                       GetPCF8563(0x02,0x07, rom_rec); //读取时间信息,并将其保存在rom_rec 中 
  75   2               //for(i=0;i<15;i++)
  76   2                       xianshi();
  77   2               zima2[6]=(rom_rec[0]&0xf0)/16;      //BCD码取各个位
  78   2               zima2[7]=rom_rec[0]&0x0f;      // rom_rec[0]中存放的是"秒"数据
  79   2      
  80   2                       xianshi();
  81   2      
  82   2                       zima2[3]=(rom_rec[1]&0xf0)/16;      //BCD码取各个位
  83   2               zima2[4]=rom_rec[1]&0x0f;      // rom_rec[1]中存放的是"分"数据
  84   2       
  85   2                       xianshi();
  86   2      
  87   2                       zima2[0]=(rom_rec[2]&0x30)/16;      //BCD码取各个位
  88   2               zima2[1]=rom_rec[2]&0x0f;      // rom_rec[2]中存放的是"小时"数据
  89   2                       xianshi();
  90   2               
  91   2            }
  92   1      
  93   1      
  94   1      }
  95          
  96          
  97          
  98          
  99          void delay()
 100          {
 101   1              unsigned char i;
 102   1              for(i=0;i<80;i++);
 103   1      }
 104          
 105          
 106          void xianshi(void)   //LED显示的数据
 107           {
 108   1                  
 109   1              P0=zima1[zima2[0]];//所要显示的数据
 110   1                      P2=0xbf|0x60; //所要显示的数据位置
 111   1              delay();
 112   1                      P0=zima1[zima2[1]];//所要显示的数据
 113   1                      P2=0xbb|0x60; //所要显示的数据位置
 114   1              delay();
 115   1                      P0=zima3[zima2[2]];//所要显示的"-";
 116   1                      P2=0xb7|0x60; //所要显示的数据位置
 117   1              delay(); 
C51 COMPILER V7.50   MAIN                                                                  10/24/2008 14:18:00 PAGE 3   

 118   1                      P0=zima1[zima2[3]];//所要显示的数据
 119   1                      P2=0xb3|0x60;//所要显示的数据位置
 120   1              delay();
 121   1                      P0=zima1[zima2[4]];//所要显示的数据
 122   1                      P2=0xaf|0x60;//所要显示的数据位置
 123   1              delay();
 124   1                      P0=zima3[zima2[5]];//所要显示的"-";
 125   1                      P2=0xab|0x60;//所要显示的数据位置
 126   1                  delay(); 
 127   1                      P0=zima1[zima2[6]];//所要显示的数据
 128   1                      P2=0xa7|0x60;//所要显示的数据位置
 129   1                  delay();
 130   1                      P0=zima1[zima2[7]];//所要显示的数据
 131   1                      P2=0xa3|0x60;//所要显示的数据位置
 132   1                  delay();   
 133   1       }
 134          
 135           void shuju(unsigned int i)
 136            {
 137   1              unsigned int k;
 138   1              zima2[0]=i/10000;    //所要显示的数字
 139   1              xianshi();
 140   1              zima2[1]=(i/1000)%10;
 141   1              xianshi();
 142   1              zima2[2]=(i/100)%10;
 143   1              xianshi();
 144   1              zima2[3]=(i/10)%10;
 145   1              xianshi();
 146   1              zima2[4]=i%10;
 147   1              xianshi();
 148   1              for(k=0;k<1000;k++)
 149   1              xianshi();
 150   1        }
 151          
 152          
 153          
 154           ///////////*以下是8563的初始化*///////////////
 155           void delay_iic(void)              /*延时子程序*/
 156           { 
 157   1         _nop_();
 158   1       }
 159          
 160          
 161          void I2CInit()
 162          {
 163   1        SCL=0;
 164   1        I2CStop();
 165   1      }
 166          
 167          void I2CStart(void)                 /*启动I2C总线*/
 168          { 
 169   1        EA=0;
 170   1        SDA=1; 
 171   1        delay_iic();
 172   1        SCL=1; 
 173   1        delay_iic();
 174   1        SDA=0; 
 175   1        delay_iic(); 
 176   1        SCL=0;
 177   1        delay_iic();
 178   1      }
 179          
C51 COMPILER V7.50   MAIN                                                                  10/24/2008 14:18:00 PAGE 4   

 180          void I2CStop(void)                  /*停止I2C总线*/
 181          {
 182   1       SDA=0;
 183   1       delay_iic();
 184   1       SCL=1; 
 185   1       delay_iic(); 
 186   1       SDA=1; 
 187   1       delay_iic(); 
 188   1       SCL=0; 
 189   1       delay_iic(); 
 190   1       EA=1;
 191   1      }
 192          
 193          bit WaitAck(void)                 
 194          {
 195   1        uchar errtime=255;                //因故障接收方无ACK,超时值为255。
 196   1        SDA=1;
 197   1        delay_iic();
 198   1        SCL=1;
 199   1        delay_iic();
 200   1        while(SDA) 
 201   1         { 
 202   2           errtime--; 
 203   2           if (!errtime) 
 204   2             { 
 205   3               I2CStop();
 206   3               //SystemError=0x11;
 207   3               return false;
 208   3              }
 209   2           }
 210   1         SCL=0;
 211   1        return true;
 212   1       }
 213          
 214          void SendAck(void)             
 215          {
 216   1        SDA=0; 
 217   1        delay_iic();
 218   1        SCL=1; 
 219   1        delay_iic();
 220   1        SCL=0;
 221   1      }
 222          
 223          void SendNotAck(void)        
 224          { 
 225   1        SDA=1;
 226   1        delay_iic();
 227   1        SCL=1; 
 228   1        delay_iic();
 229   1        SCL=0;
 230   1      }
 231          
 232          void I2CSendByte(uchar ch)    /*发送一个字节*/
 233          {
 234   1        uchar i=8;
 235   1        while (i--)
 236   1        {
 237   2          SCL=0;
 238   2          delay_iic();
 239   2          SDA=(bit)(ch&0x80);
 240   2          ch<<=1; 
 241   2          delay_iic();
C51 COMPILER V7.50   MAIN                                                                  10/24/2008 14:18:00 PAGE 5   

 242   2          SCL=1; 
 243   2          delay_iic();
 244   2         }
 245   1        SCL=0;
 246   1       }
 247          
 248          uchar I2CReceiveByte(void)   /*接收一个字节*/
 249          {
 250   1        uchar i=8;
 251   1        uchar ddata=0;
 252   1        SDA=1;
 253   1        while (i--)
 254   1        {
 255   2          ddata<<=1;
 256   2          SCL=0;
 257   2          delay_iic();
 258   2          SCL=1;
 259   2          delay_iic();
 260   2          ddata|=SDA;
 261   2        }
 262   1        SCL=0;
 263   1        return ddata;
 264   1       }
 265          
 266          /*-- 以下函数的功能为:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype

⌨️ 快捷键说明

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