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

📄 st7920.lst

📁 基于ARM的电梯控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
ARM COMPILER V2.40a,  ST7920                                                               19/07/07  01:23:00  PAGE 1   


ARM COMPILER V2.40a, COMPILATION OF MODULE ST7920
OBJECT MODULE PLACED IN ST7920.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\ARM\BIN\CA.exe ST7920.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /*本程序为液晶模块ST7920的驱动程序*/
    2          #include "config.h"
    3          //全局变量声明
    4          const uint8 RowNum[4]={0x80,0x90,0x88,0x98};    //定义每一行在LCM中的RAM首地址
    5          //**************************************************
    6              void Delay(uint16 n)
    7          { 
    8   1          int i;
    9   1          for (i=n;i>0x00;i--);
   10   1      }
   11          
   12          /*********串行传送一字节数据************************/
   13          void SendByte(uint8 dat)               
   14          {
   15   1          int i;
   16   1          for (i=0;i<8;i++)
   17   1          {
   18   2              IO1CLR=ST7920_Clk;               //SCK=0
   19   2              if((dat & 0x80)!=0)
   20   2              IO1SET=ST7920_Sda;               //SID=1
   21   2              else
   22   2              IO1CLR=ST7920_Sda;               //SID=0
   23   2              Delay(5);
   24   2              IO1SET=ST7920_Clk;               //SCK=1;
   25   2              dat = (dat<<1);
   26   2          }
   27   1      }
   28          
   29          /****************写控制指令****************************/
   30              void SendCmd(uint8 dat)                
   31          {
   32   1          SendByte(0xf8);
   33   1          SendByte(dat & 0xf0);
   34   1          SendByte((dat<<4)&0xf0);
   35   1      }
   36          
   37          /************写显示数据;也可以写一个单字节字符********/
   38              void SendDat(uint8 dat)                
   39          {
   40   1          SendByte(0xfa);
   41   1          SendByte(dat & 0xf0);
   42   1          SendByte((dat<<4)&0xf0);
   43   1      }
   44          /********显示单字符***
   45          x_addr      显示RAM地址
   46          data        字符值
   47          *******************************************/
   48              void DispChar(uint8 x_addr, uint8 data)
   49          {   
   50   1          SendCmd(x_addr);
   51   1          SendDat(data);
   52   1          
   53   1      }
   54          
   55          
   56          /********显示字符口串,多余位置以空格填补***
   57          x_addr  显示RAM地址
   58          p       指向字符串的指针
   59          *******************************************/
ARM COMPILER V2.40a,  ST7920                                                               19/07/07  01:23:00  PAGE 2   

   60              void DispChars(uint8 Addr,uint8 *p,uint8 Num)
   61          {   
   62   1          uint8 i;
   63   1          SendCmd(Addr);
   64   1          for(i=0;i<Num;i++)
   65   1          SendDat(*(p+i));
   66   1      }
   67          
   68          void Disp(uint8 x_addr, uint8 *p)
   69          {   
   70   1          
   71   1          uint8 i,flag=0;
   72   1          SendCmd(x_addr);
   73   1          for(i=0;i<14;i++)
   74   1          {
   75   2          if(*(p+i)=='\0')
   76   2          flag=1;
   77   2          if(flag==0)
   78   2          SendDat((uint8)*(p+i));
   79   2          else
   80   2          SendDat(' ');
   81   2          }
   82   1          
   83   1          
   84   1      }
   85          
   86          /***************写一个汉字到 LCD 屏指定位置*************
   87          x_add 显示 RAM 地址
   88          high/low 为显示汉字的编码
   89          ****************************************************/
   90          void Display(uint8 x_add,uint8 high,uint8 low)
   91          {
   92   1          SendCmd(x_add);
   93   1          SendDat(high);
   94   1          SendDat(low);
   95   1      }
   96          
   97          /****************************************************************************
   98          * 名称:PreDisp()
   99          * 功能:显示预处理
  100          * 入口参数:data    输入输出的数据
  101                      *p      对应的字符串指针
  102          * 出口参数:无
  103          ****************************************************************************/
  104          void PreDispIndoorCall(uint8 *data,uint8 *p)
  105          {
  106   1          uint8 i;
  107   1          for(i=0; i<16; i++) 
  108   1          {  
  109   2          if((0x40&(*(data+i)))!=0)
  110   2          *(p+i)=0x08;
  111   2          else
  112   2          *(p+i)=0x2d;
  113   2          }
  114   1      } 
  115          /****************************************************************************
  116          * 名称:PreDisp()
  117          * 功能:显示预处理
  118          * 入口参数:data    输入输出的数据
  119                      *p      对应的字符串指针
  120          * 出口参数:无
  121          ****************************************************************************/
  122          void PreDispOutdoorCallUp(uint8 *data,uint8 *p)
  123          {
  124   1          uint8 i;
  125   1          for(i=0; i<16; i++) 
ARM COMPILER V2.40a,  ST7920                                                               19/07/07  01:23:00  PAGE 3   

  126   1          {  
  127   2          if((0x20&(*(data+i)))!=0)
  128   2          *(p+i)=0x08;
  129   2          else
  130   2          *(p+i)=0x2d;
  131   2          }
  132   1      } 
  133          /****************************************************************************
  134          * 名称:PreDisp()
  135          * 功能:显示预处理
  136          * 入口参数:data    输入输出的数据
  137                      *p      对应的字符串指针
  138          * 出口参数:无
  139          ****************************************************************************/
  140          void PreDispOutdoorCallDown(uint8 *data,uint8 *p)
  141          {
  142   1          uint8 i;
  143   1          for(i=0; i<16; i++) 
  144   1          {  
  145   2          if((0x10&(*(data+i)))!=0)
  146   2          *(p+i)=0x08;
  147   2          else
  148   2          *(p+i)=0x2d;
  149   2          }
  150   1      } 
  151          void lcdclr(void)
  152          { uint8 lcdlow,lcdlie;  
  153   1        //清屏
  154   1             for(lcdlow=0;lcdlow<4;lcdlow++)
  155   1               for(lcdlie=0;lcdlie<8;lcdlie++)
  156   1                 Display(RowNum[lcdlow]+lcdlie,0xA1,0xA0);   //0xA1A0为空格
  157   1      
  158   1      }
  159          //*****************************************************
  160              void InitLcm(void)           //初始化 LCM
  161          {
  162   1          IO1DIR|=(ST7920_Cs|ST7920_Clk|ST7920_Sda|ST7920_Rst);
  163   1          IO1SET=ST7920_Cs;       // 高电平使能
  164   1          IO1CLR=ST7920_Rst;
  165   1          Delay(0xff);
  166   1          IO1SET=ST7920_Rst;
  167   1          Delay(0xff);
  168   1          SendCmd(0x30);              //功能设置:一次送 8 位数据,基本指令集
  169   1          SendCmd(0x04);              //点设定 :显示字符/ 光标从左到右移位,DDRAM 地址加一
  170   1          SendCmd(0x0f);              //显示设定:开显示 ,显示光标,当前显示位反白闪动
  171   1          SendCmd(0x01);              //清DDRAM
  172   1          SendCmd(0x02);              //*DDRAM 地址归位
  173   1          SendCmd(DDRAM_0);            //DDRAM
  174   1          SendCmd(off_cursor);         //关光标 
  175   1      }
  176          
  177          
  178          
  179              
  180          
  181          
  182          
ARM COMPILER V2.40a,  ST7920                                                               19/07/07  01:23:00  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** PUBLICS:
 PUBLIC         Delay?T
 PUBLIC         SendCmd?T
 PUBLIC         SendDat?T
 PUBLIC         DispChars?T
 PUBLIC         Display?T
 PUBLIC         InitLcm?T
 PUBLIC         DispChar?T
 PUBLIC         PreDispOutdoorCallUp?T
 PUBLIC         PreDispOutdoorCallDown?T
 PUBLIC         PreDispIndoorCall?T
 PUBLIC         lcdclr?T
 PUBLIC         Disp?T
 PUBLIC         SendByte?T
 PUBLIC         RowNum



*** DATA SEGMENT '?CON?ST7920':
 00000000          RowNum:
 00000000           BEGIN_INIT
 00000000  80        DB          0x80
 00000001  90        DB          0x90
 00000002  88        DB          0x88
 00000003  98        DB          0x98
 00000004           END_INIT



*** CODE SEGMENT '?PR?Delay?T?ST7920':
    6:     void Delay(uint16 n)
 00000000  1C01      MOV         R1,R0 ; n
 00000002  ---- Variable 'n' assigned to Register 'R1' ----
    7: { 
 00000002            ; SCOPE-START
    9:       for (i=n;i>0x00;i--);
 00000002  1C08      MOV         R0,R1 ; n
 00000004  0400      LSL         R0,R0,#0x10 ; n
 00000006  0C00      LSR         R0,R0,#0x10
 00000008  ---- Variable 'i' assigned to Register 'R0' ----
 00000008  E000      B           L_3  ; T=0x0000000C
 0000000A          L_1:
 0000000A  3801      SUB         R0,#0x1
 0000000C          L_3:
 0000000C  1C01      MOV         R1,R0 ; i
 0000000E  2900      CMP         R1,#0x0 ; i
 00000010  DCFB      BGT         L_1  ; T=0x0000000A
 00000012            ; SCOPE-END
   10: }
 00000012  4770      BX          R14
 00000014          ENDP ; 'Delay?T'


*** CODE SEGMENT '?PR?SendByte?T?ST7920':
   13: void SendByte(uint8 dat)               
 00000000  B500      PUSH        {LR}
 00000002  1C03      MOV         R3,R0 ; dat
 00000004  ---- Variable 'dat' assigned to Register 'R3' ----
   14: {
 00000004            ; SCOPE-START
   16:      for (i=0;i<8;i++)
 00000004  2200      MOV         R2,#0x0
 00000006  ---- Variable 'i' assigned to Register 'R2' ----
 00000006          L_9:
   18:          IO1CLR=ST7920_Clk;               //SCK=0
 00000006  4800      LDR         R1,=0x40000
 00000008  4800      LDR         R0,=0xE002801C
 0000000A  6001      STR         R1,[R0,#0x0]
   19:          if((dat & 0x80)!=0)
ARM COMPILER V2.40a,  ST7920                                                               19/07/07  01:23:00  PAGE 5   

 0000000C  1C18      MOV         R0,R3 ; dat
 0000000E  0600      LSL         R0,R0,#0x18 ; dat
 00000010  0E00      LSR         R0,R0,#0x18
 00000012  2180      MOV         R1,#0x80
 00000014  4208      TST         R0,R1
 00000016  D003      BEQ         L_11  ; T=0x00000020
   20:          IO1SET=ST7920_Sda;               //SID=1
 00000018  4800      LDR         R1,=0x20000
 0000001A  4800      LDR         R0,=0xE0028014
 0000001C  6001      STR         R1,[R0,#0x0]
 0000001E  E002      B           L_12  ; T=0x00000026
 00000020          L_11:
   22:          IO1CLR=ST7920_Sda;               //SID=0
 00000020  4800      LDR         R1,=0x20000
 00000022  4800      LDR         R0,=0xE002801C
 00000024  6001      STR         R1,[R0,#0x0]
 00000026          L_12:
   23:          Delay(5);

⌨️ 快捷键说明

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