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

📄 lcd_input.lst

📁 用SST89C58,对微型打印机和液晶的显示
💻 LST
字号:
C51 COMPILER V7.50   LCD_INPUT                                                             12/01/2006 13:48:46 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD_INPUT
OBJECT MODULE PLACED IN lcd_input.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE lcd_input.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include <math.h>
   3          #include <stdio.h>
   4          #include <absacc.h>
   5          #include <intrins.h>
   6          #include <string.h>
   7          #include <stdlib.h>
   8          #define  wcadd1 XBYTE[0xbf00]  //#define  wcadd1 XBYTE[0xfe00]  /* 写指令代码地址 */
   9          #define  wdadd1 XBYTE[0x3f00]  //#define  wdadd1 XBYTE[0xfc00]  /* 写参数及显示数据地址 */
  10          #define  rdadd1 XBYTE[0xbf00]  /* 读参数及显示数据地址 */
  11          #define  rbadd1 XBYTE[0x3c00]  /* 读忙状态地址 */
  12          #define  Io8155 XBYTE[0xef00]
  13          #define  M8155  XBYTE[0xcf00]
  14          #define  M8155_1 XBYTE[0xcf10]
  15          #define  Io8155_A XBYTE[0xef01]
  16          #define  Io8155_B XBYTE[0xef02]
  17          typedef unsigned char uchar;
  18          typedef unsigned int uint;
  19          #define  PARA1 0x28;
  20          #define  True  1
  21          #define  False 0
  22          void delay3(uint Tm_count);
  23          void sound(bit f,uchar i);
  24          void CCW22_PR(char O_X,char O_Y,code_1);
  25          uchar key_in(void);
  26          void RS_in();
  27          void pass();
  28          bit Send_c(uchar i);
  29          void delay();
  30          sbit Input_1 = P0^0;
  31          sbit Input_2 = P0^1;
  32          sbit Input_3 = P0^2;
  33          sbit Input_4 = P0^3;
  34          sbit Master  = P0^4;
  35          sbit Second  = P0^5;
  36          sbit Bad     = P0^6;
  37          sbit Speak   = P0^7;
  38          
  39          sbit LED_zd  = P1^4;
  40          sbit LED_zl  = P1^5;
  41          sbit P20=P2^0;
  42          sbit P21=P2^1;
  43          sbit P22=P2^2;
  44          
  45          sbit in1=P2^6;
  46          sbit in2=P2^7;
  47          sbit P00=P0^0;
  48          
  49          sbit Maste=P3^1;
  50          sbit Select=P3^0;
  51          
  52          sbit P34=P3^4;
  53          sbit P35=P3^5;
  54          sbit P36=P3^6;
  55          sbit P37=P3^7;
C51 COMPILER V7.50   LCD_INPUT                                                             12/01/2006 13:48:46 PAGE 2   

  56          bit RUN; //电机运行壮态
  57          bit Front;//电机前或后壮态 0/Front,1/back
  58          bit Key;
  59          bit RXD_D;
  60          bit Busy;
  61          uchar SAVE_D;
  62          uchar TH0_T;
  63          uchar TL0_T;
  64          uchar V_k;
  65          uchar speed;
  66          //code uchar DJ_F[]={0xFE,0xF7,0xFD,0xFB};
  67          //code uchar DJ_B[]={0xFB,0xFD,0xF7,0xFE};
  68          
  69          code uchar DJ_F[]={0xFA,0xFB,0xF9,0xFD,0xF5,0xF7,0xF6,0xFE}; 
  70          code uchar DJ_B[]={0xFE,0xF6,0xF7,0xF5,0xFD,0xF9,0xFB,0xFA}; 
  71          code uchar DJ_V[3][2]={0xa6,0xe2,
  72                                 0x49,0xb2,
  73                                 0x48,0x64};
  74          
  75          code uchar CGTAB[3][2]={0xba,0xe2,0x80,0xc1,0x10,0x80};
  76          void main()
  77          {
  78   1       uchar i,save;     
  79   1       uchar cont;
  80   1       bit FLAG_1,FLAG_2;
  81   1       Busy = False;
  82   1       speed = 0; 
  83   1       SCON = 0x52;
  84   1       TMOD = 0x21;
  85   1       IP   = 0x07;
  86   1       TH1=TL1=0xF4;
  87   1       RXD_D  = 0;
  88   1       SAVE_D = 0;
  89   1       V_k    = 0;
  90   1       
  91   1       TH0_T = DJ_V[0][0];
  92   1       RUN   = 0;
  93   1       TL0_T = 0;
  94   1       EA    = 1;
  95   1       TR1   = 1;
  96   1       EX0   = 1;
  97   1       delay();
  98   1       pass();
  99   1       while (1)
 100   1       {
 101   2          
 102   2              cont = 0; FLAG_2 = 0;
 103   2          while (1)
 104   2          {   
 105   3                     if (RXD_D) RS_in();
 106   3                 i = key_in();
 107   3                     if (RUN==0) {if (i == 6) break;}    /* 设定手动按键 */
 108   3                 if (i==0) 
 109   3                     {
 110   4                           if (cont >= 200) { i = save; break;} 
 111   4                                       else continue;
 112   4                     }
 113   3                 if (save == i) {if(cont >= 200) continue; else cont++;}
 114   3                          else {save=i;cont=0;};
 115   3           }
 116   2           if (!Busy) 
 117   2               {
C51 COMPILER V7.50   LCD_INPUT                                                             12/01/2006 13:48:46 PAGE 3   

 118   3                      FLAG_1 = Send_c(i);
 119   3                      if(FLAG_1==0) Bad=0;  else Bad=1;
 120   3           }
 121   2       }
 122   1      }
 123          //+++++++++++++++++++++++++++++++++++++++++
 124          void RS_in()
 125          {uchar i;
 126   1      
 127   1                          RXD_D=0;i=SAVE_D;SBUF=i;while(!TI);TI=0;
 128   1                            switch (i){
 129   2                                  case 1: {Front=0;ET0=1;TR0=1;}break;  /* 电机反转 */
 130   2                              case 2: {Front=1;ET0=1;TR0=1;}break;  /* 电机正转 */
 131   2                              case 3: {ET0=0;TR0=0;P2|=0x07;}break; /* 电机停   */
 132   2                              case 4: {TH0_T=DJ_V[0][V_k];}break;   /* 每分钟8毫升 */
 133   2                              case 5: {TH0_T=DJ_V[1][V_k];}break;   /* 每分钟4毫升 */
 134   2                              case 6: 
 135   2                                              {
 136   3                                                     if (V_k == 0) speed = 1;
 137   3                                                     TH0_T = DJ_V[2][V_k];
 138   3                                              } break;   /* 每分钟2毫升 */
 139   2                                      case 7: 
 140   2                          {       
 141   3                                   LED_zd = 0;                  /* 开治疗指示  */
 142   3                                                               RUN = 1;
 143   3                          } break;
 144   2                                      case 8:
 145   2                          {        
 146   3                                   LED_zl = 0;                  /* 开诊断指示  */
 147   3                                   RUN = 1;
 148   3                          } break;
 149   2                                      case 9: 
 150   2                          {        
 151   3                                   LED_zd = 1;                  /* 关治疗指示  */
 152   3                                   P1 |= 0x07; 
 153   3                                                               speed = 0;
 154   3                                   RUN = 0;
 155   3                          } break;
 156   2                                      case 10:
 157   2                          {        
 158   3                                   LED_zl = 1;                  /* 关诊断指示  */
 159   3                                   P1 |= 0x07;
 160   3                                                               speed = 0;
 161   3                                   RUN = 0;
 162   3                          }break;
 163   2                          case 11:V_k=0;break;                  /* 50ML注射器 */
 164   2                          case 12:V_k=1;break;                  /* 25ML注射器 */
 165   2                          case 13:{ RUN=~RUN;}break;            /* 发键连续关 */           
 166   2                          case 14: Busy=~Busy; break;           /*   主控忙   */        
 167   2                          default: break;
 168   2                                              }
 169   1                             
 170   1      }
 171          //==========================================
 172          bit Send_c(uchar i)
 173          {uint j;
 174   1       bit FLAG_1=0;
 175   1            Second = False;
 176   1           if (Master==0) return(1);
 177   1                  FLAG_1=0;
 178   1           for (j=0;j<65000;j++)
 179   1                 {  if (RXD_D) RS_in();  
C51 COMPILER V7.50   LCD_INPUT                                                             12/01/2006 13:48:46 PAGE 4   

 180   2                    if (Master==0) 
 181   2                          {i=~i;P0&=i;Second=1;
 182   3                            _nop_();_nop_();_nop_(); 
 183   3                            FLAG_1=1;P0|=0x3f;
 184   3                          } 
 185   2                           else continue;
 186   2                               break;
 187   2             }
 188   1              Second = True;
 189   1              return(FLAG_1);
 190   1      }
 191          
 192          //===========/*电机控制*/=================
 193          void time_0(void) interrupt 1
 194          {static uchar i,count; 
 195   1       uchar j;
 196   1           TR0 = 0;
 197   1            EA = 0;
 198   1           TH0 = TH0_T;
 199   1           TL0 = TL0_T;
 200   1           if ((V_k==0) && (TH0_T==0x48)) 
 201   1               {
 202   2                    if (count >= speed) count = 0; else { count++; goto time_1;}  
 203   2           }
 204   1                 
 205   1                if (i >= 4) i = 0;
 206   1                P1 |= 0x0F;
 207   1                if (!Front) {j = DJ_F[i]; P1 &= j;}
 208   1                   else {j = DJ_B[i]; P1 &= j;};
 209   1                i++;
 210   1               
 211   1      time_1:     EA=1;
 212   1                  TR0=1;
 213   1      }
 214          void INT_0(void) interrupt 0
 215          {uchar i,k; 
 216   1       bit s;
 217   1        EA=0;
 218   1        if (Second==0) {s=0;Second=1;} else s=1;
 219   1        //if (RXD_D) P24=0;else P24=1;
 220   1       for (k=0;k<0xff;k++)
 221   1         {
 222   2          if (Master!=0) continue;
 223   2           Second=0;
 224   2           while(!Master);
 225   2           _nop_();_nop_();_nop_();
 226   2               i=P0;i|=0xf0;i=~i;
 227   2           SAVE_D=i;RXD_D=1;
 228   2               break;
 229   2          }
 230   1        //if (RXD_D==0) LED_gz=0;else LED_gz=1;
 231   1       Second=s;
 232   1       
 233   1       EA=1;
 234   1      }
 235          /*按键处理*/
 236          uchar key_in(void)
 237          {  uchar i,j;
 238   1         
 239   1         P2=0xff;
 240   1         P2&=0xf8;
 241   1         _nop_();_nop_();_nop_();
C51 COMPILER V7.50   LCD_INPUT                                                             12/01/2006 13:48:46 PAGE 5   

 242   1         i=P2;
 243   1         i|=0xc7;
 244   1         _nop_();_nop_();_nop_();
 245   1         if (i==0xff) return(0);
 246   1         P2=i;j=i;
 247   1         i=P2;
 248   1         i|=0xf8;
 249   1         if (i==0xff) return(0);
 250   1         i&=j;Key=1;
 251   1        
 252   1         switch(i) 
 253   1           {case 0xf6: i=1; break;  //1
 254   2            case 0xf5: i=2; break;  //2
 255   2            case 0xf3: i=3; break;  //3
 256   2            case 0xee: i=4; break;  //4
 257   2            case 0xed: i=5; break;  //5
 258   2            case 0xeb: i=6; break;  //6
 259   2            case 0xde: i=7; break;  //7
 260   2            case 0xdd: i=8; break;  //8
 261   2            case 0xdb: i=9; break;  //p
 262   2           
 263   2           }
 264   1           return(i);
 265   1      }
 266          
 267          void delay(void)
 268          { uint i;
 269   1       for (i=0;i<20000;i++)
 270   1          {
 271   2               _nop_();
 272   2          }
 273   1      }
 274          /**********************************/
 275          void pass()
 276          { uchar i;
 277   1             CCW22_PR(2,3,3);
 278   1       loop: 
 279   1             
 280   1             Maste=1;
 281   1                 while (!Select);
 282   1                 P3=0xff;
 283   1                 Maste=0;
 284   1             while (Select);
 285   1                 i=P3;
 286   1                 i&=0xf0;
 287   1                 if (i!=0x50) {Maste=1;goto loop;}
 288   1             Maste=1;
 289   1      }
 290          /************************************/
 291          /* 汉字写入函数 (图形方式)CCW2_PR   */
 292          /* 连接字库:      CGTAB            */
 293          /* 函数调用入口:  CCW2_PR()        */
 294          /* 函数输入变量:  O_X,O_Y,CODE_1   */
 295          /************************************/
 296          void CCW22_PR(char O_X,char O_Y,code_1)
 297            {
 298   1          unsigned char count1;
 299   1          unsigned int i,j,a;
 300   1              a=0;
 301   1          i=PARA1;
 302   1          j=i*O_Y+O_X+0x01f0;   /* 如为320240屏k=j*O_Y+O_X+0x04ce*/
 303   1          wcadd1=0x4f;   /* CSRDIR 代码(下移) */
C51 COMPILER V7.50   LCD_INPUT                                                             12/01/2006 13:48:46 PAGE 6   

 304   1              Maste=0;
 305   1        for(i=0;i<2;i++)
 306   1            {
 307   2             wcadd1=0x46;      /* CSRW 代码 */
 308   2             wdadd1=j%256;     /* 设置光标地址CSR */
 309   2             wdadd1=j/256+0x40;
 310   2             wcadd1=0x42;    /* MWRITE 代码 */
 311   2             for(count1=i*16;count1<16*(i+1);count1++)
 312   2               {
 313   3               wdadd1=CGTAB[code_1][count1]; /* 写入数据 */
 314   3               }
 315   2             j=j+1;
 316   2             }
 317   1                 while (Select);
 318   1             P3&=0x5f;
 319   1        }
 320          void sound(bit f,uchar i)
 321          {
 322   1          for (;i>0;i--) 
 323   1          {
 324   2                  Speak = False;
 325   2                      if (f) delay3(100); else delay3(50);
 326   2                      Speak = True;
 327   2                      if (i>0) delay3(50);
 328   2              }
 329   1      }
 330          /********定时1ms***********/
 331          void delay3(uint Tm_count)
 332          {
 333   1        uint i;
 334   1        while (Tm_count--)
 335   1        {
 336   2               for (i=0; i<125; i++) {};
 337   2        }
 338   1      }
 339          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    975    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5       5
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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