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

📄 led.lst

📁 客户液晶屏静态扫描驱动
💻 LST
字号:
C51 COMPILER V7.50   LED                                                                   07/24/2005 09:42:58 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN E:\hex\LED.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LED.C BROWSE DEBUG OBJECTEXTEND TABS(1) OBJECT(E:\hex\LED.obj)

line level    source

   1          /*-----------------------------------
   2            收款机数字显示器驱动程序(通信部分)
   3            -----------------------------------*/
   4          /*数字led显示程序模块,通常显示0。00,只有在营业过程中改变输入的数字及小计,单价,余额指示灯*/
   5          #include <reg51.h>
   6          #include <absacc.h>
   7          #include <intrins.h>
   8          #include <stdio.h>
   9          
  10          #define  uchar  unsigned char
  11          #define  uint   unsigned int
  12          #define  ulong  unsigned long
  13          
  14          #define   TTHH0    -1800/256    /*  1500  */
  15          #define   TTLL0    -1800%256
  16          
  17          /*--------  命令句柄定义 --------*/
  18          #define OpenLED     0xa1  /* 打开LED显示 0.00 */
  19          #define CloseLED    0xa2  /* 关闭LED显示   */
  20          #define WriteLED    0xa3  /* 接收LED显示缓冲区数据  */
  21          #define TestLED     0xa4  /* 全显8888或顺序地显示每一段位*/
  22          #define LEDbeep     0xa5
  23          
  24          /* 以上各命令在正确接收与处理后返回Finish句柄数据长度为0,否则返
  25             回ERROR或其它不同状态.其中的数据格式请根据LED需显示内容,长度 
  26             自行设计   */
  27          
  28          #define  Error       0xff
  29          #define  OK          0x0
  30          #define  Finish      0x70
  31          
  32          #define   WaitTI    while(TI==0);TI=0
  33          #define   WaitRI    while(RI==0);RI=0
  34          
  35          #define   Beep     P3_7
  36          #define   SL1      P3_2
  37          #define   SL2      P3_3
  38          #define   SL3      P3_4
  39          #define   SL4      P3_5
  40          
  41          sbit   P1_0=P1^0;
  42          sbit   P1_1=P1^1;
  43          sbit   P1_2=P1^2;
  44          sbit   P1_3=P1^3;
  45          sbit   P1_4=P1^4;
  46          sbit   P1_5=P1^5;
  47          sbit   P1_6=P1^6;
  48          sbit   P1_7=P1^7;
  49          
  50          sbit   P3_0=P3^0;
  51          sbit   P3_1=P3^1;
  52          sbit   P3_2=P3^2;
  53          sbit   P3_3=P3^3;
  54          sbit   P3_4=P3^4;
  55          sbit   P3_5=P3^5;
C51 COMPILER V7.50   LED                                                                   07/24/2005 09:42:58 PAGE 2   

  56          sbit   P3_6=P3^6;
  57          sbit   P3_7=P3^7;
  58          
  59          sbit TA   = 0xc7;
  60          sbit RWT  = 0xbf;
  61          sbit EWT  = 0x89;
  62          sbit WTR  = 0x91;
  63          sbit EXBS = 0xdd;
  64          
  65          /******************数据结构定义*****************************************/
  66          
  67          uchar  ComBuf[20];
  68          uchar  DisBuf[20];
  69          
  70          uchar  data Order,Len,ledn;
  71          uint  data Counter;
  72          uchar data uc0;
  73          uchar bdata p3d;
  74          sbit p3d0=p3d^0;
  75          sbit p3d1=p3d^1;
  76          sbit p3d2=p3d^2;
  77          sbit p3d3=p3d^3;
  78          sbit p3d4=p3d^4;
  79          sbit p3d5=p3d^5;
  80          bit   bdata fini,FLASH;
  81          
  82          void  Receive(void);
  83          
  84          uchar code TAB[26]={       //共阴极
  85                        0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,//0,1,2,3,4,5,6,7,8,9,
  86                        0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,//0.,1.,2.,3.,4.,5.,6.,7.,8.,9.
  87                        0xBF,0xfd,0X00,0XFF,0X3F,0X7F  //-,合计,8., ,-.,.
  88                       };
  89          /****************************************
  90           --------- 定时器1中断服务程序 ----------
  91           *****************************************/
  92          void TimeCount1(void) interrupt 3 using 0
  93          {
  94   1        _nop_();
  95   1      }                      
  96          
  97          /*****************************
  98           ---- 定时器0中断服务程序 ----
  99           *****************************/
 100          void TimeCount0(void)  interrupt 1 using 1
 101          {
 102   1           TH0=TTHH0;
 103   1           TL0=TTLL0;
 104   1           p3d=ledn;
 105   1           P3_2=p3d0;
 106   1           P3_3=p3d1;
 107   1           P3_4=p3d2;
 108   1           P3_5=p3d3;
 109   1           P1=DisBuf[ledn];
 110   1           ledn++;
 111   1           if(ledn==12){ledn=15;}
 112   1           if(ledn>15){ledn=0;}
 113   1      }
 114          /**********************
 115           ----- 外部中断0  -----
 116          /**********************/
 117          void External0(void) interrupt 0 using 2
C51 COMPILER V7.50   LED                                                                   07/24/2005 09:42:58 PAGE 3   

 118          {
 119   1         _nop_();
 120   1      }
 121          
 122          /**************************
 123           ------  外部中断1  -------
 124           **************************/
 125          void External1(void) interrupt 2 using 3
 126          {
 127   1          _nop_();
 128   1      }
 129          
 130          /* 从串行口接收一字节数据  */
 131          void RcvDataBy232(void)
 132          {  
 133   1           Counter=0;
 134   1           do
 135   1           {
 136   2               Counter++;
 137   2               if(Counter>0x2ff)/* 若有一段时间收不到数据则退出  */
 138   2               {
 139   3                  uc0=0xff;
 140   3                  goto endri;
 141   3               }
 142   2         }while(RI==0);
 143   1         uc0=SBUF;
 144   1      endri:   RI=0;
 145   1      }
 146          //=====================================================
 147          void InitSBUF(void)     /* 初始化串行口实现点对点通信 */
 148          {
 149   1         IE=0;
 150   1         TMOD=0x21;
 151   1         TL1=0xfd;            /* 9600时TH1,TL1=0xfd,1200时TH1,TL1=0XE8 */
 152   1         TH1=0xfd;
 153   1      
 154   1         TH0=TTHH0;
 155   1         TL0=TTLL0;
 156   1         PCON=0x0;
 157   1         SCON=0x50;
 158   1         TR0=1;
 159   1         ET0=1;
 160   1         IP=0;
 161   1         PS=1;
 162   1         TR1=1;  
 163   1         RI=0;    TI=0;
 164   1      
 165   1      }
 166          
 167          /*命令格式:
 168          包头(1,0xAA) + 命令(1) + 机器号(1) + 长度(1) + 数据 + Checksum(1)*/
 169          void ssio(void) interrupt 4 using 3
 170          {
 171   1          ES=0;
 172   1          ET0=0;
 173   1          Receive();
 174   1          ES=1;  ET0=1;
 175   1          RI=0;  TI=0; 
 176   1      }
 177          
 178          /*接收,Order为全局变量,数据放在Un.ComBuf联合体中 */
 179          void Receive(void)
C51 COMPILER V7.50   LED                                                                   07/24/2005 09:42:58 PAGE 4   

 180          {
 181   1           uchar i;//,c
 182   1           RcvDataBy232();
 183   1           ComBuf[0]=uc0;
 184   1           RcvDataBy232();
 185   1           ComBuf[1]=uc0;
 186   1           RcvDataBy232();
 187   1           ComBuf[2]=uc0;
 188   1           Order=uc0;         /* 接收命令句柄  */
 189   1           RcvDataBy232();
 190   1           ComBuf[3]=uc0;
 191   1           RcvDataBy232(); /* 接收数据长度  */
 192   1           ComBuf[4]=uc0;
 193   1           Len=uc0;
 194   1           for(i=5;i<Len;i++)//&&i<15
 195   1           {
 196   2              RcvDataBy232();       /* 接收数据  */
 197   2              ComBuf[i]=uc0;
 198   2           }
 199   1           RcvDataBy232();  //crc
 200   1           RcvDataBy232();
 201   1           fini=1;
 202   1           SBUF=0x4f;
 203   1           WaitTI;
 204   1           SBUF=0x4b;
 205   1           WaitTI;
 206   1           SBUF=0x00;
 207   1           WaitTI;
 208   1           SBUF=0x05;
 209   1           WaitTI;
 210   1           SBUF=0x00;
 211   1           WaitTI;
 212   1           SBUF=0x00;
 213   1           WaitTI;
 214   1      }
 215          //===================================
 216          //void delay(uint z)
 217          //{
 218          //    uchar i;
 219          //    while(z-->0){
 220          //       for(i=0;i<100;i++)  _nop_();
 221          ///    }
 222          //}
 223          //=====================================
 224          void main(void)
 225          {
 226   1           bit b;
 227   1           uchar count;
 228   1           uchar i,p,n;
 229   1           uchar d;
 230   1           ledn=0;
 231   1           Beep=1;
 232   1           fini=0;
 233   1           InitSBUF();
 234   1           EA=1;
 235   1           for(i=0;i<20;i++) ComBuf[i]=0x00;
 236   1           for(i=0;i<15;i++) DisBuf[i]=0XFF;
 237   1           DisBuf[0]=TAB[0];
 238   1           DisBuf[1]=TAB[0];
 239   1           DisBuf[2]=TAB[0];
 240   1           DisBuf[3]=TAB[25];
 241   1           FLASH=0;
C51 COMPILER V7.50   LED                                                                   07/24/2005 09:42:58 PAGE 5   

 242   1           count=0;
 243   1           while(1)         /* 通过查询方式接收来自主板的显示请求 */
 244   1           {
 245   2               ES=0;
 246   2               EA=0;
 247   2               count++;
 248   2               if(count>0x1f)
 249   2               {
 250   3                  count=0;
 251   3                  p3d=ledn;
 252   3                  P3_2=p3d0;
 253   3                  P3_3=p3d1;
 254   3                  P3_4=p3d2;
 255   3                  P3_5=p3d3;
 256   3                  P1=DisBuf[ledn];
 257   3                  ledn++;
 258   3                  if(ledn==12){ledn=15;}
 259   3                  if(ledn>15){ledn=0;}
 260   3               }
 261   2               if(RI==1){Receive();}
 262   2               if(fini==1)  /* 分类处理不同的命令  */
 263   2               {    
 264   3                   for(i=0;i<20;i++) DisBuf[i]=0xff;
 265   3                   ES=0;
 266   3                   i=Len-1;p=0;b=0;
 267   3      AA:
 268   3                   if(ComBuf[i]>=0x30&&ComBuf[i]<=0x39)   //数字
 269   3                   {
 270   4                      if(b==0){d=ComBuf[i]-0x30;}
 271   4                      else
 272   4                      {
 273   5                         if(p==2||p==6||p==10){d=ComBuf[i]-0x30;}
 274   5                         else{d=ComBuf[i]-0x30+10;b=0;}
 275   5                      }
 276   4                      DisBuf[p]=TAB[d];
 277   4                      p++;
 278   4                   }
 279   3                   else if(ComBuf[i]==0x2e)
 280   3                   {
 281   4      
 282   4                      if(p==3||p==7)
 283   4                      {
 284   5                         for(n=0;n<11;n++)
 285   5                         {
 286   6                            DisBuf[11-n]=DisBuf[10-n];
 287   6                         }
 288   5                         DisBuf[0]=0xff;
 289   5                         p++;
 290   5                      }
 291   4                      b=1;
 292   4                      if(p==11){b=0;}
 293   4                   }   //.
 294   3                   else if(ComBuf[i]==0x2d)         //-
 295   3                   {
 296   4                      if(b==0) DisBuf[p]=0xbf;
 297   4                      else DisBuf[p]=TAB[24];
 298   4                      b=0;
 299   4                      p++;
 300   4                   }
 301   3                   else {goto AB;}
 302   3                   if(i<5||p>12){goto AB;}
 303   3                   i--;
C51 COMPILER V7.50   LED                                                                   07/24/2005 09:42:58 PAGE 6   

 304   3                   goto AA; 
 305   3      AB:          if(b==1)
 306   3                   {
 307   4                      DisBuf[p]=TAB[25]; 
 308   4                   }
 309   3                   if(Order==0x00)  //单价
 310   3                   {DisBuf[15]=0xfe;}
 311   3                   if(Order==0x01)  //合计
 312   3                   {DisBuf[15]=0xfd;}
 313   3                   if(Order==0x02)  //找零
 314   3                   {DisBuf[15]=0xfb;}
 315   3                   for(i=0;i<20;i++) ComBuf[i]=0x00;
 316   3                   fini=0;
 317   3               }
 318   2               
 319   2      //         ES=1;
 320   2            }
 321   1      }
 322          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    664    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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