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

📄 main.lst

📁 89C52的键盘扫描LED显示及串口程序。 用Keil C51开发。用通用实验板调试通过。
💻 LST
字号:
C51 COMPILER V8.05a   MAIN                                                                 07/25/2008 14:45:03 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"at89x52.h"
   2          #include<intrins.h>
   3          #include"def.h"
   4          
   5          
   6          
   7          
   8          //************************************************
   9          extern bit scan(void);
  10          extern void tserial(void);
  11          extern void tsled(void);
  12          extern void S_RL(void);
  13          extern void S_RR(void);
  14          extern void clear(void);
  15          extern void xch(void);
  16          
  17          void delay (unsigned int value)         /*延时副程式*/
  18           {
  19   1            while (value!=0) value--;         /*10US延时*/
  20   1       }
  21          //***************************************************************************
  22          void main()
  23          {       
  24   1      
  25   1              T2CON=0x38;                     /*定时器2工作控制寄存器T2CON_________________*/
  26   1                                              /*| TF2|EXF2|RCLK|TCLK|EXEN2|TR2|C/T2|CP/RL2|*/
  27   1                                              /*|___________________|_____________________|*/
  28   1              TL2=0xfd;                       /*                       X=2^16-fosc/(2*16*波特率)               */
  29   1              TH2=0xff;                       /*                      TL2=X&0x00ff                             */
  30   1              RCAP2L=0xdc;            /*                      TL2=X&0xff00                             */
  31   1              RCAP2H=0xff;            /*设定传输波特率9600,晶体振荡器=11.059Mhz   */
  32   1                                                      //TH2=256-(28800/9600);                                 
  33   1          TR2=1;                              /*启动TEMER2*/
  34   1              SCON=0x50;                      /*设定UART工作在MODE2模式,可传送和接收数据 REN=1*/
  35   1                                                      /*串列控制寄存器SCON_______________________*/
  36   1                                              /*|  7    6    5    4 |  3    2    1    0 |*/
  37   1                                              /*| SM0| SM1| SM2| REN| TB8| RB8| TI | RI |*/
  38   1                                              /*|___________________|___________________|*/
  39   1          IE=0x98;                    /*8是允许中断,a是TIMER0,TIMER1中断致能位*/
  40   1                                                      /*|  7    6    5    4 |  3    2    1    0 |*/
  41   1                                              /*| EA |    | ET2| ES | ET1| EX1| ET0| EX0|*/
  42   1                                              /*|___________________|___________________|*/
  43   1          IP=0x10;                    /*中断优先级寄存器IP_______________________*/
  44   1                                              /*|    |    | PT2| PS | PT1| PX1| PT0| PX0|*/
  45   1                                              /*|___________________|___________________|*/
  46   1              dispbuf[0]=dot;         /*小数点位*/
  47   1              dispbuf[7]=0x01;        /*ID号码*/
  48   1              dispbuf[8]=0x01;        /*蜂鸣器设定开/二次分频*/
  49   1              P0=0xff;
  50   1              tsled();
  51   1              while(1)
  52   1              {
  53   2                      k=scan();                                       /*键盘扫描副程式*/
  54   2                      if(k==1) 
  55   2                      {
C51 COMPILER V8.05a   MAIN                                                                 07/25/2008 14:45:03 PAGE 2   

  56   3                              switch(tab[ptr])                        /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
  57   3                      {       
  58   4                              
  59   4      
  60   4                                case 0x0c:
  61   4                                            while(m==P1);             /*按钮放开否?*/
  62   4                                                S_RL();                       //光标左移
  63   4                                                break;
  64   4                    case 0x0d:                                /*光标右移*/
  65   4                                        while(m==P1);                 /*按钮放开否?*/
  66   4                                                S_RR();                       //光标右移
  67   4                                break;                        /*跳出此循环*/
  68   4                    case 0x0a: 
  69   4                                        clear();                      /*LED清除显示器CLEAR*/
  70   4                              while(m==P1);                   /*按钮放开否?*/
  71   4                            break;                    /*跳出此循环*/
  72   4                        case 0x0b: 
  73   4                              while(m==P1);                   /*按钮放开否?*/
  74   4                                    if(++dot>6)dot=0; //小数点左移
  75   4                            break;                    /*跳出此循环*/
  76   4                        case 0x0e:                            /*E被按下发送显示器上的数字*/   
  77   4                                while(m==P1);         /*按钮放开否?*/
  78   4                                    tserial();        
  79   4                            break;                /*跳出此循环*/                    
  80   4                        case 0x0f: 
  81   4                            while(m==P1);             /*按钮放开否?*/
  82   4                            break;                    /*跳出此循环*/
  83   4                   default:   
  84   4                                           if(disp_temp[0]==0)
  85   4                                           xch();                     /*以上均不是则为数字键呼叫XCH作右键滚入*/
  86   4                                      else 
  87   4                                                  {
  88   5                                                              dispbuf[disp_temp[0]]=tab[ptr];
  89   5                                                              disp_temp[0]=0;
  90   5                                                      }
  91   4                           break;                             /*跳出此循环*/
  92   4                   }                                                  /*跳出SWITCH*/
  93   3                      delay(100);                                     /*按钮抗机械反弹跳*/
  94   3                              while(m==P1);                           /*按钮放开否?*/
  95   3                              dispbuf[0]=dot;                         //显示小数点。
  96   3                      tsled();                                        /*串行发送到DTLED-6副程式*/
  97   3                       }                              
  98   2          }
  99   1      }
 100          
 101          
 102          
 103          
 104          
 105          /******************************************************************
 106          /*宣告串口serial发送副程式*/
 107          /**************************************************************/
 108          void tserial(void)                      
 109          { uchar i=7;
 110   1      IE=0x8f;
 111   1        {while(i>1)
 112   2              {
 113   3              i--;
 114   3              SBUF=dispbuf[i];                /*将LED上人数字以BCD码的形式由SBUF发送出去*/
 115   3              while(TI!=1);                   /*发送完成否?*/
 116   3              TI=0;                                   /*是,则清除发送完成旗标TI=0*/
 117   3              delay(10);
C51 COMPILER V8.05a   MAIN                                                                 07/25/2008 14:45:03 PAGE 3   

 118   3              }
 119   2        }  
 120   1       IE=0x9f;
 121   1      }
 122          //**************************************************************
 123          /*串行口接收中断副程式*/
 124          /******************************************************************/
 125          void uartcom1_in1 () interrupt 4 using 1        
 126           {      uchar v,i=0;
 127   1           while(RI!=1);                                                      /*接收完成否*/  
 128   1            { 
 129   2              RI=0;
 130   2              v=SBUF;                                                                 /*接收的数据存入*/      
 131   2              dispbuf[6]=dispbuf[5];
 132   2              dispbuf[5]=dispbuf[4];
 133   2              dispbuf[4]=dispbuf[3];
 134   2              dispbuf[3]=dispbuf[2];
 135   2              dispbuf[2]=dispbuf[1];
 136   2              dispbuf[1]=SBUF;
 137   2            } 
 138   1       }                                      /*返回主程式*/
 139          /********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    274    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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