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

📄 clock.lst

📁 单片机定时器
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   CLOCK                                                                 10/11/2007 17:28:37 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN CLOCK.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CLOCK.C ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2                                  单片机教学打铃控制器
   3                  芯        片:AT89S52
   4                  晶        振:频率12MHz
   5                  按键说明:
   6                                    Ring_Set   P1^0//时间设置
   7                                    Time_Set   P1^1//闹铃设置
   8                                    Left_Move  P1^2//向左移动
   9                                    Add        P1^3//数据增加
  10                                    Sub        P1^4//数据减小
  11                                    Right_Move P1^5//向右移动
  12                                    ESC        P1^6//取消
  13                                    Enter      P1^7//确定
  14          
  15          */
  16          #include "AT89X52.H"
  17          #include "intrins.h"
  18          
  19          #define uchar unsigned char
  20          #define AddressWrite24C02 0xa0//24C02写地址
  21          #define AddressRead24C02  0xa1//24C02读地址
  22          
  23          uchar ClockData[]={0,0,12};//时钟数据
  24          uchar RingDataH[40];//40个闹铃数据(时)
  25          uchar RingDataL[40];//40个闹铃数据(分)
  26          uchar RingCount=0;//闹铃总数
  27          uchar counter=0;
  28          uchar I2cStartByte=0xaa;//I2c开始标志字
  29          uchar I2cEndByte=0x55;//I2c结束标志字
  30          uchar S_Ray_Flag=0;//秒闪标志1
  31          sbit S_Ray=P3^1;//秒闪
  32          sbit s_ray=P3^0;//秒闪标志2
  33          sbit Alarm=P3^4;//闹铃信号
  34          sbit SDA=P3^2;//I2C BUS数据
  35          sbit SCL=P3^3;//I2C BUS时钟
  36          
  37          //---------------------T1中断,产生时钟-------------------------------
  38          void Timer1(void)interrupt 3 using 1
  39          {
  40   1              TH1=0x3c;
  41   1              TL1=0xb0;
  42   1              if(counter%10==0)
  43   1              {
  44   2                      s_ray=~s_ray;
  45   2                      if(S_Ray_Flag)S_Ray=0;
  46   2                      else S_Ray=~S_Ray;
  47   2              }
  48   1              if(counter==20)
  49   1              {
  50   2                      counter=1;
  51   2                      if(ClockData[0]==59)
  52   2                      {
  53   3                              ClockData[0]=0;
  54   3                              if(ClockData[1]==59)
  55   3                              {
C51 COMPILER V8.08   CLOCK                                                                 10/11/2007 17:28:37 PAGE 2   

  56   4                                      ClockData[1]=0;
  57   4                                      if(ClockData[2]==23)
  58   4                                      {
  59   5                                              ClockData[2]=0;
  60   5                                      }
  61   4                                      else ClockData[2]++;//时
  62   4                              }
  63   3                              else ClockData[1]++;//分
  64   3                      }
  65   2                      else ClockData[0]++;//秒
  66   2              }
  67   1              else counter++; 
  68   1      }
  69          //------------------BCD码转换成字形码的程序-----------------------------
  70          uchar BCD_to_Grapheme(uchar Data)
  71          {
  72   1              switch(Data)
  73   1              {
  74   2                      case 0:return 0x3f;
  75   2                      case 1:return 0x06;
  76   2                      case 2:return 0x5b;
  77   2                      case 3:return 0x4f;
  78   2                      case 4:return 0xe6;
  79   2                      case 5:return 0xed;
  80   2                      case 6:return 0xfd;
  81   2                      case 7:return 0x07;
  82   2                      case 8:return 0xff;
  83   2                      case 9:return 0xef;
  84   2              }
  85   1      }
  86          
  87          //-----------------------------得到位地址的程序-------------------------
  88          uchar GetClockBit(uchar ShowBit)
  89          {
  90   1              switch(ShowBit)
  91   1              {
  92   2                      case 0:return 0xdf;
  93   2                      case 1:return 0xef;
  94   2                      case 2:return 0xf7;
  95   2                      case 3:return 0xfb;
  96   2                      case 4:return 0xfd;
  97   2                      case 5:return 0xfe;
  98   2              }
  99   1      }
 100          //---------------------延时count个ms的程序-------------------------
 101          void Delay(uchar count)
 102          {
 103   1              uchar i;
 104   1              while(count--)
 105   1              {
 106   2                      for(i=0;i<123;i++)
 107   2                      ;
 108   2              }
 109   1      }
 110          //-----------------------动态扫描的程序-------------------------------
 111          void Display(uchar *ShowAddress,uchar FlagBit)
 112          {
 113   1              uchar ShowBit;
 114   1              uchar Show;
 115   1              for(ShowBit=0;ShowBit<6;ShowBit++)
 116   1              {
 117   2                      if(FlagBit!=5)
C51 COMPILER V8.08   CLOCK                                                                 10/11/2007 17:28:37 PAGE 3   

 118   2                      {
 119   3                              switch(ShowBit)
 120   3                              {
 121   4                                      case 0:Show=BCD_to_Grapheme((*ShowAddress)%10);break;
 122   4                                      case 1:Show=BCD_to_Grapheme((*ShowAddress)/10);break;
 123   4                                      case 2:Show=BCD_to_Grapheme((*(ShowAddress+1))%10);break;
 124   4                                      case 3:Show=BCD_to_Grapheme((*(ShowAddress+1))/10);break;
 125   4                                      case 4:Show=BCD_to_Grapheme((*(ShowAddress+2))%10);break;
 126   4                                      case 5:Show=BCD_to_Grapheme((*(ShowAddress+2))/10);break;
 127   4                              }
 128   3                      }
 129   2                      P2=0xff;
 130   2                      switch(FlagBit)
 131   2                      {
 132   3                              case 0:P0=Show;break;
 133   3                              case 1://设秒闪动
 134   3                                              if(s_ray && (ShowBit==0||ShowBit==1))P0=0x40;
 135   3                                              else P0=Show;
 136   3                                              break;
 137   3                              case 2://设分闪动
 138   3                                              if(s_ray && (ShowBit==2||ShowBit==3))P0=0x40;
 139   3                                              else P0=Show;
 140   3                                              break;
 141   3                              case 3://设时闪动
 142   3                                              if(s_ray && (ShowBit==4||ShowBit==5))P0=0x40;
 143   3                                              else P0=Show;
 144   3                                              break;
 145   3                              case 4://调闹铃时的闪动
 146   3                                              if(s_ray)P0=0x40;
 147   3                                              else P0=Show;
 148   3                                              break;
 149   3                              case 5://调闹铃时的显示
 150   3                                              P0=*(ShowAddress+ShowBit);
 151   3                                              break;
 152   3                      }       
 153   2                      P2=GetClockBit(ShowBit);
 154   2                      Delay(1);
 155   2              }
 156   1      }
 157          
 158          //----------------得到键盘值的程序----------------------------------
 159          uchar GetKey()
 160          {
 161   1              switch(P1)
 162   1              {
 163   2                      case 0xff:return 0;
 164   2                      case 0xfe:return 1;
 165   2                      case 0xfd:return 2;
 166   2                      case 0xfb:return 3;
 167   2                      case 0xf7:return 4;
 168   2                      case 0xef:return 5;
 169   2                      case 0xdf:return 6;
 170   2                      case 0xbf:return 7;
 171   2                      case 0x7f:return 8;
 172   2              }
 173   1      }
 174          
 175          //--------------------------定义I2C接口子程序-------------------------
 176          /*
 177          I2C特殊字节定义
 178          */
 179          void I2cWait()//等待
C51 COMPILER V8.08   CLOCK                                                                 10/11/2007 17:28:37 PAGE 4   

 180          {
 181   1              _nop_();
 182   1              _nop_();
 183   1      }
 184                  
 185          void I2cStart()//开始
 186          {       
 187   1              SDA=1;
 188   1              SCL=1;
 189   1              I2cWait();
 190   1              SDA=0;
 191   1              I2cWait();
 192   1              SCL=0;
 193   1      }
 194          
 195          void I2cStop()//停止
 196          {
 197   1              SDA=0;
 198   1              I2cWait();
 199   1              SCL=1;
 200   1              I2cWait();
 201   1              SDA=1;
 202   1      }
 203          void I2cSendByte(uchar ByteData)//发送
 204          {
 205   1              uchar i;
 206   1              for(i=0;i<8;i++)
 207   1              {
 208   2                      if(ByteData&0x80)
 209   2                              SDA=1;
 210   2                      else
 211   2                              SDA=0;
 212   2                      ByteData<<=1;
 213   2                      I2cWait();
 214   2                      SCL=1;
 215   2                      I2cWait();
 216   2                      SCL=0;
 217   2                      I2cWait();
 218   2              }
 219   1              SDA=1;
 220   1              I2cWait();
 221   1              SCL=1;
 222   1              I2cWait();
 223   1              SCL=0;
 224   1              I2cWait();
 225   1      }
 226          
 227          uchar I2cReceiveByte()//接收
 228          {

⌨️ 快捷键说明

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