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

📄 leddisp.lst

📁 《时间触发嵌入式系统设计模式》一书中的合作式调度器的算法
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   LEDDISP                                                               10/02/2007 07:17:24 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LEDDISP
OBJECT MODULE PLACED IN LedDisp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LedDisp.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*--------------------------------------------------------------------*-
   2          
   3                  LedDisp.C (V1.00)
   4          
   5                   
   6          -*---------------------------------------------------------------------*/
   7          
   8          /*
   9           * Copyright (c) 2006,wsl
  10           * All rights reserved
  11           * 
  12           * 文件名称: LedDisp.C 
  13           * 文件标识: 
  14           * 摘    要: 数码显示
  15           * 
  16           * 当前版本: V1.0               * 取代版本:
  17           * 作     者: wsl               * 修     改:  
  18           * 版本信息: 2006-09-14         * 修改信息: 
  19           */
  20           //***********************************************************************
  21          
  22          #include"main.H"
  23          #include"Port.H"
  24          #include"MMI.h"
  25          #include"SCH51.H"
  26          #include"Uart.h"
  27          #include"LedDisp.h"
  28          
  29          /*************************************************************************/
  30          /*动态数码管个数*/
  31          #define LED_NUMBER (4)
  32          
  33          extern time_str now;
  34          
  35          
  36           /*数码管显示段码表,不带点*/
  37          unsigned char code DispCode[]=
  38          {
  39                  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92,
  40                  0x82, 0xf8, 0x80, 0x90, 0xff, 0x92,/*s*/ 0x86,/*E*/ 0x87/*t*/
  41          };
  42          
  43          /*数码管扫描码表*/
  44          unsigned char code ScanCode[4]=
  45          {
  46                  0xfe, 0xfd, 0xfb, 0xf7
  47          };
  48          /*数码管显示缓冲区*/
  49          unsigned char dispbuf[4]=
  50          {
  51                  1,2,3,4
  52          };
  53          
  54          /*LED数码管工作模式控制字*/
  55          /*工作模式分三种, 1> 点位同时闪烁(LED_TMOD = 0x00)
C51 COMPILER V8.08   LEDDISP                                                               10/02/2007 07:17:24 PAGE 2   

  56                                            2> 点位分别闪烁(LED_TMOD = 0x01)
  57                                            3> 点位不闪烁 (LED_TMOD = 0x10)                         
  58          */
  59          unsigned char LED_TMOD = 0x00;
  60          /*更新显示数据标志*/
  61          bit g_UpdataFlagEn = 1; /*(1)可以更新;(0)不可以更新*/
  62          
  63          /*点闪烁总使能标志为1点闪动*/
  64          bit g_DFlashEn = 0;
  65          /*位闪烁总使能标志为1位闪动*/
  66          bit g_BFlashEn = 0;
  67          
  68          /*用于切换点的闪烁状态,闪烁或不闪烁*/
  69          static bit DFlash;
  70          /*用于切换位的闪烁状态,闪烁或不闪烁*/
  71          static bit BFlash;
  72          
  73          /*数码管闪烁标志*/
  74          unsigned char bdata Flag;
  75          // 闪烁点:Blink,为1的位闪动
  76          sbit Dlink1 = Flag^0;   /*时十位点 为1的位闪动*/
  77          sbit Dlink2 = Flag^1;
  78          sbit Dlink3 = Flag^2;
  79          sbit Dlink4 = Flag^3;   /*分个位点 为1的位闪动*/
  80          // 闪烁位:Blink,为1的位闪动
  81          sbit Blink1 = Flag^4;   /*时十位*/
  82          sbit Blink2 = Flag^5;   /*时个位*/
  83          sbit Blink3 = Flag^6;   /*分十位*/
  84          sbit Blink4 = Flag^7;   /*分个位*/
  85          
  86          /*用于显示刷新的频率*/
  87          /*
  88          g_DispFreq = 0 动态扫描的频是200HZ
  89          g_DispFreq = 1 动态扫描的频是100HZ
  90          g_DispFreq = 2 动态扫描的频是66HZ
  91          g_DispFreq = 3 动态扫描的频是50HZ
  92          g_DispFreq = 4 动态扫描的频是40HZ
  93          g_DispFreq = 5 动态扫描的频是33HZ
  94          g_DispFreq = 6 动态扫描的频是28HZ
  95          g_DispFreq = 7 动态扫描的频是25HZ
  96          */
  97          unsigned char g_DispScanFreq = 4;       /*最小为0,最大为7*/
  98          
  99          /*私有函数*/
 100          
 101          
 102          
 103          /**************************************************************************-
 104                  关于数码管显示的各寄存器的应用说明:
 105          g_DispScanFreq:         用于显示刷新的频率,最小为0,最大为7
 106          // 任意位和任意点可以同时闪烁(点位总使能开同时开)
 107          #define LED_DISP_MODE0()        {LED_TMOD = 0x00; g_DFlashEn = 1;       g_BFlashEn = 1;}
 108          // 只能任意点可以闪烁(点总使能开)
 109          #define LED_DISP_MODE1_D()      {LED_TMOD = 0x01; g_DFlashEn = 1;       g_BFlashEn = 0;}
 110          // 只能任意位可以闪烁(位总使能开)
 111          #define LED_DISP_MODE1_B()      {LED_TMOD = 0x01; g_DFlashEn = 0;       g_BFlashEn = 1;}
 112          // 点和位都不会闪烁
 113          #define LED_DISP_MODE2()        {LED_TMOD = 0x10; g_DFlashEn = 0;       g_BFlashEn = 0;}
 114          
 115          -**************************************************************************/
 116          /*-----------------------------------------------------------------------*-
 117           * 函数名称: LedDisplay()
C51 COMPILER V8.08   LEDDISP                                                               10/02/2007 07:17:24 PAGE 3   

 118           * 参    数: XX
 119           * 返    回: XX
 120           * 函数功能: 数码显示
 121           *              
 122           * 说     明: 
 123           *
 124           * 当前版本: V1.0               * 取代版本:
 125           * 作     者: wsl               * 修     改:  
 126           * 版本信息: 2006-09-14         * 修改信息: 
 127          -*-----------------------------------------------------------------------*/
 128          void LedDisplay(void)
 129          {
 130   1              unsigned char i, BitCnt;
 131   1      
 132   1              if ( g_UpdataFlagEn )   /*是否更新显示数据*/
 133   1              {       /*更新时钟数据*/ 
 134   2                      dispbuf[0] = now.hour / 10;
 135   2                      dispbuf[1] = now.hour % 10;
 136   2                      dispbuf[2] = now.min / 10;
 137   2                      dispbuf[3] = now.min % 10;
 138   2              }
 139   1      
 140   1              /*动态扫描*/
 141   1              for (BitCnt=0; BitCnt<LED_NUMBER; BitCnt++)
 142   1              {
 143   2                      LedCont = ScanCode[BitCnt];     
 144   2              
 145   2                      switch (LED_TMOD)
 146   2                      {
 147   3                              case 0x00:
 148   3                                      if ( DFlash )   /*否则是点闪烁*/

⌨️ 快捷键说明

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