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

📄 disp.lst

📁 这是自己写的基于单片机89s52的UART口的双机通讯
💻 LST
字号:
C51 COMPILER V7.06   DISP                                                                  10/24/2006 15:35:21 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DISP
OBJECT MODULE PLACED IN Disp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Disp.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*******************************************************************************
   2                  动态数码管扫描显示程序
   3          *******************************************************************************/
   4          
   5          
   6          #include "Disp.h"
   7          #include <REG51.h>
   8          #include <ABSACC.h>
   9          #include <intrins.h>
  10          
  11          
  12          unsigned char DispBuf[8];       //显示缓冲区(由定时中断程序自动扫描)
  13          unsigned char DispX;            //坐标,取值0~7
  14          unsigned char KeyValue = '\0';
  15          
  16          
  17          //宏函数:向数码管位选寄存器(74HC573)加载数据
  18          #define DIGLD(dat)\
  19          {\
  20                  P0 = (dat);\
  21                  LE_DIG = 1;\
  22                  _nop_();\
  23                  LE_DIG = 0;\
  24          }
  25          
  26          
  27          //宏函数:向数码管段选寄存器(74HC573)加载数据
  28          #define SEGLD(dat)\
  29          {\
  30                  P0 = (dat);\
  31                  LE_SEG = 1;\
  32                  _nop_();\
  33                  LE_SEG = 0;\
  34          }
  35          
  36          
  37          /*******************************************************************************
  38          函数:DispClear()
  39          功能:清除显示
  40          *******************************************************************************/
  41          void DispClear()
  42          {
  43   1              unsigned char i;
  44   1              DispX = 0;
  45   1              for ( i=0; i<8; i++ )
  46   1              {
  47   2                      DispBuf[i] = 0x00;
  48   2              }
  49   1              DIGLD(0x00);
  50   1              SEGLD(0x00);
  51   1      }
  52          
  53          
  54          //定义软件定时器(利用T0中断实现)
  55          unsigned int STV;       //16位软件定时器
C51 COMPILER V7.06   DISP                                                                  10/24/2006 15:35:21 PAGE 2   

  56          bit STR = 0;    //启动标志
  57          bit STF = 0;    //溢出标志
  58          
  59          
  60          /*******************************************************************************
  61          函数:T0_ISR()
  62          功能:定时器T0中断服务程序,定时扫描显示数码管
  63          *******************************************************************************/
  64          void T0_ISR() interrupt 1
  65          {
  66   1              code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  67   1              static unsigned char n = 0;
  68   1              static unsigned char t = 50;
  69   1      //重新定时
  70   1              TR0 = 0;                //暂停T0(重新定时前应当暂停)
  71   1              TH0 = 0xFC;             //重新定时1ms
  72   1              TL0 = 0x66;
  73   1              TR0 = 1;                //重启T0
  74   1      //扫描数码管
  75   1              SEGLD(0xFF);    //暂停显示(重要操作)
  76   1              DIGLD(com[n]);  //更新位选信号
  77   1              SEGLD(~DispBuf[n]);     //更新段选数据
  78   1              n++;
  79   1              n &= 0x07;
  80   1      //处理软件定时器
  81   1      //      if ( STR ) if ( --STV == 0 ) STF = 1;
  82   1      //扫描按键
  83   1              if ( --t == 0 )
  84   1              {
  85   2                      if ( !K1 ) KeyValue = '1';
  86   2                      if ( !K2 ) KeyValue = '2';
  87   2                      if ( !K3 ) KeyValue = '3';
  88   2                      if ( !K4 ) KeyValue = '4';
  89   2                      if ( KeyValue == '\0' )
  90   2                              t = 50;
  91   2                      else
  92   2                              t = 250;
  93   2              }
  94   1      }
  95          
  96          
  97          //键盘扫描,返回键值
  98          unsigned char KeyScan()
  99          {
 100   1              unsigned char k;
 101   1              k = KeyValue;
 102   1              KeyValue = '\0';
 103   1              return k;
 104   1      }
 105          
 106          
 107          /*******************************************************************************
 108          函数:Delay()
 109          功能:延时0.001s~65.536s
 110          参数:延时(t*0.001)s
 111          *******************************************************************************/
 112          void Delay(unsigned int t)
 113          {
 114   1              STV = t;
 115   1              STR = 1;
 116   1              while ( !STF );
 117   1              STR = 0;
C51 COMPILER V7.06   DISP                                                                  10/24/2006 15:35:21 PAGE 3   

 118   1              STF = 0;
 119   1      }
 120          
 121          
 122          /*******************************************************************************
 123          函数:DispChar()
 124          功能:显示1个字符
 125          参数:c为要显示的字符(仅限十进制数字)
 126          *******************************************************************************/
 127          void DispChar(unsigned char c)
 128          {
 129   1              code unsigned char Tab[10] =
 130   1              {//定义数码管字型数据
 131   1                      0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
 132   1              };
 133   1              if ( (c >= '0') && (c <= '9') )
 134   1              {
 135   2                      DispBuf[3-DispX] = Tab[c-'0'];
 136   2                      DispX++;
 137   2                      DispX &= 0x07;
 138   2              }
 139   1      }
 140          
 141          
 142          /*******************************************************************************
 143          函数:DispInit()
 144          功能:初始化
 145          *******************************************************************************/
 146          void DispInit()
 147          {
 148   1              LE_DIG = 0;
 149   1              LE_SEG = 0;
 150   1              LE_LED = 0;
 151   1              DispClear();    //清除显示
 152   1              TMOD &= 0xF0;   //T0设置在方式1,即16位定时器
 153   1              TMOD |= 0x01;
 154   1              TH0 = 0xFC;             //定时1ms
 155   1              TL0 = 0x66;
 156   1              ET0 = 1;                //使能T0定时中断
 157   1              TR0 = 1;                //启动定时器T0
 158   1              EA = 1;                 //使能总中断
 159   1      }
 160          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    226    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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