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

📄 main.lst

📁 通过89s51实现的模拟键盘代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   MAIN                                                                  11/03/2008 11:24:32 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\uv2\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) DEBUG OBJECTEXTEND CODE SYMBOLS

line level    source

   1          /*---------------------------------
   2          本系统还有一个T2中断可由外部来引发,未用可留作以后用
   3          系统因用史密特电路后,两开关应处于常闭
   4          光电开关也应打开处于接通状态
   5          本系统只在摇杆转动时才有动作,所有的静态变量处于初值0
   6                  
   7          -----------------------------------*/
   8          #include <general.h>
   9          #define  T0_interval -1500 //按1500HZ来输出脉冲          水平方向
  10          #define  T1_interval -4000 //竖直方向
  11          
  12          /*---------------------------------
  13          水平方向分左右两种方向用dir_horizon来表示,0表示左转,1 表示右转
  14          上下方向也分两种,用dir_vertical来表示,0表示上转,1表示下转
  15          步进电机按四步方式来进行,       低速按500HZ来步进,中速电机无减速用30HZ
  16          高速按60HZ来进行,以上均表示主电机,控制相机的电机相应减小频率
  17          两种电机旋转状态的记录分别由horizon_step,vertical_step来表示
  18          两种电机的控制输出用一数组来表示
  19          Left_Right[horizon_step],Up_Down[vertical_step]
  20          -----------------------------------*/
  21          /*-------------------------------------------------------------------------
  22          线扫功能的说明
  23          对明景的协议扫描用auto+1+on+1+off
  24          
  25          pelcop,pelcod扫描用auto+on
  26          硬盘机用扫描即可
  27          
  28          工控机用轨迹扫描功能
  29          ---------------------------------------------------------------------------*/
  30          #define DIP_1  P3_4               //定义协议及波特选择位
  31          #define DIP_2  P3_5
  32          #define DIP_3  P3_6
  33          #define DIP_4  P3_7
  34          #define DIP_5  P4_0
  35          #define DIP_6  P4_1
  36          
  37          
  38          
  39          char code Left_Right[]={1, 3 ,2, 6,4,0xc,8,9};  //电机控制代码 按红是最低位来设计
  40          char code Up_Down[]= {1, 3 ,2, 6,4,0xc,8,9};
  41          unsigned char bdata  bflag=0;                                              //通用位变量
  42          sbit bflag_0=bflag^0;
  43          sbit bflag_1=bflag^1;
  44          sbit bflag_2=bflag^2;
  45          sbit bflag_3=bflag^3;                                                                                                                 
  46          sbit bflag_4=bflag^4;
  47          sbit bflag_5=bflag^5;
  48          sbit bflag_6=bflag^6;
  49          sbit bflag_7=bflag^7;
  50          
  51          
  52          
  53          unsigned char bdata  bflag1=0;                                             //通用位变量
  54          sbit bflag1_0=bflag1^0;
  55          sbit bflag1_1=bflag1^1;
C51 COMPILER V7.50   MAIN                                                                  11/03/2008 11:24:32 PAGE 2   

  56          sbit bflag1_2=bflag1^2;
  57          sbit bflag1_3=bflag1^3;                                                                                                               
  58          sbit bflag1_4=bflag1^4;
  59          sbit bflag1_5=bflag1^5;
  60          sbit bflag1_6=bflag1^6;
  61          sbit bflag1_7=bflag1^7;
  62          /*-----------------------------------------------
  63          
  64             明景的键盘PELCO-P球机ID为实际球机ID少1,程序要进行处理
  65             PELCO-D上下两代码颠倒了,UP为000     DOWN 为00108 与公布的相反
  66          ------------------------------------------------*/
  67          unsigned char  cProtocal;
  68          unsigned char bdata  id=0;                                                 //通用位变量
  69          sbit id_0=id^0;
  70          sbit id_1=id^1;
  71          sbit id_2=id^2;
  72          sbit id_3=id^3;                                                                                                               
  73          sbit id_4=id^4;
  74          sbit id_5=id^5;
  75          sbit id_6=id^6;
  76          sbit id_7=id^7;
  77           /*--------------------------------------------------------------------*/
  78          char idata cDirectHorizon=0;                    //水平方向标志           下面几个用+/-1来表示其意义
  79          char idata cDirectVertical=0 ;          //竖直方向标志
  80           /*--------------------------------------------------------------------*/
  81          char idata cDirectHorizonLim=0;                 //水平方向极限标志
  82          char idata cDirectVerticalLim=0;                //竖直方向极限标志
  83          char idata cHorizonStep=0;
  84          char idata cVerticleStep=0;     //步进
  85          
  86          //char idata cAutoScan=0;//自动扫描的标志
  87          char idata cAutoScan;
  88          char idata cAutoTestVertical=0;//自动检测竖直方向的标志
  89          //上述变量初值为0
  90          /*-------------------------------------------------
  91          主芯片工作于串口查询等待方式
  92          按键盘发来的控制码作相应的处理
  93          以下是键盘的控制码列表,按两者通信协议作出编程处理
  94          --------------------------------------------------*/
  95          
  96          /*------------------------------------------
  97          接收区分键盘区和相机区,定位在外部RAM区,各分配100个空间,
  98          高一个数标志,在主程序里分别访问两个区,并作想应两串口485的
  99          处理
 100          主程序初始时开串口中断,
 101          -------------------------------------------*/
 102          
 103          //char xdata keycode[50][7];
 104          
 105          unsigned char idata sKeyCode[20]={""}; //目前只用一组来表示,并且为0值   接收键盘码用
 106          unsigned char idata cKeyCodeReceiveState=0 ;    //初值处于无串口码接收到状态有值用1表示
 107          unsigned char idata cKeyCodeReceive=0;
 108          unsigned char idata  *pKeyCode;
 109          
 110          /*
 111          char xdata cameracode[50][7];
 112          char xdata camera_num;
 113          char xdata camera_addr;
 114          */
 115          
 116          
 117          /*--------------
C51 COMPILER V7.50   MAIN                                                                  11/03/2008 11:24:32 PAGE 3   

 118          I2c取球机的ID  调试设为一号
 119          -----------*/
 120          //char ID=1;
 121          
 122          /*----------------------------------------------
 123          以下是步进电机的输出函数----
 124          以及时间参数装载函数
 125          因为中断处理不可引用外部函数并且必须在之前定义
 126          所以在此不按结构可视来组织程序
 127          _______________________________________________*/
 128          /*--------------------
 129          水平方向的电机按P2口低四位来控制,分别对应各位
 130          和bflag方向一致;
 131          竖直方向也一样按P2高位来控制
 132          -----------------------------------------------*/
 133          
 134          
 135          
 136          
 137          
 138          
 139          
 140          unsigned char ProtocalSelect()
 141          {       unsigned char x;
 142   1              bflag1=0;
 143   1              DIP_4=1;                 //写1
 144   1              DIP_3=1;
 145   1              DIP_2=1;
 146   1              DIP_1=1;
 147   1               do
 148   1               {
 149   2                 
 150   2              bflag1_0=!DIP_4;                 //选择通讯协议 取反
 151   2              bflag1_1=!DIP_3;
 152   2              bflag1_2=!DIP_2;
 153   2              bflag1_3=!DIP_1;
 154   2              x= bflag1;
 155   2              bflag1_0=!DIP_4;                 //选择通讯协议 取反
 156   2              bflag1_1=!DIP_3;
 157   2              bflag1_2=!DIP_2;
 158   2              bflag1_3=!DIP_1;
 159   2              }while(bflag1!=x);
 160   1      
 161   1      
 162   1              return(x);
 163   1      }
 164          void BaudSelect()                                                  //波特率选择 子程序
 165          {
 166   1              unsigned char x;                                                                                //开关取反才是正确的
 167   1              bflag1=0;
 168   1              DIP_6=1;                 //先给1
 169   1              DIP_5=1;
 170   1                      do
 171   1              {
 172   2                      

⌨️ 快捷键说明

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