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

📄 second.lst

📁 《单片机c程序设计及应用实列》一书的源代
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.23a  SECOND                                                                09/08/2003 17:00:53 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE SECOND
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE second.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #pragma SRC
   2          #include <stdio.h>
   3          #include <reg51.h>
   4          
   5          
   6          #define         TRUE                    1
   7          #define         FALSE                   0
   8          
   9          #define         DELAY_VALUE             3
  10          #define         DELAY_VALUE_EXTRA       12
  11          
  12          
  13          
  14          #define         PinDrvKey1      P1_0
  15          #define         PinDrvKey2      P1_1
  16          #define         PinDrvKey3      P1_2
  17          #define         PinDrvKey4      P1_3            
  18          //键盘扫描的驱动线
  19          
  20          
  21          #define         PinScanKey1     P1_4
  22          #define         PinScanKey2     P1_5
  23          #define         PinScanKey3     P1_6
  24          #define         PinScanKey4     P1_7            
  25          //键盘扫描的信号获取线
  26          
  27          #define         PinSegA         P2_0    
  28          #define         PinSegB         P2_1
  29          #define         PinSegC         P2_2
  30          #define         PinSegD         P2_3            
  31          //七段码的数据线
  32          
  33          #define         PinSelectA      P2_4
  34          #define         PinSelectB      P2_5
  35          #define         PinSelectC      P2_6            
  36          //选择器的数据位
  37          
  38          #define         PinSelectCS     P2_4            
  39          //选择器的片选位
  40          
  41          #define         LedSelect0      0x80
  42          #define         LedSelect1      0x90
  43          #define         LedSelect2      0xa0
  44          #define         LedSelect3      0xb0
  45          #define         LedSelect4      0xc0
  46          #define         LedSelect5      0xd0
  47          
  48          #define         PinLamp         P0_0            
  49          //指示灯驱动管脚
  50          #define         PinSpeaker      P0_1            
  51          //蜂鸣器驱动管脚
  52          
  53          sbit            P0_0=P0^0;
  54          sbit            P0_1=P0^1;
  55          sbit            P0_2=P0^2;
C51 COMPILER V6.23a  SECOND                                                                09/08/2003 17:00:53 PAGE 2   

  56          sbit            P0_3=P0^3;
  57          sbit            P0_4=P0^4;
  58          sbit            P0_5=P0^5;
  59          sbit            P0_6=P0^6;
  60          sbit            P0_7=P0^7;
  61          
  62          sbit            P1_0=P1^0;
  63          sbit            P1_1=P1^1;
  64          sbit            P1_2=P1^2;
  65          sbit            P1_3=P1^3;
  66          sbit            P1_4=P1^4;
  67          sbit            P1_5=P1^5;
  68          sbit            P1_6=P1^6;
  69          sbit            P1_7=P1^7;
  70          
  71          sbit            P2_0=P2^0;
  72          sbit            P2_1=P2^1;
  73          sbit            P2_2=P2^2;
  74          sbit            P2_3=P2^3;
  75          sbit            P2_4=P2^4;
  76          sbit            P2_5=P2^5;
  77          sbit            P2_6=P2^6;
  78          sbit            P2_7=P2^7;
  79          
  80          
  81          void initial(void);              
  82          //初始化子程序
  83          void delay(short i);             
  84          //延时子程序
  85          void display(unsigned char i,unsigned char num);
  86          //显示子程序,其中变量i,num含义为在第i个数码管显示数字num.
  87          unsigned char keyscan(void);
  88          //键盘扫描子程序
  89          void updatee(void);
  90          
  91          unsigned char m1=0;
  92          unsigned char m0=0;
  93          unsigned char s1=0;
  94          unsigned char s0=0;
  95          unsigned char s01=0;
  96          unsigned char s00=0;
  97          
  98          void main(void)
  99          {
 100   1              unsigned char status;
 101   1              unsigned char keyword;
 102   1              initial();
 103   1              //键盘驱动信号,发光二极管,以及蜂鸣器都设在无效状态
 104   1              for(;;)
 105   1              {
 106   2                      switch(status)
 107   2                      {
 108   3                      case 0:
 109   3                              keyword=keyscan();
 110   3                              if(keyword==16)
 111   3                              {
 112   4                                      delay(DELAY_VALUE_EXTRA);
 113   4                                      updatee();
 114   4                              }
 115   3                              else
 116   3                                      if(keyword==11)status=1; //0状态为计时状态,1状态为停止状态
 117   3                                      else 
C51 COMPILER V6.23a  SECOND                                                                09/08/2003 17:00:53 PAGE 3   

 118   3                                      {
 119   4                                              PinSpeaker=FALSE;
 120   4                                              delay(DELAY_VALUE);
 121   4                                              PinSpeaker=TRUE;     //输入有错,蜂鸣器响
 122   4                                      }
 123   3                                      break;
 124   3                      case 1:
 125   3                              keyword=keyscan();
 126   3                              if(keyword==10)status=0;        //开始计时,转到0状态;
 127   3                              else if(keyword==12)status=2;//2状态为设置初值状态;
 128   3                              else if(keyword==13){s0=0;
 129   4                              s1=0;
 130   4                              m0=0;
 131   4                              m1=0;
 132   4                              s01=0;
 133   4                              s00=0;}//清零
 134   3                              else
 135   3                              {
 136   4                                      PinSpeaker=FALSE;
 137   4                                      delay(DELAY_VALUE);
 138   4                                      PinSpeaker=TRUE;     //输入有错,蜂鸣器响                       
 139   4                              }
 140   3                              break;
 141   3                      case 2:
 142   3                              keyword=keyscan();
 143   3                              if(keyword==10&&s1<=5&&m1<=5)    //秒表设置正确,则开始计时
 144   3                                      status=0;
 145   3                              else if(keyword==11&&s1<=5&&m1<=5)//状态1与2的切换
 146   3                                      status=1;
 147   3                              else if(keyword<10&&keyword>=0) //输入的是数字键
 148   3                              {
 149   4                                      m1=m0;
 150   4                                      m0=s1;
 151   4                                      s1=s0;
 152   4                                      s0=s01;
 153   4                                      s01=s00;
 154   4                                      s00=keyword;
 155   4                                      updatee();                 //输入的数字键从低位起往左移
 156   4                              }
 157   3                              else
 158   3                              {
 159   4                                      PinSpeaker=FALSE;
 160   4                                      delay(DELAY_VALUE);
 161   4                                      PinSpeaker=TRUE;     //输入有错,蜂鸣器响                       
 162   4                              }
 163   3                      }       
 164   2              }
 165   1              
 166   1      }
 167          
 168          void initial(void)
 169          {
 170   1              P1_0=FALSE;
 171   1              P1_1=FALSE;
 172   1              P1_2=FALSE;
 173   1              P1_3=FALSE;                     //键盘驱动信号都设为低,避免干扰。  
 174   1              P0_0=TRUE;                      //发光二极管设为不亮
 175   1              P0_1=TRUE;                      //蜂鸣器不响
 176   1      }
 177          
 178          
 179          void delay(short i)     //延迟子程序,为精确计时,需要用汇编语言来做。R7刚好存的是i的值
C51 COMPILER V6.23a  SECOND                                                                09/08/2003 17:00:53 PAGE 4   

 180          {
 181   1      short ii;
 182   1      ii=i;
 183   1      #pragma asm
 184   1      X_delay:
 185   1              USING   0
 186   1              CLR     A
 187   1              MOV     R4,A
 188   1              MOV     R5,A
 189   1      XC0025:
 190   1              CLR     C
 191   1              MOV     A,R5
 192   1              SUBB    A,R7
 193   1              MOV     A,R6
 194   1              XRL     A,#080H
 195   1              MOV     R0,A
 196   1              MOV     A,R4
 197   1              XRL     A,#080H
 198   1              SUBB    A,R0
 199   1              JNC     XC0028
 200   1              INC     R5
 201   1              CJNE    R5,#00H,XC0069
 202   1              INC     R4
 203   1      XC0069:
 204   1              SJMP    XC0025

⌨️ 快捷键说明

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