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

📄 sec2.lst

📁 单片及c语言轻松入门的随书光盘
💻 LST
字号:
C51 COMPILER V7.06   SEC2                                                                  11/23/2005 08:52:24 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SEC2
OBJECT MODULE PLACED IN sec2.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE sec2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /**************************************************
   2          ;    平凡单片机工作室
   3          ;  http://www.mcustudio.com
   4          ;   (c) Copyright 2003 Pingfan's McuStudio
   5          ;    All rights Reserved
   6          ;sec2.c
   7          ;作者:周坚   
   8          ;功能描述:
   9          ;带键盘设置的秒计时器
  10          ;功能:倒计时的秒计时器,从59倒计到0,然后又从59开始倒计到0;
  11          ;各个键的功能
  12          ;S1:开始运行
  13          ;S2:停止运行
  14          ;S3:高位加1,按一次,数码管的十位加1,从0-5循环变化
  15          ;S4:低位加1,按一次,数码管的个位加1,从0-9循环变化
  16          ;本例可用ledkey.dll实验仿真板验证
  17          ;如使用DSB-1A型实验板,将提供相应的程序
  18          **************************************************/
  19          #include "reg51.h"
  20          #define uchar unsigned char
  21          #define uint  unsigned int 
  22          
  23          #define Hidden 0x10;    //消隐字符在字形码表中的位置
  24          uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
  25          uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF
             -};
  26          uchar DispBuf[6];       //6字节的显示缓冲区
  27          bit     Sec;                    //1s到的标记
  28          uchar SecVal;           //秒计数值
  29          bit     KeyOk;
  30          bit StartRun;
  31          uchar SetSecVal;        //秒的预置值
  32          
  33          uchar code TH0Val=63266/256;
  34          uchar code TL0Val=63266%256;//当晶振为11.0592时,定时2.5ms的定时器初值
  35          //经过精确调整,在值为63266时,定时时间为1.00043362s
  36          
  37          void Timer0() interrupt 1
  38          {       uchar tmp;
  39   1              static uchar dCount;    //计数器,显示程序通过它得知现正显示哪个数码管
  40   1              static uint Count;              //秒计数器
  41   1              const uint CountNum=100;        //预置值(正确值为400)
  42   1              TH0=TH0Val;
  43   1              TL0=TL0Val;     
  44   1              tmp=BitTab[dCount];             //根据当前的计数值取位值
  45   1              P2=P2|0xfc;                             //P2与11111100B相或,将高6位置1
  46   1              P2=P2&tmp;                              //P2与取出的位值相与,将某一位清零
  47   1              tmp=DispBuf[dCount];    //根据当前的计数值取显示缓冲待显示值    
  48   1              tmp=DispTab[tmp];               //取字形码
  49   1              P0=tmp;                                 //送出字形码
  50   1              dCount++;                               //计数值加1
  51   1              if(dCount==6)                   //如果计数值等于6,则让其回0
  52   1                      dCount=0;       
  53   1      //以下是秒计数的程序行
  54   1              Count++;                                //计数器加1
C51 COMPILER V7.06   SEC2                                                                  11/23/2005 08:52:24 PAGE 2   

  55   1              if(Count>=CountNum)             //到达预计数值
  56   1              {       Count=0;                        //清零 
  57   2                      if(StartRun)            //要求运行
  58   2                      {       if((SecVal--)==0)
  59   3                                      SecVal=SetSecVal;       //减到0后重置初值
  60   3                      }
  61   2              }
  62   1      }
  63          /*延时程序
  64            由Delay参数确定延迟时间
  65          */
  66          void mDelay(unsigned int Delay) 
  67          {       unsigned int i;
  68   1              for(;Delay>0;Delay--)
  69   1              {       for(i=0;i<124;i++)
  70   2                      {;}
  71   2              }
  72   1      }
  73          
  74          void KeyProc(uchar KValue)      //键值处理
  75          {       if((KValue&0x04)==0)    //Start
  76   1                      StartRun=1;
  77   1              if((KValue&0x08)==0)    //Stop
  78   1                      StartRun=0;
  79   1              if((KValue&0x10)==0)
  80   1              {       StartRun=0;                     //停止运行
  81   2                      DispBuf[4]++;
  82   2                      if(DispBuf[4]>=6)       //次高位由0加到5
  83   2                              DispBuf[4]=0;   
  84   2                      SetSecVal=DispBuf[4]*10+DispBuf[5];     //计算出设置值
  85   2                      SecVal=SetSecVal;
  86   2              }
  87   1              if((KValue&0x20)==0)
  88   1              {       StartRun=0;                     //停止运行
  89   2                      DispBuf[5]++;
  90   2                      if(DispBuf[5]>=10)      //末位由0加到9
  91   2                              DispBuf[5]=0;   
  92   2                      SetSecVal=DispBuf[4]*10+DispBuf[5];     //计算出设置值
  93   2                      SecVal=SetSecVal;
  94   2              }
  95   1      }
  96          uchar Key()
  97          {       uchar KValue;
  98   1              uchar tmp;
  99   1              P3|=0x3c;                       //将P3口的接键盘的中间四位置1
 100   1              KValue=P3;
 101   1              KValue|=0xc3;           //将未接键的4位置1
 102   1              if(KValue==0xff)        //中间4位均为1,无键按下        
 103   1                      return(0);              //返回
 104   1              mDelay(10);             //延时10ms,去键抖
 105   1              KValue=P3;
 106   1              KValue|=0xc3;           //将未接键的4位置1
 107   1              if(KValue==0xff)        //中间4位均为1,无键按下        
 108   1                      return(0);              //返回
 109   1      //如尚未返回,说明一定有1或更多位被按下
 110   1              for(;;)
 111   1              {       tmp=P3;         
 112   2                      if((tmp|0xc3)==0xff)
 113   2                              break;          //等待按键释放
 114   2              }
 115   1              return(KValue);
 116   1      }
C51 COMPILER V7.06   SEC2                                                                  11/23/2005 08:52:24 PAGE 3   

 117          void Init()
 118          {       TMOD=0x01;
 119   1              TH0=TH0Val;
 120   1              TL0=TL0Val;     
 121   1              ET0=1;                          //开T0中断
 122   1              EA=1;                           //开总中断
 123   1              TR0=1;                          //T0开始运行
 124   1      }
 125          void main()
 126          {       uchar KeyVal;
 127   1              uchar i;
 128   1              Init();                                 //初始化
 129   1              for(i=0;i<=4;i++)
 130   1                      DispBuf[i]=Hidden;      //显示器前四位消隐
 131   1              DispBuf[4]=SecVal/10;
 132   1              DispBuf[5]=SecVal%10;
 133   1              for(;;)
 134   1              {       KeyVal=Key();
 135   2                      if(KeyVal)
 136   2                              KeyProc(KeyVal);
 137   2                      DispBuf[4]=SecVal/10;
 138   2                      DispBuf[5]=SecVal%10;
 139   2              }
 140   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    347    ----
   CONSTANT SIZE    =     25    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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