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

📄 4x4.lst

📁 RZ-51V20 实例程序
💻 LST
字号:
C51 COMPILER V8.02   4X4                                                                   08/05/2009 18:13:16 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 4X4
OBJECT MODULE PLACED IN 4x4.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 4x4.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <AT89X52.H> 
   2          
   3          #include<stdio.h>
   4          unsigned char tmp;
   5          void send_char(unsigned char txd);
   6          unsigned char code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0
             -x8e};//共阳数码管显示0~F
   7          void delay()                   //延时子程序
   8          {
   9   1       unsigned char n, m;
  10   1       for (n = 100; n > 0; n--)
  11   1        for (m = 300; m > 0; m--);    
  12   1      }
  13          void display(unsigned char S)      //显示子程序
  14          {                 send_char(table[S]);
  15   1       P0 = table[S]; //数码管是P0口驱动的
  16   1       delay();                    
  17   1       P2 = 0x7f; //数码管选通开关(P2.7选通 也就是数码管的第八位 (从左到右顺序))
  18   1      
  19   1      }
  20          unsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线
  21          {
  22   1        unsigned char rcode, ccode;
  23   1        P1 = 0xF0;      // 发全0行扫描码,列线输入
  24   1        if((P1&0xF0) != 0xF0) // 若有键按下
  25   1        {
  26   2          delay();// 延时去抖动 
  27   2          if((P1&0xF0) != 0xF0)
  28   2          {  rcode = 0xFE;         // 逐行扫描初值
  29   3          while((rcode&0x10) != 0)
  30   3          {
  31   4             P1 = rcode;         // 输出行扫描码
  32   4          if((P1&0xF0) != 0xF0) // 本行有键按下
  33   4          {
  34   5             ccode = (P1&0xF0)|0x0F;
  35   5             do{;}while((P1&0xF0) != 0xF0); //等待键释放
  36   5             return ((~rcode) + (~ccode)); // 返回键编码
  37   5          }
  38   4          else
  39   4          rcode = (rcode<<1)|0x01; // 行扫描码左移一位
  40   4          }
  41   3       }
  42   2        }  
  43   1        return 0; // 无键按下,返回值为0
  44   1      }
  45          void KeyDispaly(unsigned char key)
  46          {
  47   1         switch(key)
  48   1         {
  49   2         case 0x11: display(0); break;
  50   2         case 0x21: display(1); break;
  51   2         case 0x41: display(2); break;
  52   2         case 0x81: display(3); break;
  53   2         case 0x12: display(4); break;
  54   2         case 0x22: display(5); break;
C51 COMPILER V8.02   4X4                                                                   08/05/2009 18:13:16 PAGE 2   

  55   2         case 0x42: display(6); break;
  56   2         case 0x82: display(7); break;
  57   2         case 0x14: display(8); break;
  58   2         case 0x24: display(9); break;
  59   2         case 0x44: display(10); break;
  60   2         case 0x84: display(11); break;
  61   2         case 0x18: display(12); break;
  62   2         case 0x28: display(13); break;
  63   2         case 0x48: display(14); break;
  64   2         case 0x88: display(15); break;
  65   2         default: break;
  66   2         }
  67   1      }
  68          int main(void)
  69          { 
  70   1         unsigned char Key;
  71   1              TMOD = 0x20;                    // 定时器1工作于8位自动重载模式, 用于产生波特率
  72   1              TH1 = 0xFD;                             // 波特率9600
  73   1              TL1 = 0xFD;
  74   1              SCON = 0x50;                    // 设定串行口工作方式
  75   1              PCON &= 0xef;                   // 波特率不倍增 
  76   1              TR1 = 1;                                // 启动定时器1
  77   1              IE = 0x0;                               // 禁止任何中断
  78   1         while(1)
  79   1         {
  80   2           Key = Keycan();   
  81   2           KeyDispaly(Key);
  82   2                      if(RI)                                          // 是否有数据到来
  83   2                      {
  84   3                              RI = 0;
  85   3                              tmp = SBUF;                             // 暂存接收到的数据
  86   3                              P2=0x7f;
  87   3                              P0 = tmp;                               // 数据传送到P0口
  88   3                              send_char(tmp);                 // 回传接收到的数据
  89   3                      }               
  90   2         } 
  91   1      return 0;
  92   1      }
  93          void send_char(unsigned char txd)
  94          // 传送一个字符
  95          {
  96   1              SBUF = txd;
  97   1              while(!TI);                             // 等特数据传送
  98   1              TI = 0;                                 // 清除数据传送标志
  99   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    286    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       2
   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 + -