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

📄 lesson9_c.lst

📁 8051串口收发。主机要使用IBM汇编。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LESSON9_C
OBJECT MODULE PLACED IN lesson9_C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lesson9_C.C ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /************************************************/
   3          /*单位名称:华南理工大学电信学院*/
   4          /*模块:1位共阴数码管,CD4511驱动,使用反极法的键盘,6116*/
   5          /*创建人:景永年   日期:2006年5月25日*/
   6          /*修改人:*/
   7          
   8          /*功能描述:串口接收PC机发送的数据,并显示*/
   9          /*其他说明:*/
  10          /*版本号:*/
  11          /*************************************************/
  12          #include "reg52.h"
  13          #include "stdio.h"
  14          #include "absacc.h"
  15          #include "intrins.h"
  16          
  17          #define uchar unsigned char
  18          #define uint unsigned char
  19          
  20          unsigned char volatile xdata g_sec_disp _at_ 0xFFFF;
  21          unsigned char volatile xdata g_min_disp _at_ 0xEFFF;
  22          unsigned char volatile xdata g_hr_disp  _at_ 0xDFFF;
  23          
  24          //void time0_init(void);
  25          void time1_init(void);
  26          void serial_interrupt(void);
  27          
  28          void keypad_scan(void);
  29          void keypad_response(uchar key_number);
  30          void display_led(void);
  31          
  32          void delay(uchar m, uchar n);
  33          
  34          data unsigned char g_uc_sec_cnt,g_uc_min_cnt,g_uc_hr_cnt;//g_uc_ms_cnt;
  35          data uint g_ui_ram_addr;
  36          data uchar g_uc_recv_serial_cnt;
  37          data unsigned char g_uc_key_number,g_uc_disp_cnt =7;/*uc_disp_cnt显示位计数器*/
  38          code unsigned char g_uc_key_number_all[12]={0xF3,0xEB,0xDB,0xBB,0xF5,0xED,0xDD,0xBD,0xF6,0xEE,0xDE,0xBE};
  39          
  40          sbit beep = P1^7;
  41          
  42          main()
  43          {
  44   1              //time0_init();
  45   1              time1_init();
  46   1      
  47   1              g_uc_sec_cnt = 0xAA;
  48   1              g_uc_min_cnt = 0xAA;
  49   1              g_uc_hr_cnt = 0x1F;
  50   1              //g_uc_ms_cnt = 0;
  51   1              g_uc_recv_serial_cnt = 0;
  52   1              g_ui_ram_addr = 0x7800;//first addr
  53   1      
  54   1              //SP = 0x60     ;//no need to Initiate stack
  55   1              //ET0 = 1;//enable T0 interrupt
C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 2   

  56   1              //TR0 = 1;//start the timer0
  57   1              TR1 = 1;//start the timer1, not enable T1 interrupt
  58   1              ES = 1;//enable serial interrupt
  59   1      
  60   1              display_led();//display "1",ready for receive the serial data
  61   1              while(g_uc_recv_serial_cnt < 11)//waiting for 11 times serial interrupt
  62   1              {
  63   2                      _nop_();
  64   2              }
  65   1              ES = 0;//mask the serial interrupt
  66   1              EA = 0;//mask all interrupt
  67   1      
  68   1              g_uc_sec_cnt = 0xA3;
  69   1              g_uc_min_cnt = 0xAA;
  70   1              g_uc_hr_cnt = 0xA2;
  71   1              display_led();
  72   1      
  73   1              while(1)
  74   1              {
  75   2                      keypad_scan();
  76   2              }
  77   1      
  78   1      }
  79          
  80          
  81          /*************************************************/
  82          /*time0_init*/
  83          /*************************************************/
  84          /*void time0_init(void)
  85          {
  86                  TMOD = 0x01 ;//定时中断的初始化,定时器0工作在定时器模式
  87                  IE = 0x80   ;//开总中断;由TR0启停,16bit(模式1)
  88                  TH0 = 0x3C   ;//初值15536
  89                  TL0 = 0xB0   ;//100ms=0.1s
  90          
  91          }*/
  92          /*************************************************/
  93          /*time1_init*///设置串行通信的波特率
  94          /*************************************************/
  95          void time1_init(void)
  96          {
  97   1              TMOD = 0x20;
  98   1              IE = 0x80;
  99   1              TH1 = 0xF3;//baud rate:2400
 100   1              TL1 = 0xF3;
 101   1              SCON = 0x50;//mode 1
 102   1              PCON = 0x80;
 103   1      
 104   1      }
 105          
 106          /*************************************************/
 107          /*
 108          name:keypad_scan()
 109          function: scan the keypad, get the key number
 110          使用反极法检测键值
 111          output:uc_key_number
 112          */
 113          /*************************************************/
 114          void keypad_scan(void)
 115          {
 116   1              P1 = 0XF8;
 117   1      
C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 3   

 118   1              ACC = P1;
 119   1              ACC &= 0XF8;
 120   1              if(!(ACC == 0XF8))
 121   1              {
 122   2                      delay(2,255);
 123   2                      P1 = 0XF8;
 124   2                      ACC = P1;
 125   2                      ACC &= 0XF8;
 126   2                      if(!(ACC == 0XF8))/*note:if(ACC != 0XF8) ACC XOR 0xF8;if(!(ACC == 0XF8)) the value of the ACC don't chan
             -ge*/
 127   2                      {
 128   3                              g_uc_key_number = ACC;/*get the row number*/
 129   3      
 130   3                              P1 = 0X07;
 131   3      
 132   3                              ACC = P1;
 133   3                              ACC &= 0X07;
 134   3                              if(!(ACC == 0X07))
 135   3                              {
 136   4                                      delay(2,255);
 137   4                                      P1 = 0X07;
 138   4                                      ACC = P1;
 139   4                                      ACC &= 0X07;/*contains the column number*/
 140   4                                      if(!(ACC == 0X07))
 141   4                                      {
 142   5                                              g_uc_key_number |= ACC;/*combine to the key number*/
 143   5                                              keypad_response(g_uc_key_number);
 144   5                                      }
 145   4                              }
 146   3                      }
 147   2              }
 148   1      }
 149          
 150          /*************************************************/
 151          /*
 152          name:keypad_response()
 153          function:response to the key number
 154          input:uc_key_number
 155          */
 156          /*************************************************/
 157          void keypad_response(uchar key_number)
 158          {
 159   1              uchar k;
 160   1      lab:P1 = 0X07;/*release the key or not?*/
 161   1              ACC = P1;
 162   1              ACC &= 0X07;
 163   1      
 164   1              if((ACC == 0X07))/*release the key*/
 165   1              {
 166   2                      for(k=0;k<=11;k++)
 167   2                      {
 168   3                              if(key_number == g_uc_key_number_all[k])
 169   3                                break;
 170   3                      }
 171   2                      switch(k)
 172   2                      {
 173   3                              case 10:/*A*/
 174   3                                              g_uc_sec_cnt = 0xFF;//熄灭数码管,A~F不能显示
 175   3                                              g_uc_min_cnt = 0xFF;
 176   3                                              g_uc_hr_cnt = 0xFF;
 177   3      
 178   3                                              display_led();/*显示时钟CD4511不能显示A~F*/
C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 4   

 179   3      

⌨️ 快捷键说明

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