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

📄 systhree_master.lst

📁 省电子竞赛做品
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   SYSTHREE_MASTER                                                      06/28/2007 21:08:47 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE SYSTHREE_MASTER
OBJECT MODULE PLACED IN Systhree_master.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE Systhree_master.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************************************/
   2          /**                                                     **/
   3          /**                作者:jia                                                    **/
   4          /**                时间:2007/6/6                       **/
   5          /**        National University of Defence Technology    **/
   6          /**                   0731-4573493                      **/
   7          /*********************************************************/
   8          
   9          #include <absacc.h>
  10          #include <reg52.h>
  11          #include<intrins.h>
  12          
  13          #define uchar unsigned char
  14          #define uint8 unsigned char
  15          #define uint16 unsigned int
  16          
  17          #define LED8 XBYTE [0xA000]   //数码管地址
  18          #define LED7 XBYTE [0xA001]
  19          #define LED6 XBYTE [0xA002]
  20          #define LED5 XBYTE [0xA003]
  21          #define LED4 XBYTE [0xA004]
  22          #define LED3 XBYTE [0xA005]
  23          #define LED2 XBYTE [0xA006]
  24          #define LED1 XBYTE [0xA007]
  25          
  26          
  27          
  28          #define KEY XBYTE [0xA100]  //键盘地址
  29          
  30          /*扫描键盘使用的变量 */
  31          sbit first_row = P1^4;      //键盘第一行控制
  32          sbit second_row = P1^3;     //键盘第二行控制
  33          bit first_getkey = 0,control_readkey = 0;  //读键盘过程中的标志位
  34          bit getkey = 0; //获得有效键值标志位 等于1时代表得到一个有效键值
  35          bit keyon = 0;  //防止按键冲突标志位
  36          bit  change_led = 0;
  37          bit lessAlarm = 0;
  38          uchar keynum = 0;  //获得的有效按键值寄存器
  39          
  40          
  41          sbit P1_2 = P1^2;
  42          sbit P1_6 = P1^6;
  43          sbit P1_7 = P1^7;
  44          sbit P1_5 = P1^5;
  45          uchar sbuf_t = 0x0C1;
  46          
  47          
  48          
  49          
  50          // 系数
  51          #define COEF 167 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  52          #define HEIGHT0 100 // 初始高度1m,系数1.67
  53          #define V_INITIAL0 78 // 初始液滴速度 78 t/min
  54          #define MotorV 32 // 电机速度,50cm/min
  55          #define CIRCLE 20
C51 COMPILER V8.05a   SYSTHREE_MASTER                                                      06/28/2007 21:08:47 PAGE 2   

  56          
  57          
  58          uchar Vnow[16] = {0};
  59          uchar Vset[16] = {0}; 
  60          uint16 bdata alarm =0;
  61          uchar que[16] = {0};
  62          uchar state = 0  ;
  63          uchar NOset = 0;
  64          //bit lessAlarm = 0;
  65          
  66          uint16  temV = 0; 
  67          uchar i = 0;
  68          uchar qu_i =0;
  69          
  70          
  71          
  72          /*数码管显示使用的变量和常量*/
  73          uchar lednum = 0;  //数码管显示位控制寄存器
  74          uchar led[8] = {0,0,0,0,0,0,0,0};  //数码管显示内容寄存器
  75          uchar code segtab[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0
             -x8c,0xff}; //七段码段码表
  76                                // "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "
             -P" ,"black" 
  77          
  78          
  79          
  80          
  81          void leddisp(void); //数码管显示函数
  82          void readkey(void); //读键盘函数
  83          void setvalue (unsigned char keynum);
  84          void sendBuf(uchar i); 
  85          void  delay(uint8 time_nop);
  86          void setAlarm(uchar b,uchar  a);
  87          
  88          
  89          void intTL0() interrupt 1 //TL0 定时中断处理函数
  90          {
  91   1           static uchar TL0_i = 0;   // 定义静态变量,用来计数TL0定时器的溢出次数(进入本函数的次数)
  92   1               TL0 = -2720%256;//定时器中断时间间隔 4ms
  93   1           if(TL0_i++ == 11)
  94   1               { 
  95   2                      TL0_i = 0;
  96   2                      leddisp();  //每次定时中断显示更新一次
  97   2      
  98   2                      if(control_readkey == 1)  //每两次定时中断扫描一次键盘
  99   2                      {
 100   3                      readkey();
 101   3                      }
 102   2                  control_readkey = !control_readkey;
 103   2               }
 104   1      }
 105          
 106          //*************************************外部中断0**********************************************************
             -***
 107          //******************************************************************************************
 108          void ps_serve (void )interrupt 4
 109          {
 110   1        static uchar wait = 0;
 111   1        uchar  a = 0;
 112   1        uchar b=0; 
 113   1        if(RI == 1)
 114   1        {     
C51 COMPILER V8.05a   SYSTHREE_MASTER                                                      06/28/2007 21:08:47 PAGE 3   

 115   2                P1_6 = 0;  
 116   2                P1_7 = 0;       
 117   2                a = SBUF; 
 118   2                P1_7 = 1;       
 119   2      
 120   2                b = a & 0x0F;
 121   2                if(a>=192)
 122   2                {      
 123   3               
 124   3              setAlarm(b,a);
 125   3                      wait = 128 + b;
 126   3                      P1_7 = 1;
 127   3                  SBUF = Vset[b];
 128   3                      P1_6 = 0;
 129   3              P1_7 = 0;
 130   3      
 131   3                }
 132   2                else if(wait >= 128)
 133   2                {
 134   3      
 135   3                      Vnow[wait - 128] = a;
 136   3                    Vset[b] = 255;
 137   3                      change_led = 1;
 138   3                      wait = 0;
 139   3                }     
 140   2                RI =0;
 141   2      
 142   2        }      
 143   1        else TI =0; 
 144   1      
 145   1      }
 146          //************************************************************************************************
 147          
 148          
 149          //********************************************************************************************************
             -*********************
 150          
 151          // 由于T0采用工作方式3,所以T1只能用作串口波特率发生器
 152          // 注意:从站Fsoc=12MHz,主站Fsoc=24MHz,只需将波特率设置相同即可
 153          // 此时,TH0占用TF1,所以此中断处理程序是处理T0的TH0的,定时器T0占用TF1,相当于T1中断
 154          // 最大定时周期为256us
 155          void time2_serve (void)interrupt 5
 156          {   
 157   1      
 158   1          static uchar T2_i = 0;   // 定义静态变量,用来计数TL0定时器的溢出次数(进入本函数的次数)
 159   1      
 160   1              TF2 = 0;        
 161   1              if( T2_i++ == 48 )
 162   1              {   change_led =1        ;
 163   2                      T2_i = 0 ;
 164   2                      if(i <= qu_i-1 && qu_i != 0)
 165   2                      {  sendBuf(i);   i++;}
 166   2      
 167   2                      if(i == qu_i)
 168   2                      i = 0;
 169   2              }
 170   1      }
 171          //********************************************************************************************************
             -*********************
 172          //********************************************************************************************************
             -*********************
 173          // end of time1
C51 COMPILER V8.05a   SYSTHREE_MASTER                                                      06/28/2007 21:08:47 PAGE 4   

 174          
 175          void main(void)
 176          {
 177   1      
 178   1              TL0 = -2720%256; //定时器中断时间间隔 4ms
 179   1              TMOD = 0X23;
 180   1      
 181   1          RCAP2H=0x0B;
 182   1          RCAP2L=0xDC;
 183   1      
 184   1              SCON=0x50;//串口方式1,允许接受
 185   1              TH1=244;
 186   1              TL1=244;
 187   1      
 188   1              ES = 1;
 189   1              ET0 = 1;
 190   1              ET1 = 0;
 191   1          ET2= 1; 
 192   1              EA = 1;
 193   1              TR0 =1;
 194   1              TR1 =1;//启动定时器
 195   1              TR2 = 1;
 196   1              while(1)
 197   1              {
 198   2                      if(getkey == 1 ||change_led == 1)  //判断是否获得有效按键
 199   2                  {
 200   3                      getkey = 0;
 201   3                              if(state == 0 && qu_i > 0)
 202   3                              {
 203   4                              led[0]=que[i];
 204   4                      led[1]=Vset[que[i]]/100;
 205   4                              led[2]=(Vset[que[i]]%100)/10;
 206   4                              led[3]=Vset[que[i]]%10;//
 207   4                              }
 208   3                              else
 209   3                              {
 210   4                                      led[0]=NOset;
 211   4                                      led[1]=Vset[NOset]/100;
 212   4                                      led[2]=(Vset[NOset]%100)/10;
 213   4                                      led[3]=Vset[NOset]%10;
 214   4                              }
 215   3                              if(qu_i > 0)
 216   3                              { 
 217   4                                  if(alarm^que[i] == 1)
 218   4                                      {
 219   5                                              led[5]=16;
 220   5                                              led[6]=16;
 221   5                                              led[7]=16;//
 222   5                                      
 223   5                                      }
 224   4                                      else 
 225   4                                      {
 226   5                                      led[4]=que[i];
 227   5                                      led[5]=Vnow[que[i]]/100;
 228   5                                      led[6]=(Vnow[que[i]]%100)/10;
 229   5                                      led[7]=Vnow[que[i]]%10;//
 230   5                                      }
 231   4                              }
 232   3              }
 233   2              }
 234   1      }
 235          
C51 COMPILER V8.05a   SYSTHREE_MASTER                                                      06/28/2007 21:08:47 PAGE 5   

 236          /***************************************************
 237                                  键盘扫描函数
 238          原型:   void readkey(void);
 239          功能:  当获得有效按键时,令getkey=1,keynum为按键值
 240          
 241          ****************************************************/
 242          void readkey(void)
 243          {
 244   1              uchar M_key = 0;  
 245   1      
 246   1              first_row = 0;
 247   1              second_row = 0;
 248   1              M_key = KEY;
 249   1              if(M_key != 0xff)  //如果有连续两次按键按下,认为有有效按键按下。消除按键抖动
 250   1              {
 251   2              if(first_getkey == 0)
 252   2              {
 253   3                              first_getkey = 1;       
 254   3                      }
 255   2                      else    //当有有效按键按下时,进一步识别是哪一个按键

⌨️ 快捷键说明

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