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

📄 main.lst

📁 单片机实现闹钟功能
💻 LST
字号:
C51 COMPILER V8.05a   MAIN                                                                 08/07/2007 23:36:31 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst)
                    - OBJECT(main.obj)

line level    source

   1          //*************************************************************************************************
   2          //*************************************************************************************************
   3          //**<程序名>:数字时钟。                                                                                                                                                 **
   4          //**<功能>:可以显示时实时间,同时可以用按键进行设置。                                                                                   **
   5          //**<版本说明>:这是第1.2版。                                                                                                                                    **
   6          //**<作者>:程沛                                                                                                                                                                 **
   7          //**<完成时间>:2007年8月7日                                                                                                                                     **
   8          //**<联系方式>:superyongzhe@163.com                                                                                                                     **
   9          //*************************************************************************************************
  10          //*************************************************************************************************
  11          #include "includes.h"
  12          
  13          
  14          #define TIME1H 0x3C
  15          #define TIME1L 0xB0             //定时器1溢出时间:50ms
  16          
  17          #define SCANPORT P2             //4×4键盘扫描端口,低4位是行线,高4位是列线。
  18          
  19          
  20          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  21          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  22          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  23          bit b_KeyShock=0;                                       //键盘防抖动标志位。
  24                                                                                  //当按键中断产生时,首先判断此位。
  25                                                                                  //0--执行键盘扫描及键码处理程序;1--不执行。
  26          
  27          bit b_KillShock=0;                                      //防抖标志清除位:0--不清除;1--清除。
  28          
  29          unsigned char uc_KillCount=1;           //抖动标志清除计数,使用定时器1。
  30          
  31          
  32          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  33          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描开启标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  34          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  35          bit b_KeyScan=0;                                        //0--不扫描;
  36                                                                                  //1--扫描。
  37          
  38          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  39          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD定时刷新时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  40          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  41          TIME stCurrentTime;                                       //存储从DS1302获取的时间,以及显示字符串。
  42          
  43          bit b_TimeRefresh=0;                              //定时刷新标志。
  44          
  45          unsigned char uc_TimeRefresh=0;           //定时刷新计数。
  46          
  47          
  48          
  49          void main()
  50          {
  51   1      
  52   1              vdInitialize();                                    //初始化LCD。
  53   1      
  54   1              vDSInitialize();                                   //初始化DS1302。
C51 COMPILER V8.05a   MAIN                                                                 08/07/2007 23:36:31 PAGE 2   

  55   1      
  56   1              SCANPORT=0x0F;                                     //初始化键盘。
  57   1      
  58   1              vWriteCMD(0x81);
  59   1              vShowChar("Date:");
  60   1              vWriteCMD(0xC1);
  61   1              vShowChar("Time:");
  62   1              
  63   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  64   1              IT0=1;                   //     中断方式:下降沿。
  65   1              EX0=1;                   //     开启外部中断。
  66   1      
  67   1      
  68   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  69   1              TH1=TIME1H;
  70   1              TL1=TIME1L;
  71   1              TR1=1;                   //开启定时器1
  72   1              ET1=1;                   //开定时器1中断
  73   1      
  74   1      
  75   1              EA=1;
  76   1              
  77   1      
  78   1              
  79   1              while(1)
  80   1              {
  81   2      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  82   2      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD定时刷新时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  83   2      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  84   2              if(b_TimeRefresh==1)                                            //没900ms执行1次,刷新LCD时间显示。
  85   2                      {
  86   3                      b_TimeRefresh=0;                                                //恢复标志。
  87   3                      vDSGetTime(&stCurrentTime);                             //获取当前时间并将其存入指定数组。
  88   3      
  89   3                      vDateString(&stCurrentTime);                    //生成日期字符串。
  90   3                      vTimeString(&stCurrentTime);                    //生成时间字符串。
  91   3      
  92   3                      vWriteCMD(0x86);                                                //向LCD写入当前时间。
  93   3                      vShowChar(stCurrentTime.ucaDateString);
  94   3                      vWriteCMD(0xC6);
  95   3                      vShowChar(stCurrentTime.ucaTimeString);
  96   3                      }
  97   2      
  98   2      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  99   2      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描及键码处理>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 100   2      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 101   2              if(b_KeyScan==1)                   //如果有按键按下,则进行按键扫描和键码处理。
 102   2                      {
 103   3                      b_KeyScan=0;
 104   3                      vKeyProcess(ucKeyScan());
 105   3                      }
 106   2              }
 107   1      }
 108          
 109          //*************************************************************************************************
 110          //*                                                                                                                                                                                               *
 111          //*             ******************************外部中断0,用于开启键盘扫描及键码处理******************     *
 112          //*                                                                                                                                                                                               *
 113          //*************************************************************************************************
 114          void vINT0(void) interrupt 0
 115          {
 116   1              if(b_KeyShock==0)
C51 COMPILER V8.05a   MAIN                                                                 08/07/2007 23:36:31 PAGE 3   

 117   1                      {
 118   2                              b_KeyScan=1;                    //开启键盘扫描标志。
 119   2                              b_KeyShock=1;                   //设置防抖动标志。
 120   2                      }
 121   1              else b_KeyShock=0;                              //如果有抖动则不执行键扫描,恢复防抖动标志。
 122   1      
 123   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
 124   1              if(b_KeyShock==1)
 125   1                      b_KillShock=1;                          //如果防抖动标志位开启则开启防抖动标志清除位,
 126   1                                                                              //300ms后清除防抖动标志。
 127   1      
 128   1      }
 129          
 130          
 131          //*************************************************************************************************
 132          //*                                                                                                                                                                                               *
 133          //*             ****************定时器1中断,用于计时功能和防抖动标志清除以及显示报告****************     *
 134          //*                                                                                                                                                                                               *
 135          //*************************************************************************************************
 136          void vTimer1(void) interrupt 3
 137          {
 138   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 139   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 140   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 141   1              if(b_KillShock==1)
 142   1                      {
 143   2                      if(uc_KillCount==16)                     //当防抖动标志位为1时,计时300ms后清除抖动标志位。
 144   2                              {
 145   3                              b_KeyShock=0;
 146   3                              b_KillShock=0;
 147   3                              uc_KillCount=1;
 148   3                              }
 149   2                      else uc_KillCount++;
 150   2                      }
 151   1      
 152   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 153   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD定时刷新时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 154   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 155   1              if(uc_TimeRefresh==18)                     //900ms刷新显示1次。
 156   1                      {
 157   2                      b_TimeRefresh=1;
 158   2                      uc_TimeRefresh=0;
 159   2                      }
 160   1              else
 161   1                      uc_TimeRefresh++;
 162   1      
 163   1      
 164   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 165   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 166   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 167   1              TH1=TIME1H;
 168   1              TL1=TIME1L;
 169   1      } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    203    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     27    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.05a   MAIN                                                                 08/07/2007 23:36:31 PAGE 4   

   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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