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

📄 2051.lst

📁 基于STC89C2051单片机的电子钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE 2051
OBJECT MODULE PLACED IN 2051.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 2051.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                                    //目标器件AT89C2051晶振12M
   2          //单键操作实现校时和每天任意两个时间点定闹
   3          
   4          //在有闹铃响时按键则停闹
   5          //在正常模式时按键则开启或关闭闹铃功能
   6          
   7          //查看闹铃时间:在正常模式时第1次按键显示第1闹铃时间,第2次按键显示第2闹铃时间,3秒后返回正常模式
   8          
   9          //设置闹铃时间:在正常模式时在3秒内连按3次键进入闹钟设定模式,此时若不按键5秒后返回正常模式
  10          //继续按键则时数跳变,再按键分数跳变,再按键完成第1闹铃时间设置等待确认
  11          //继续按键则进入第2闹铃时间设置否则5秒后返回正常模式
  12          
  13          //设置时钟时间:在正常模式时长按键5秒则进入校时模式,设置过程与闹铃模式相似,设置完成后返回正常模式
  14          //2008年10月12日        I2C
  15          
  16          //头文件包含
  17          #include <reg52.h>
  18          #define uchar unsigned char
  19          #define uint unsigned int
  20          #define CYCLE0 50240    //每隔CYCLE0微秒T0产生中断
  21          #define CYCLE1 20000    //每隔CYCLE1微秒T1产生中断
  22          #define num 400         //显示扫描延时量
  23          
  24          #define Second          0               //时钟秒单元
  25          #define Minute          1               //时钟分单元
  26          #define Hour                2           //时钟时单元
  27          #define Minute_n1       3               //闹铃时单元
  28          #define Hour_n1         4               //闹铃分单元
  29          #define Minute_n2       5               //闹铃时单元
  30          #define Hour_n2         6               //闹铃分单元
  31          
  32          #define DispOut         P3                      //字符码由P3输出
  33          //#define DisScan               P1                      //位扫描码由P1输出
  34          
  35          //数据缓冲区
  36          uchar TimeData[7];                              //时间数据缓冲区
  37          uchar DispData[4];                              //显示缓冲区
  38          
  39          //共阳数码管0~9字符表
  40          uchar code Disp[10]={0xc0,0xf9,0x64,0x70,0x59,0x52,0x42,0xf8,0x40,0x50};
  41          
  42          //全局变量定义
  43          uchar KeyVal,f;                                 //键值单元
  44          
  45          //内部可寻址位定义
  46          bit SecondFlag;                                         //时钟秒信号位
  47          bit SecondFlashFlag;                            //时钟秒闪信号位
  48          bit AddFlag;                                            //设定模式增量信号位
  49          
  50          bit TimeSetFlag;                                        //校时模式标志位
  51          bit TimingSetFlag;                                      //闹铃模式标志位
  52          bit SetModeFlag;                                        //设置模式标志位
  53          
  54          bit TimingFunFlag;                                      //闹铃功能的标志位
  55          bit TimingSuitedFlag;                           //闹铃时间匹配标志位
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 2   

  56          bit BeeNopFlag;                                         //闹铃输出反相信号位
  57          bit BeeMusicFlag;                                       //闹铃声次数信号位
  58          bit BeeSpaceFlag;                                       //闹铃声间隔信号位
  59          bit TimingDisSelectFlag;                    //闹铃时间显示选取择控制位
  60          
  61          bit KeyTimeOutFlag;                                     //连续击键超时计数控制位
  62          bit UnpressKeyTimeFlag;                 //无按键计时控制位
  63          
  64          //输出连接定义
  65          sbit Hour_SWei=         P1^5;                   //时十位驱动
  66          sbit Hour_GWei=         P1^4;                   //时个位驱动
  67          sbit Min_SWei=          P1^3;                   //分十位驱动
  68          sbit Min_GWei=          P1^2;                   //分个位驱动
  69          //sbit Timing_LED=      P3^4;                   //模式指示长亮时表示闹钟功能启动
  70          sbit Button_S1=         P1^7;                   //按键S1
  71          sbit Bee_Out=      P1^6;                        //闹铃输出
  72          
  73          //函数声明
  74          void Delay(uint i);                                     //延时函数
  75          void System_init(void);                 //系统初始化函数
  76          void TimerMake(void);                           //计时函数
  77          void Display(void);                                     //显示函数
  78          void KeyScan(void);                                     //键值产生函数
  79          void KeyFunction(void);                 //键功能处理函数
  80          void TimeCompate(void);                 //时间比较函数
  81          void ChangeData(uchar *x);          //设置模式自动增量函数
  82          void TimeDisData(void);                 //时钟数据显示处理函数
  83          void TimingDisData(void);               //闹铃数据显示处理函数
  84          void ClearFlag(void);
  85          void StartBuzze(void);
  86          void T0_intermit(void);                 //T0中断函数
  87          void T1_intermit(void);                 //T1中断函数
  88          
  89          //主函数
  90          void main(void)
  91          {
  92   1              uchar DispScanTime;
  93   1              uchar KeyTimeOut;
  94   1              uchar UnpressKeyTime;   
  95   1              
  96   1              System_init();
  97   1              
  98   1              while(1)
  99   1              {
 100   2                      DispScanTime++;
 101   2                      //显示扫描
 102   2                      if(DispScanTime%25==0)  
 103   2                              Display();                                              
 104   2                      //键盘扫描
 105   2                      if(DispScanTime>250)
 106   2                      {
 107   3                              DispScanTime=0;
 108   3                              Bee_Out=1;                              //关闭蜂鸣声
 109   3                              KeyScan();
 110   3                              KeyFunction();
 111   3                      }
 112   2                      //计时
 113   2                      if(SecondFlag)
 114   2                      {
 115   3                              SecondFlag=0;
 116   3                              //时钟计时
 117   3                              TimerMake();
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 3   

 118   3                              //连续击键超时计时
 119   3                              if(KeyTimeOutFlag)
 120   3                              {
 121   4                                      if(++KeyTimeOut>=3)
 122   4                                              ClearFlag();            //返回正常模式
 123   4                              }
 124   3                              else
 125   3                                      KeyTimeOut=0;
 126   3                              //无按键计时                    
 127   3                              if(UnpressKeyTimeFlag)
 128   3                              {
 129   4                                      if(++UnpressKeyTime>=5)
 130   4                                              ClearFlag();                    
 131   4                              }
 132   3                              else
 133   3                                      UnpressKeyTime=0;                               
 134   3                      }               
 135   2                      //闹铃启动
 136   2                      if(TimingFunFlag&&!SetModeFlag&&!TimingSuitedFlag)
 137   2                      {
 138   3                              TimeCompate();          //时间比较
 139   3                      //      Timing_LED=0;                   //LED亮表示闹铃功能生效                                                                                                 
 140   3                      }                       
 141   2                      //声光闹铃输出
 142   2                      else if(TimingSuitedFlag&&BeeSpaceFlag)
 143   2                      {
 144   3                              BeeNopFlag=BeeMusicFlag;
 145   3                              Bee_Out=!BeeNopFlag;                            //取反再输出                    
 146   3                      //      Timing_LED=!BeeSpaceFlag;               //闹铃输出时LED闪烁
 147   3                      }
 148   2              //      else    
 149   2                      //      Timing_LED=1;                                                                                                                   
 150   2              }
 151   1      }
 152          
 153          //初始化函数
 154          void System_init(void)
 155          {
 156   1              //置显示初值
 157   1              TimeData[Hour]=12;                 //时间初值
 158   1              TimeData[Minute]=58;
 159   1      
 160   1              TimeData[Hour_n1]=6;       //第一组闹铃初值
 161   1              TimeData[Minute_n1]=36;
 162   1      
 163   1              TimeData[Hour_n2]=7;       //第二组闹铃初值
 164   1              TimeData[Minute_n2]=15; 
 165   1              //初始化P3口                    
 166   1              P1=0xff;
 167   1              //设T0,T1为方式1                                                                
 168   1              TMOD=0x11;              
 169   1              //装T0初值
 170   1              TH0=(-CYCLE0)/256;
 171   1              TL0=(-CYCLE0)%256;
 172   1              //装T1初值
 173   1              TH1=(-CYCLE1)/256;
 174   1              TL1=(-CYCLE1)%256;                                              
 175   1              //开中断及启动T0
 176   1              EA =1;

⌨️ 快捷键说明

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