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

📄 main.lst

📁 51实战工程级源码
💻 LST
字号:
C51 COMPILER V9.02   MAIN                                                                  11/08/2012 21:34:06 PAGE 1   


C51 COMPILER V9.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN ..\output\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\source\main.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(..\outpu
                    -t\main.lst) OBJECT(..\output\main.obj)

line level    source

   1          /*
   2          **********************************************************************************************************
             -***
   3          *                                                Kingst-51
   4          *                                        Development board samples
   5          *
   6          *                                 (c) Copyright 2009-2012, Kingst Studio
   7          *                                           All Rights Reserved
   8          *
   9          *                                          http://www.kingst.org
  10          * 文件名:main.c
  11          * 描  述:工程主文件
  12          * 版本号:1.0.0
  13          **********************************************************************************************************
             -***
  14          */
  15          #define _MAIN_C
  16          #include <string.h>
  17          #include "config.h"
  18          #include "main.h"
  19          #include "UartCom.h"
  20          #include "KeyBoard.h"
  21          #include "Lcd1602.h"
  22          #include "LedNumber.h"
  23          
  24          
  25          /*
  26          ********************************************************************************
  27          * ----------------------- Local variables  -------------------------------------
  28          ********************************************************************************
  29          */
  30          /* 通信命令与其响应函数的封装结构 */
  31          typedef struct _sComAnswer{
  32                  const uint8 *cmdstr;  //命令字符串的指针
  33                  const uint8  cmdlen;  //命令字符串的长度
  34                  void (*answer) (uint8 *para, int8 len); //响应函数的指针
  35          } sComAnswer;
  36          
  37          /* 蜂鸣器开关状态的枚举类型 */
  38          typedef enum {
  39              BUZZ_OFF, BUZZ_ON
  40          } eBuzzSwitch;
  41          static bit BuzzSwitch = BUZZ_OFF; //蜂鸣器开关状态
  42          
  43          static bit flag100ms = 0; //100ms定时间隔标志
  44          static bit staStopwatch = 1; //秒表状态
  45          static uint32 tmrStopwatch = 0; //秒表定时器
  46          
  47          
  48          /*
  49          ***************************************************************************************************
  50          * ---------------------------------- Source codes  ------------------------------------------------
  51          ***************************************************************************************************
  52          */
C51 COMPILER V9.02   MAIN                                                                  11/08/2012 21:34:06 PAGE 2   

  53          void ComHandle(void);
  54          void Stopwatch(void);
  55          
  56          
  57          /*
  58          *==============================================================================
  59          * 函数名:main
  60          * 描  述:C语言main函数,即程序执行入口
  61          *==============================================================================
  62          */
  63          void main (void)
  64          {
  65   1              /* 配置T0作为系统定时器 */
  66   1          TMOD &= 0xF0;
  67   1          TMOD |= 0x01;
  68   1              ET0 = 1;
  69   1              TR0 = 1;
  70   1      
  71   1              UartComInit();
  72   1          Lcd1602Init();
  73   1          LedNumberInit();
  74   1          
  75   1              /* 使能中断,开始主循环 */
  76   1          EA = 1;
  77   1          while(1) {
  78   2              KeyHandle();
  79   2                      ComHandle();
  80   2              Stopwatch();
  81   2          }
  82   1      }
  83          
  84          
  85          /*
  86          * 描  述:以下皆为串口命令响应函数,参数相同,功能见各自开头的描述
  87          * 输  入:para - 串口命令之后附带的参数指针
  88          *         len  - 参数长度
  89          * 输  出:无
  90          */
  91          /* 回传命令,将命令码之后的字符回传给上位机 */
  92          void ComCallback(uint8 *para, int8 len)
  93          {
  94   1              if (len > 0) {
  95   2                      UartWrite(para, len);
  96   2              }
  97   1              else {
  98   2                      UartWrite("none\r\n", sizeof("none\r\n")-1);
  99   2              }
 100   1      }
 101          /* 蜂鸣器开关命令,控制蜂鸣器鸣叫的开启和关闭 */
 102          void ComBuzzSwitch(uint8 *para, int8 len)
 103          {
 104   1              para++; //消除编译器警告
 105   1              len++;  //消除编译器警告
 106   1              if (BuzzSwitch == BUZZ_OFF) {
 107   2                      BuzzSwitch = BUZZ_ON;
 108   2                      UartWrite("turn on\r\n", sizeof("turn on\r\n")-1);
 109   2              }
 110   1              else {
 111   2                      BuzzSwitch = BUZZ_OFF;
 112   2                      UartWrite("turn off\r\n", sizeof("turn off\r\n")-1);
 113   2              }
 114   1      }
C51 COMPILER V9.02   MAIN                                                                  11/08/2012 21:34:06 PAGE 3   

 115          /* 字符串显示命令,在液晶上显示命令码之后的字符串 */
 116          void ComShowString(uint8 *para, int8 len)
 117          {
 118   1              if ((*para==' ') && (len>1)) {
 119   2              /* 显示命令码之后的字符 */
 120   2              para++;
 121   2              len--;
 122   2                      *(para+len) = '\0';
 123   2                      Lcd1602ShowStr(para, 0, 0);
 124   2              /* 不满一行时清楚屏幕后续字符位 */
 125   2              if (len < 16) {
 126   3                  Lcd1602Clear(len, 0, 16-len);
 127   3              }
 128   2                      UartWrite("complete\r\n", sizeof("complete\r\n")-1);
 129   2              }
 130   1              else {
 131   2                      UartWrite("error\r\n", sizeof("error\r\n")-1);
 132   2              }
 133   1      }
 134          
 135          /*
 136          * 函数名:ComHandle
 137          * 描  述:串口通信命令解析处理函数
 138          */
 139          void ComHandle(void)
 140          {
 141   1              int8 i,len;
 142   1              uint8 xdata buff[40];
 143   1              
 144   1              /* 可响应的所有命令列表 */
 145   1          const sComAnswer code ca[] = {
 146   1              {"callback", sizeof("callback")-1, ComCallback},
 147   1              {"buzz switch", sizeof("buzz switch")-1, ComBuzzSwitch},
 148   1              {"showstr", sizeof("showstr")-1, ComShowString}
 149   1          };
 150   1      
 151   1              /* 监控串口接收状态 */
 152   1              if (UartRxSta == RX_NONE) {
 153   2                      return;
 154   2              }
 155   1              UartRxSta = RX_NONE;
 156   1      
 157   1              /* 接收完一帧命令后处理该命令 */
 158   1              len = UartRead(buff, sizeof(buff));
 159   1          for (i=0; i<ArraySize(ca); i++) {
 160   2              if (memcmp(buff, ca[i].cmdstr, ca[i].cmdlen) == 0) {
 161   3                  ca[i].answer(buff+ca[i].cmdlen, len-ca[i].cmdlen);
 162   3                  return;
 163   3              }
 164   2          }
 165   1              
 166   1              /* 命令不在支持列表中时返回"无效命令"信息 */
 167   1              if (i >= ArraySize(ca)) {
 168   2              UartWrite("invalid command\r\n", sizeof("invalid command\r\n")-1);
 169   2              }
 170   1      }
 171          
 172          
 173          /*
 174          * 函数名:Stopwatch
 175          * 描  述:秒表功能函数
 176          */
C51 COMPILER V9.02   MAIN                                                                  11/08/2012 21:34:06 PAGE 4   

 177          void Stopwatch(void)
 178          {
 179   1          if (flag100ms) {
 180   2              flag100ms = 0;
 181   2              /* 每隔100ms,秒表计数器+1 */
 182   2              if (staStopwatch) {
 183   3                  tmrStopwatch++;
 184   3              }
 185   2              /* 秒表计数器当前值显示在数码管上 */
 186   2              LedNumberShow(tmrStopwatch, 1);
 187   2          }
 188   1      }
 189          /*
 190          * 函数名:ResetStopwatch
 191          * 描  述:重置秒表,定时器归零
 192          */
 193          void ResetStopwatch(void)
 194          {
 195   1          staStopwatch = 0;
 196   1          tmrStopwatch = 0;
 197   1      }
 198          /*
 199          * 函数名:KickStopwatch
 200          * 描  述:启动/停止秒表计数
 201          */
 202          void KickStopwatch(void)
 203          {
 204   1          staStopwatch = ~staStopwatch;
 205   1      }
 206          
 207          
 208          
 209          /*
 210          * 函数名:Timer0_ISR
 211          * 描  述:Timer0定时中断服务函数
 212          */
 213          void Timer0_ISR() interrupt 1
 214          {
 215   1          static uint8 t100ms = 0;
 216   1          
 217   1          /* Timer1定时1ms */
 218   1          TL0 = (uint8)((65535 - SYS_MCLK/1000) + 18);
 219   1          TH0 = (uint8)(((65535 - SYS_MCLK/1000) + 18) >> 8);
 220   1      
 221   1          /* 蜂鸣器控制 */
 222   1              if (BuzzSwitch == BUZZ_ON) {
 223   2                      BUZZ_CTRL = 0;
 224   2              }
 225   1          
 226   1          /* 100ms定时标志处理 */
 227   1          t100ms++;
 228   1          if (t100ms >= 100) {
 229   2              t100ms = 0;
 230   2              flag100ms = 1;
 231   2          }
 232   1          
 233   1          /* 其他需定时处理的函数 */
 234   1              KeyScan();
 235   1              LedNumberScan();
 236   1              UartRxMonitor(1);
 237   1              
 238   1              BUZZ_CTRL = 1;
C51 COMPILER V9.02   MAIN                                                                  11/08/2012 21:34:06 PAGE 5   

 239   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    592    ----
   CONSTANT SIZE    =    115    ----
   XDATA SIZE       =   ----      40
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       6
   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 + -