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

📄 test.lst

📁 学习的例程!和通用的LCD1602的有区别
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.42,  test                                                                  20/12/05  15:29:58  PAGE 1   


ARM COMPILER V2.42, COMPILATION OF MODULE test
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe test.c THUMB BROWSE DEBUG TABS(4) 

stmt  level    source

    1          //#include <at91sam7s64.h>
    2          #include <sam7s.h>           //自定义的S64寄存器名函数
    3          #include <delay.h>           //自定义的DELAY函数
    4          
    5          
    6          #define LCD_RS    8
    7          #define LCD_RW    9
    8          #define LCD_EN    10
    9          //#define LCD_BACK_LIGHT    PORTC.2
   10          
   11          
   12          void LCD_init         (void);
   13          void LCD_en_write     (void);
   14          void LCD_write_char   (uchar command,uchar data);
   15          
   16          
   17          void io_set(uchar pin)     //单个IO口置位函数
   18          {
   19   1      ulong io_data=1;
   20   1      io_data=io_data<<pin;
   21   1      PIO_SODR=io_data;         //PIO_ODSR为IO线上置位寄存器,1有效,0无
   22   1      }
   23          
   24          
   25          void io_clear(uchar pin)       //单个IO口清零函数
   26          {
   27   1      ulong io_data=1;
   28   1      io_data=io_data<<pin;
   29   1      PIO_CODR=io_data;         //PIO_CODR为IO线上清零寄存器,1有效,0无
   30   1      }
   31          
   32          
   33          void LCD_init(void)       //液晶初始化
   34          {
   35   1      unsigned char i=0;
   36   1      delay_nms(1000);
   37   1      for(i=0;i<5;i++)
   38   1      {
   39   2      LCD_write_char(1,0x38);  //8位显示,5*7点阵字符
   40   2      delay_nms(40);
   41   2      }
   42   1      
   43   1      LCD_write_char(1,0x06);  //8位显示,5*7点阵字符
   44   1      delay_nms(40); 
   45   1      
   46   1      
   47   1       LCD_write_char(1,0x01);  //清屏
   48   1       delay_nms(40);
   49   1      
   50   1      // delay_nms(100);
   51   1       LCD_write_char(1,0x0f);  //显示开,光标开,闪烁开
   52   1       delay_nms(40);
   53   1      
   54   1      }
   55          
   56          void LCD_write_char(uchar command,uchar data) // 写数据
   57          {
   58   1       uchar i=0,temp=0;
   59   1       delay_nus(50);
ARM COMPILER V2.42,  test                                                                  20/12/05  15:29:58  PAGE 2   

   60   1       
   61   1       if(command==0) io_set(LCD_RS);  //RS=1
   62   1       else io_clear(LCD_RS); 
   63   1       
   64   1       for(i=0;i<8;i++) 
   65   1        {
   66   2        
   67   2         if(data&1) {io_set(i+24);}    //把相应的IO口置位或者清零
   68   2         else {io_clear(i+24);}
   69   2         data=data>>1;
   70   2         }                      //写入8位控制字
   71   1       // LCD_DATA_PORT=data;  //写8位控制字
   72   1        delay_nus(20);
   73   1       // LCD_en_write();
   74   1        io_clear(LCD_EN);
   75   1        delay_nus(200);
   76   1        io_set(LCD_EN);
   77   1        delay_nus(200);
   78   1       
   79   1      }
   80          
   81          void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
   82            {
   83   1          unsigned char address;
   84   1          if (y == 0) address = 0x80 + x;
   85   1          else 
   86   1             address = 0xc0 + x;
   87   1          LCD_write_char(1,address);
   88   1        }
   89          
   90          
   91          
   92          void main(void)
   93          {
   94   1      uint a=0;
   95   1      PMC_PCER=0x0F;      //PMC外设时钟使能
   96   1      PIO_PER=0xffffffff;            //PIOA0-31作为I/O使用
   97   1      PIO_OER=0xffffffff;            //I/O输出使能
   98   1      delay_nus(10);
   99   1      LCD_init();          //1602初始化
  100   1      
  101   1      while(1)
  102   1        {
  103   2               LCD_set_xy(0,0);
  104   2               LCD_write_char(0,'m');
  105   2               LCD_write_char(0,'y');
  106   2               LCD_write_char(0,'h');
  107   2               LCD_write_char(0,'k');
  108   2               LCD_write_char(0,'0');
  109   2               LCD_write_char(0,'0');
  110   2               LCD_write_char(0,'7');
  111   2                   
  112   2               
  113   2               delay_nms(1000);  
  114   2               LCD_set_xy(4,1);
  115   2               LCD_write_char(0,'m');
  116   2               LCD_write_char(0,'c');
  117   2               LCD_write_char(0,'u');
  118   2               LCD_write_char(0,'z');
  119   2               LCD_write_char(0,'o');
  120   2               LCD_write_char(0,'n');
  121   2               LCD_write_char(0,'e');
  122   2               LCD_write_char(0,'.');
  123   2               LCD_write_char(0,'c');
  124   2               LCD_write_char(0,'o');
  125   2               LCD_write_char(0,'m');
ARM COMPILER V2.42,  test                                                                  20/12/05  15:29:58  PAGE 3   

  126   2               
  127   2               delay_nms(1000);
  128   2         }
  129   1            
  130   1               
  131   1          
  132   1      }
ARM COMPILER V2.42,  test                                                                  20/12/05  15:29:58  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         delay_1us?T
 PUBLIC         delay_nus?T
 PUBLIC         delay_1ms?T
 PUBLIC         delay_nms?T
 PUBLIC         LCD_init?T
 PUBLIC         LCD_write_char?T
 PUBLIC         io_set?T
 PUBLIC         io_clear?T
 PUBLIC         LCD_set_xy?T
 PUBLIC         main



*** CODE SEGMENT '?PR?delay_1us?T?test':
    9:   }
 00000000  4770      BX          R14
 00000002          ENDP ; 'delay_1us?T'


*** CODE SEGMENT '?PR?delay_nus?T?test':
    7: void delay_nus(unsigned int n) ;
 00000000  B530      PUSH        {R4-R5,LR}
 00000002  1C05      MOV         R5,R0 ; n
 00000004  ---- Variable 'n' assigned to Register 'R5' ----
   12:   {
 00000004            ; SCOPE-START
   13:    unsigned int i=0;
 00000004  2000      MOV         R0,#0x0
 00000006  1C04      MOV         R4,R0 ; i
 00000008  ---- Variable 'i' assigned to Register 'R4' ----
   14:    for (i=0;i<n;i++)
 00000008  1C04      MOV         R4,R0 ; i
 0000000A  E002      B           L_3  ; T=0x00000012
 0000000C          L_4:
   15:    delay_1us();
 0000000C  F7FF      BL          delay_1us?T  ; T=0x0001  (1)
 0000000E  FFF8      BL          delay_1us?T  ; T=0x0001  (2)
 00000010  3401      ADD         R4,#0x1
 00000012          L_3:
 00000012  1C29      MOV         R1,R5 ; n
 00000014  1C20      MOV         R0,R4 ; i
 00000016  4288      CMP         R0,R1 ; i
 00000018  D3F8      BCC         L_4  ; T=0x0000000C
 0000001A            ; SCOPE-END
   16:   }
 0000001A  BC30      POP         {R4-R5}
 0000001C  BC08      POP         {R3}
 0000001E  4718      BX          R3
 00000020          ENDP ; 'delay_nus?T'


*** CODE SEGMENT '?PR?delay_1ms?T?test':
   19:   {
 00000000            ; SCOPE-START
   21:    for (i=0;i<1140;i++);
 00000000  2000      MOV         R0,#0x0
 00000002  ---- Variable 'i' assigned to Register 'R0' ----
 00000002          L_6:
 00000002  3001      ADD         R0,#0x1
 00000004  1C01      MOV         R1,R0 ; i
 00000006  4800      LDR         R2,=0x474
 00000008  4291      CMP         R1,R2 ; i
 0000000A  D3FA      BCC         L_6  ; T=0x00000002
 0000000C            ; SCOPE-END
   22:   }
ARM COMPILER V2.42,  test                                                                  20/12/05  15:29:58  PAGE 5   

 0000000C  4770      BX          R14
 0000000E          ENDP ; 'delay_1ms?T'


*** CODE SEGMENT '?PR?delay_nms?T?test':
 00000000  B510      PUSH        {R4,LR}
 00000002  1C04      MOV         R4,R0 ; n
 00000004  ---- Variable 'n' assigned to Register 'R4' ----
   25:   {
 00000004            ; SCOPE-START
   26:   unsigned int i=0;
 00000004  2000      MOV         R0,#0x0
 00000006  1C03      MOV         R3,R0 ; i
 00000008  ---- Variable 'i' assigned to Register 'R3' ----
   27:    for (i=0;i<n;i++)
 00000008  1C03      MOV         R3,R0 ; i
 0000000A  E002      B           L_13  ; T=0x00000012
 0000000C          L_14:
   28:    delay_1ms();
 0000000C  F7FF      BL          delay_1ms?T  ; T=0x0001  (1)
 0000000E  FFF8      BL          delay_1ms?T  ; T=0x0001  (2)
 00000010  3301      ADD         R3,#0x1
 00000012          L_13:
 00000012  1C21      MOV         R1,R4 ; n
 00000014  1C18      MOV         R0,R3 ; i
 00000016  4288      CMP         R0,R1 ; i
 00000018  D3F8      BCC         L_14  ; T=0x0000000C
 0000001A            ; SCOPE-END
   29:   }
 0000001A  BC10      POP         {R4}
 0000001C  BC08      POP         {R3}
 0000001E  4718      BX          R3
 00000020          ENDP ; 'delay_nms?T'


*** CODE SEGMENT '?PR?io_set?T?test':
   17: void io_set(uchar pin)     //单个IO口置位函数
 00000000  1C01      MOV         R1,R0 ; pin
 00000002  ---- Variable 'pin' assigned to Register 'R1' ----
   18: {
 00000002            ; SCOPE-START
   19: ulong io_data=1;
 00000002  2201      MOV         R2,#0x1
 00000004  ---- Variable 'io_data' assigned to Register 'R2' ----
   20: io_data=io_data<<pin;
 00000004  1C08      MOV         R0,R1 ; pin
 00000006  0600      LSL         R0,R0,#0x18 ; pin
 00000008  0E00      LSR         R0,R0,#0x18
 0000000A  4082      LSL         R2,R0
   21: PIO_SODR=io_data;         //PIO_ODSR为IO线上置位寄存器,1有效,0无
 0000000C  1C11      MOV         R1,R2 ; io_data
 0000000E  4800      LDR         R0,=0xFFFFF430
 00000010  6001      STR         R1,[R0,#0x0]
 00000012            ; SCOPE-END
   22: }
 00000012  4770      BX          R14
 00000014          ENDP ; 'io_set?T'


*** CODE SEGMENT '?PR?io_clear?T?test':
   25: void io_clear(uchar pin)       //单个IO口清零函数
 00000000  1C01      MOV         R1,R0 ; pin
 00000002  ---- Variable 'pin' assigned to Register 'R1' ----
   26: {
 00000002            ; SCOPE-START
   27: ulong io_data=1;
 00000002  2201      MOV         R2,#0x1
 00000004  ---- Variable 'io_data' assigned to Register 'R2' ----
   28: io_data=io_data<<pin;
 00000004  1C08      MOV         R0,R1 ; pin
 00000006  0600      LSL         R0,R0,#0x18 ; pin
 00000008  0E00      LSR         R0,R0,#0x18
ARM COMPILER V2.42,  test                                                                  20/12/05  15:29:58  PAGE 6   

 0000000A  4082      LSL         R2,R0
   29: PIO_CODR=io_data;         //PIO_CODR为IO线上清零寄存器,1有效,0无
 0000000C  1C11      MOV         R1,R2 ; io_data
 0000000E  4800      LDR         R0,=0xFFFFF434
 00000010  6001      STR         R1,[R0,#0x0]
 00000012            ; SCOPE-END
   30: }
 00000012  4770      BX          R14
 00000014          ENDP ; 'io_clear?T'


*** CODE SEGMENT '?PR?LCD_init?T?test':
   33: void LCD_init(void)       //液晶初始化
 00000000  B510      PUSH        {R4,LR}
   34: {
 00000002            ; SCOPE-START
   35: unsigned char i=0;
 00000002  2400      MOV         R4,#0x0
 00000004  ---- Variable 'i' assigned to Register 'R4' ----
   36: delay_nms(1000);
 00000004  48FA      LDR         R0,=0x3E8
 00000006  F7FF      BL          delay_nms?T  ; T=0x0001  (1)
 00000008  FFFB      BL          delay_nms?T  ; T=0x0001  (2)
   37: for(i=0;i<5;i++)
 0000000A  2400      MOV         R4,#0x0
 0000000C  E009      B           L_18  ; T=0x00000022
 0000000E          L_19:
   39: LCD_write_char(1,0x38);  //8位显示,5*7点阵字符
 0000000E  2001      MOV         R0,#0x1
 00000010  2138      MOV         R1,#0x38
 00000012  F7FF      BL          LCD_write_char?T  ; T=0x0001  (1)
 00000014  FFF5      BL          LCD_write_char?T  ; T=0x0001  (2)
   40: delay_nms(40);
 00000016  2028      MOV         R0,#0x28
 00000018  F7FF      BL          delay_nms?T  ; T=0x0001  (1)
 0000001A  FFF2      BL          delay_nms?T  ; T=0x0001  (2)
   41: }
 0000001C  3401      ADD         R4,#0x1
 0000001E  0624      LSL         R4,R4,#0x18
 00000020  0E24      LSR         R4,R4,#0x18
 00000022          L_18:
 00000022  1C20      MOV         R0,R4 ; i
 00000024  0600      LSL         R0,R0,#0x18 ; i
 00000026  0E00      LSR         R0,R0,#0x18
 00000028  2805      CMP         R0,#0x5
 0000002A  DBF0      BLT         L_19  ; T=0x0000000E
   43: LCD_write_char(1,0x06);  //8位显示,5*7点阵字符
 0000002C  2001      MOV         R0,#0x1

⌨️ 快捷键说明

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