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

📄 max232.lst

📁 STC51系列单片机学习板演示程序(汇编语言) 有详细注释 适合初学单片机的朋友
💻 LST
字号:
C51 COMPILER V7.20   MAX232                                                                03/24/2007 01:17:41 PAGE 1   


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

line level    source

   1          /*****************************************************************************
   2                                                          MCU8051学习板演示程序
   3                                                                  
   4                                          (c) Copyright 2007-2007,广州恒芯电子
   5                                                          All Rights Reserved
   6          *****************************************************************************/
   7          
   8          /*****************************************************************************
   9          程序说明
  10          名称: MCU8051学习板演示程序(MAX232测试)
  11          功能: 从串口接收一个字节,并在数码管上显示,或读入键盘值从串口发送出去(波特率为1200)
  12          版本:2007-03-01
  13          *****************************************************************************/
  14          
  15          /*****************************************************************************
  16          硬件说明
  17          单片机:   兼容MCS-51单片机/STC89C51
  18          晶振频率: 12MHz
  19          *****************************************************************************/
  20          
  21          #include "regx52.h"
  22          
  23          /****************************************************************************
  24          说明: 程序预定义
  25          *****************************************************************************/
  26          #define LED7A_CTRL P1_0/*数码管第一位控制引脚(0为有效,1为无效)*/
  27          #define LED7B_CTRL P1_1/*数码管第二位控制引脚(0为有效,1为无效)*/
  28          #define LED7C_CTRL P1_2/*数码管第三位控制引脚(0为有效,1为无效)*/
  29          #define LED7D_CTRL P1_3/*数码管第四位控制引脚(0为有效,1为无效)*/
  30          
  31          #define LED7_STATUS     P0/*数码管状态引脚(0为有效,1为无效)*/
  32          #define KEY_STATUS P2/*键盘引脚*/
  33          
  34          
  35          /****************************************************************************
  36          说明: 变量定义
  37          *****************************************************************************/
  38          code unsigned char m_ucLedTab[]=
  39          {
  40                  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
  41                  0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
  42          };/*数码管十六进制编码表*/
  43          
  44          unsigned char code m_ucKeyTab[]=
  45          {
  46                  0x7e, 0xe7, 0xd7, 0xb7, 0x77, 0xeb, 0xdb, 0xbb, 0x7b, 0xed,
  47                  0xdd, 0xbd, 0x7d, 0xee, 0xde, 0xbe
  48          };/*键盘十六进制编码表*/
  49          
  50          unsigned char m_ucLedBuf[4];/*七段数码管显示值缓存*/
  51          
  52          /****************************************************************************
  53          名称: KeyCheck()
  54          说明: 键盘检测
  55          参数: 无
C51 COMPILER V7.20   MAX232                                                                03/24/2007 01:17:41 PAGE 2   

  56          返回: 键盘码值,若无键按下则返回16
  57          *****************************************************************************/
  58          unsigned char KeyCheck();
  59          
  60          /****************************************************************************
  61          名称: Led7Scan()
  62          说明: 数码管动态扫描处理程序    
  63          参数: 无
  64          返回: 无
  65          *****************************************************************************/
  66          void Led7Scan();
  67          
  68          /****************************************************************************
  69          名称: Uart()
  70          说明: 从串口接收一个字节,在数码管上显示
  71          参数: 无
  72          返回: 无
  73          *****************************************************************************/
  74          void Uart();
  75          
  76          /*****************************************************************************
  77          程序开始
  78          *****************************************************************************/
  79          void main()
  80          {       
  81   1              unsigned char ucKey;
  82   1      
  83   1              /*T0中断设定*/
  84   1              TMOD=0x21;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
  85   1              TH0=0xec;/*定时时间 50Hz/4 计算公式:10000H - (5 x 1000) = EC78H*/
  86   1              TL0=0x78;
  87   1      
  88   1              TH1=0xe6;/*波特率为1200*/
  89   1              TL1=0xe6;
  90   1      
  91   1              ET0=1;/*允许T0中断*/
  92   1              TR0=1;/*使T0工作*/
  93   1              TR1=1;
  94   1      
  95   1          SCON=0x50;
  96   1              ES=1;
  97   1      
  98   1              EA=1;/*总中断开启*/
  99   1      
 100   1              m_ucLedBuf[0]=0;
 101   1              m_ucLedBuf[1]=16;       
 102   1              m_ucLedBuf[2]=0;        
 103   1              m_ucLedBuf[3]=0;                        
 104   1      
 105   1      
 106   1              while(1)
 107   1              {
 108   2                      ucKey=KeyCheck();/*获得键盘值*/
 109   2                      if(ucKey!=16)/*判断是否有键按下,若有则将它在数码管显示出来*/
 110   2                      {
 111   3                              m_ucLedBuf[0]=ucKey;/*将键盘值在数码管上显示*/
 112   3      
 113   3                              EA=0;
 114   3                              SBUF=ucKey;/*将键盘值从串口发送出去*/
 115   3                              while(!TI);                               
 116   3                              TI=0;
 117   3                              EA=1;
C51 COMPILER V7.20   MAX232                                                                03/24/2007 01:17:41 PAGE 3   

 118   3                      }
 119   2              }
 120   1      }
 121          
 122          /*****************************************************************************
 123          名称: Interrupt1Handler
 124          说明: T0中断入口
 125          参数: 无
 126          返回 :无
 127          *****************************************************************************/
 128          void Interrupt1Handler() interrupt 1
 129          {
 130   1              Led7Scan();             /*数码管动态扫描*/      
 131   1              TH0=0xec;               /*重新设置T0定时值*/
 132   1              TL0=0x78;
 133   1      }
 134          
 135          /*****************************************************************************
 136          名称: Interrupt4Handler
 137          说明: UART中断入口
 138          参数: 无
 139          返回 :无
 140          *****************************************************************************/
 141          void Interrupt4Handler() interrupt 4
 142          {
 143   1              Uart(); 
 144   1      }
 145          
 146          /****************************************************************************
 147          名称: Led7Scan()
 148          说明: 数码管动态扫描处理程序
 149          参数: 无
 150          返回: 无
 151          *****************************************************************************/
 152          void Led7Scan()
 153          {       
 154   1              static unsigned char a=0;
 155   1      
 156   1              switch(a) /*判断数码管动态扫描值*/
 157   1              {
 158   2              case 0: /*处理数码管第一位*/
 159   2                      LED7D_CTRL=1; /*设置数码管第四位为无效*/
 160   2                      LED7A_CTRL=0; /*设置数码管第一位位有效*/
 161   2                      break; 
 162   2      
 163   2              case 1: /*处理数码管第二位*/
 164   2                      LED7A_CTRL=1; /*设置数码管第一位为无效*/
 165   2                      LED7B_CTRL=0; /*设置数码管第二位位有效*/
 166   2                      break; 
 167   2      
 168   2              case 2: /*处理数码管第三位*/
 169   2                      LED7B_CTRL=1; /*设置数码管第二位为无效*/
 170   2                      LED7C_CTRL=0; /*设置数码管第三位位有效*/
 171   2                      break; 
 172   2      
 173   2              case 3: /*处理数码管第四位*/
 174   2                      LED7C_CTRL=1; /*设置数码管第三位为无效*/
 175   2                      LED7D_CTRL=0; /*设置数码管第四位位有效*/
 176   2                      break; 
 177   2              }
 178   1      
 179   1              LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]]; /*将显示码送数码管状态引脚*/     
C51 COMPILER V7.20   MAX232                                                                03/24/2007 01:17:41 PAGE 4   

 180   1              
 181   1              a++; /*数码管动态扫描值加1,若该值4则置为0*/
 182   1              if(a>3)
 183   1                      a=0;
 184   1      }
 185          
 186          /****************************************************************************
 187          名称: KeyCheck()
 188          说明: 键盘检测
 189          参数: 无
 190          返回: 键盘码值,若无键按下则返回16
 191          *****************************************************************************/
 192          unsigned char KeyCheck()
 193          {
 194   1              unsigned char a,b;
 195   1      
 196   1              for(a=0;a<4;a++)/*循环4次*/
 197   1              {
 198   2                      switch(a)/*改变键盘扫描码*/
 199   2                      {
 200   3                      case 0:KEY_STATUS=0xef;break;
 201   3                      case 1:KEY_STATUS=0xdf;break;
 202   3                      case 2:KEY_STATUS=0xbf;break;
 203   3                      case 3:KEY_STATUS=0x7f;break;
 204   3                      };
 205   2      
 206   2                      b=KEY_STATUS;
 207   2                      if((b&0x0f)!=0x0f)/*判断是否有按键按下*/
 208   2                      {
 209   3                              for(a=0;a<16;a++)/*根据键盘码判断那个键按下*/
 210   3                              {
 211   4                                      if(b==m_ucKeyTab[a])
 212   4                                      {
 213   5                                              return a;
 214   5                                      }
 215   4                              }
 216   3                      }
 217   2              }
 218   1      
 219   1              return 16;
 220   1      }
 221          
 222          /****************************************************************************
 223          名称: Uart()
 224          说明: 从串口接收一个字节,在七段数码管上显示
 225          参数: 无
 226          返回: 无
 227          *****************************************************************************/
 228          void Uart()
 229          {
 230   1              EA=0;
 231   1      
 232   1              while(RI==0);/*串口接收一个字节,并在七段数码管上显示*/
 233   1              RI=0;
 234   1              
 235   1              m_ucLedBuf[2]=(SBUF>>4)&0x0f;                   
 236   1          m_ucLedBuf[3]=SBUF&0x0f;    
 237   1      
 238   1              EA=1;
 239   1      }
 240          
 241          
C51 COMPILER V7.20   MAX232                                                                03/24/2007 01:17:41 PAGE 5   

 242                                                     


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    338    ----
   CONSTANT SIZE    =     33    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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