sec.lst

来自「单片及c语言轻松入门的随书光盘」· LST 代码 · 共 110 行

LST
110
字号
C51 COMPILER V7.06   SEC                                                                   11/02/2005 10:01:12 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SEC
OBJECT MODULE PLACED IN sec.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE sec.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          ;sec.c
   7          ;作者:周坚   
   8          ;秒钟程序,每到1S,显示值加1,有高位0消隐功能
   9          ;本例可用dpj.dll实验仿真板验证
  10          ;**************************************************/
  11          
  12          #include "reg51.h"
  13          #define uchar unsigned char
  14          #define uint  unsigned int 
  15          
  16          #define Hidden 0x10;    //消隐字符在字形码表中的位置
  17          uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
  18          uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF
             -};
  19          uchar DispBuf[6];       //6字节的显示缓冲区
  20          bit     Sec;                    //1s到的标记
  21          uchar SecValue;         //秒计数值
  22          
  23          uchar code TH0Val=63266/256;
  24          uchar code TL0Val=63266%256;//当晶振为11.0592时,定时2.5ms的定时器初值
  25          //经过精确调整,在值为63266时,定时时间为1.00043362s
  26          
  27          void Timer0() interrupt 1
  28          {       uchar tmp;
  29   1              static uchar dCount;    //计数器,显示程序通过它得知现正显示哪个数码管
  30   1              static uint Count;              //秒计数器
  31   1              const uint CountNum=400;        //预置值
  32   1              TH0=TH0Val;
  33   1              TL0=TL0Val;     
  34   1              tmp=BitTab[dCount];             //根据当前的计数值取位值
  35   1              P2=P2|0xfc;                             //P2与11111100B相或,将高6位置1
  36   1              P2=P2&tmp;                              //P2与取出的位值相与,将某一位清零
  37   1              tmp=DispBuf[dCount];    //根据当前的计数值取显示缓冲待显示值    
  38   1              tmp=DispTab[tmp];               //取字形码
  39   1              P0=tmp;                                 //送出字形码
  40   1              dCount++;                               //计数值加1
  41   1              if(dCount==6)                   //如果计数值等于6,则让其回0
  42   1                      dCount=0;       
  43   1      //以下是秒计数的程序行
  44   1              Count++;                                //计数器加1
  45   1              if(Count>=CountNum)             //到达预计数值
  46   1              {       Count=0;                        //清零 
  47   2                      Sec=1;                          //置位1s到标志
  48   2                      SecValue++;                             //秒值加1
  49   2                      if(SecValue>=60)
  50   2                              SecValue=0;                     //秒从0计到59
  51   2              }
  52   1      }
  53          
  54          void Init()
C51 COMPILER V7.06   SEC                                                                   11/02/2005 10:01:12 PAGE 2   

  55          {       TMOD=0x01;
  56   1              TH0=TH0Val;
  57   1              TL0=TL0Val;     
  58   1              ET0=1;                          //开T0中断
  59   1              EA=1;                           //开总中断
  60   1              TR0=1;                          //T0开始运行
  61   1      }
  62          void main()
  63          {       uchar i;
  64   1              Init();                                 //初始化
  65   1              for(i=0;i<=4;i++)
  66   1                      DispBuf[i]=Hidden;      //显示器前四位消隐
  67   1              DispBuf[4]=SecValue/10;
  68   1              DispBuf[5]=SecValue%10;
  69   1              for(;;)
  70   1              {
  71   2                      if(Sec)                         //1s时间到
  72   2                      {       DispBuf[4]=SecValue/10;
  73   3                              DispBuf[5]=SecValue%10;
  74   3                              if(DispBuf[4]==0)
  75   3                                      DispBuf[4]=Hidden;              //高位0消隐
  76   3                              Sec=0;                  //清除1秒到的标志
  77   3                      }
  78   2              }
  79   1      }
  80                                  
  81          
  82          
  83                              


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    202    ----
   CONSTANT SIZE    =     25    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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