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

📄 send_data.lst

📁 用于两单片机利用串口通信。有完整的原理图、仿真、程序。
💻 LST
字号:
C51 COMPILER V8.08   SEND_DATA                                                             12/26/2007 18:53:14 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE SEND_DATA
OBJECT MODULE PLACED IN send_data.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE send_data.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************************************/
   2          /* 湖南师范大学  工学院    
   3          /* All rights reserved. 
   4          /* 程序名:send_data.c
   5          /* 时  间:2007-12-26 
   6          /* 作  者:wangguangxi11@163.com
   7          /* 程序功能:多机通信,发送数据(先发送从机的地址)                                  
   8          /***********************************************/       
   9          #include "send_data.h"
  10          /*************** 延时t毫秒****************/
  11          void delay(uint t)      // 对于11.0592M时钟,约延时1ms 
  12          {
  13   1              uint i;
  14   1              while(t--)
  15   1              {
  16   2                      for (i=0;i<125;i++)
  17   2                      {;}
  18   2              }
  19   1      } 
  20          /************** 键盘扫描********************/
  21          uchar keyscan(void)
  22          {
  23   1              uchar scancode,tmpcode;
  24   1              P1 = 0xf0;                                                              // 发全0行扫描码
  25   1              if ((P1&0xf0)!=0xf0)                                    // 若有键按下
  26   1              {
  27   2                      delay(10);                                                      // 延时去抖动
  28   2                      if ((P1&0xf0)!=0xf0)                            // 延时后再判断一次,去除抖动影响
  29   2                      {
  30   3                              scancode = 0xfe;
  31   3                              while((scancode&0x10)!=0)               // 逐行扫描
  32   3                              {
  33   4                                      P1 = scancode;                          // 输出行扫描码
  34   4                                      if ((P1&0xf0)!=0xf0)            // 本行有键按下
  35   4                                      {
  36   5                                              tmpcode = (P1&0xf0)|0x0f;
  37   5      
  38   5                                              return((~scancode)+(~tmpcode));// 返回特征字节码,为1的位即对应于行和列
  39   5                                      }
  40   4                                      else scancode = (scancode<<1)|0x01;// 行扫描码左移一位
  41   4                              }
  42   3                      }
  43   2              }
  44   1              return(0);                                                              // 无键按下,返回值为0  
  45   1      }
  46          
  47          /******************发送数据函数********************/
  48          void senddata(uchar buf)
  49          {
  50   1                      TI = 0;
  51   1                      TB8 = 0;                                // 发送数据帧
  52   1                      SBUF =buf;      
  53   1                      while(!TI);
  54   1                      TI = 0;
  55   1      }
C51 COMPILER V8.08   SEND_DATA                                                             12/26/2007 18:53:14 PAGE 2   

  56          /***************串口初始化函数***********************/
  57          void init()
  58          {
  59   1              TMOD =0x20;                                 // 定时器T1使用工作方式2
  60   1              TH1 = 250;
  61   1              TL1 = 250;
  62   1              TR1 = 1;                                        // 开始计时
  63   1              PCON = 0x80;                            // SMOD = 1
  64   1              SCON = 0xd0;                            // 工作方式,9位数据位,波特率9600kbit/s,允许接收 
  65   1      }
  66          void Getkey()
  67          {
  68   1          switch(get_key)
  69   1                      {
  70   2                      case 0x11:                                              // 1行1列,数字0
  71   2                                    key=0xc0;
  72   2                                        break;
  73   2                              case 0x21:                                              // 1行2列,数字1
  74   2                       key=0xf9;
  75   2                                      break;                  
  76   2                              case 0x41:                                              // 1行3列,数字2
  77   2                                      key=0xa4;
  78   2                                      break;
  79   2                      case 0x81:                                              // 1行4列,数字3
  80   2                                      key=0xb0;
  81   2                                      break;
  82   2                              case 0x12:                                              // 2行1列,数字4
  83   2                      key=0x99;
  84   2                                      break;
  85   2                              case 0x22:                                              // 2行2列,数字5
  86   2                                        key=0x92;
  87   2                                      break;
  88   2                              case 0x42:                                              // 2行3列,数字6
  89   2                                         key=0x82;
  90   2                                      break;
  91   2                              case 0x82:                                              // 2行4列,数字7
  92   2                                         key=0xf8;
  93   2                                      break;
  94   2                              case 0x14:                                              // 3行1列,数字8
  95   2                                         key=0x80;
  96   2                                         break;
  97   2                              case 0x24:                                              // 3行2列,数字9
  98   2                                       key=0x90;
  99   2                                      break;
 100   2                              case 0x44:                                              // 3行3列,10
 101   2                                        key=0x88;
 102   2                                      break;
 103   2                              case 0x84:                                              // 3行4列,11
 104   2                                       key=0x83;
 105   2                                      break;
 106   2                              case 0x18:                                              // 4行1列,12
 107   2                                       key=0xc6;
 108   2                                      break;
 109   2                              case 0x28:                                              // 4行2列,13
 110   2                                       key=0xa1;
 111   2                                      break;
 112   2                              case 0x48:                                              // 4行3列,14
 113   2                                       key=0x86;
 114   2                                      break;
 115   2                              case 0x88:                                              // 3行4列,15
 116   2                                       key=0x8e;
 117   2                                      break;
C51 COMPILER V8.08   SEND_DATA                                                             12/26/2007 18:53:14 PAGE 3   

 118   2                              default:break;
 119   2                      }
 120   1      }
 121          /*************主程序***************/
 122          void main()
 123          { 
 124   1              uchar i = 0;
 125   1              key=0xc0; 
 126   1              while(1)
 127   1          {
 128   2                       get_key = keyscan();           // 调用键盘扫描函数 
 129   2                   Getkey();
 130   2                       buf=key;
 131   2      
 132   2                P0 = 0xff;                                    // 通过P0口读要访问的从机地址 
 133   2                addr = P0&0x0f;
 134   2                init();                                       // 串口初始化 
 135   2                EA = 1;                                               // 关闭所有中断
 136   2                TI = 0;
 137   2                TB8 = 1;                                      // 发送地址帧   
 138   2                SBUF = addr;
 139   2                while(!TI);
 140   2                TI = 0;
 141   2                senddata(buf);                           // 发送数据
 142   2              } 
 143   1              
 144   1      }


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