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

📄 st7920.lis

📁 ST7920液晶控制器的AVR程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module ST7920.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\毕业设计\LCM12864\ST7920.c
 0000                   .dbfunc e Delayus _Delayus fV
 0000           ;              i -> y+0
 0000           ;              x -> y+8
                        .even
 0000           _Delayus::
 0000 0E940000          xcall push_arg4
 0004 2897              sbiw R28,8
 0006                   .dbline -1
 0006                   .dbline 10
 0006           ; #include "ST7920.h"
 0006           ; void Delayus(ulong x);
 0006           ; void Delayms(uchar x);
 0006           ; void BUSYLOOP(void);
 0006           ; void WriteCommand(uchar command);
 0006           ; void WriteData(uchar data);
 0006           ; 
 0006           ; /**********************延时程序START********************************/
 0006           ; void Delayus(ulong x)         
 0006           ; {     ulong i;
 0006                   .dbline 11
 0006           ;       i = x<<4;
 0006 84E0              ldi R24,4
 0008 90E0              ldi R25,0
 000A 0885              ldd R16,y+8
 000C 1985              ldd R17,y+9
 000E 2A85              ldd R18,y+10
 0010 3B85              ldd R19,y+11
 0012 8A93              st -y,R24
 0014 0E940000          xcall lsl32
 0018 0883              std y+0,R16
 001A 1983              std y+1,R17
 001C 2A83              std y+2,R18
 001E 3B83              std y+3,R19
 0020           L2:
 0020                   .dbline 12
 0020           ;       while(i--);
 0020           L3:
 0020                   .dbline 12
 0020 2880              ldd R2,y+0
 0022 3980              ldd R3,y+1
 0024 4A80              ldd R4,y+2
 0026 5B80              ldd R5,y+3
 0028 2C82              std y+4,R2
 002A 3D82              std y+5,R3
 002C 4E82              std y+6,R4
 002E 5F82              std y+7,R5
 0030 81E0              ldi R24,1
 0032 90E0              ldi R25,0
 0034 A0E0              ldi R26,0
 0036 B0E0              ldi R27,0
 0038 2C80              ldd R2,y+4
 003A 3D80              ldd R3,y+5
 003C 4E80              ldd R4,y+6
 003E 5F80              ldd R5,y+7
 0040 281A              sub R2,R24
 0042 390A              sbc R3,R25
 0044 4A0A              sbc R4,R26
 0046 5B0A              sbc R5,R27
 0048 2882              std y+0,R2
 004A 3982              std y+1,R3
 004C 4A82              std y+2,R4
 004E 5B82              std y+3,R5
 0050 2C80              ldd R2,y+4
 0052 3D80              ldd R3,y+5
 0054 4E80              ldd R4,y+6
 0056 5F80              ldd R5,y+7
 0058 00E0              ldi R16,0
 005A 2016              cp R2,R16
 005C 3006              cpc R3,R16
 005E 4006              cpc R4,R16
 0060 5006              cpc R5,R16
 0062 F1F6              brne L2
 0064           X0:
 0064                   .dbline -2
 0064           L1:
 0064                   .dbline 0 ; func end
 0064 2C96              adiw R28,12
 0066 0895              ret
 0068                   .dbsym l i 0 l
 0068                   .dbsym l x 8 l
 0068                   .dbend
 0068                   .dbfunc e Delayms _Delayms fV
 0068           ;              i -> R20,R21
 0068           ;              x -> R10
                        .even
 0068           _Delayms::
 0068 0E940000          xcall push_xgset300C
 006C A02E              mov R10,R16
 006E                   .dbline -1
 006E                   .dbline 15
 006E           ; }
 006E           ; void Delayms(uchar x)
 006E           ; {   uint i;
 006E                   .dbline 16
 006E           ;       i = x;
 006E 4A2D              mov R20,R10
 0070 5527              clr R21
 0072 05C0              xjmp L7
 0074           L6:
 0074                   .dbline 17
 0074           ;       while(i--)Delayus(1000);
 0074 08EE              ldi R16,232
 0076 13E0              ldi R17,3
 0078 20E0              ldi R18,0
 007A 30E0              ldi R19,0
 007C C1DF              xcall _Delayus
 007E           L7:
 007E                   .dbline 17
 007E 1A01              movw R2,R20
 0080 4150              subi R20,1
 0082 5040              sbci R21,0
 0084 2220              tst R2
 0086 B1F7              brne L6
 0088 3320              tst R3
 008A A1F7              brne L6
 008C           X1:
 008C                   .dbline -2
 008C           L5:
 008C                   .dbline 0 ; func end
 008C 0C940000          xjmp pop_xgset300C
 0090                   .dbsym r i 20 i
 0090                   .dbsym r x 10 c
 0090                   .dbend
 0090                   .dbfunc e BUSYLOOP _BUSYLOOP fV
                        .even
 0090           _BUSYLOOP::
 0090                   .dbline -1
 0090                   .dbline 20
 0090           ; }      
 0090           ; void BUSYLOOP(void)
 0090           ; {
 0090                   .dbline 21
 0090           ;       Delayus(10);
 0090 0AE0              ldi R16,10
 0092 10E0              ldi R17,0
 0094 20E0              ldi R18,0
 0096 30E0              ldi R19,0
 0098 B3DF              xcall _Delayus
 009A                   .dbline -2
 009A           L9:
 009A                   .dbline 0 ; func end
 009A 0895              ret
 009C                   .dbend
 009C                   .dbfunc e lcm_out _lcm_out fV
 009C           ;              d -> R22
 009C           ;              i -> R20
 009C           ;              a -> R16
                        .even
 009C           _lcm_out::
 009C 4A93              st -y,R20
 009E 6A93              st -y,R22
 00A0                   .dbline -1
 00A0                   .dbline 27
 00A0           ; }
 00A0           ; /**********************延时程序END********************************/
 00A0           ;          
 00A0           ; /**********************串行方式相关程序START*********************/                                                            
 00A0           ; void lcm_out(uchar a)
 00A0           ; {
 00A0                   .dbline 29
 00A0           ;       char i,d;
 00A0           ;       for(i=0;i<8;i++)
 00A0 4427              clr R20
 00A2 0AC0              xjmp L14
 00A4           L11:
 00A4                   .dbline 30
 00A4           ;       {
 00A4                   .dbline 31
 00A4           ;               clrbit(LCD_CTRL,E);  
 00A4 C798              cbi 0x18,7
 00A6                   .dbline 32
 00A6           ;               d=a&0x80;
 00A6 602F              mov R22,R16
 00A8 6078              andi R22,128
 00AA                   .dbline 33
 00AA           ;               if(d)
 00AA 11F0              breq L15
 00AC           X2:
 00AC                   .dbline 34
 00AC           ;                       setbit(LCD_CTRL,RW);
 00AC C69A              sbi 0x18,6
 00AE 01C0              xjmp L16
 00B0           L15:
 00B0                   .dbline 36
 00B0           ;               else
 00B0           ;                       clrbit(LCD_CTRL,RW);
 00B0 C698              cbi 0x18,6
 00B2           L16:
 00B2                   .dbline 37
 00B2           ;               a<<=1;
 00B2 000F              lsl R16
 00B4                   .dbline 38
 00B4           ;               setbit(LCD_CTRL,E); //上升弦发送
 00B4 C79A              sbi 0x18,7
 00B6                   .dbline 39
 00B6           ;       }
 00B6           L12:
 00B6                   .dbline 29
 00B6 4395              inc R20
 00B8           L14:
 00B8                   .dbline 29
 00B8 4830              cpi R20,8
 00BA A0F3              brlo L11
 00BC           X3:
 00BC                   .dbline -2
 00BC           L10:
 00BC                   .dbline 0 ; func end
 00BC 6991              ld R22,y+
 00BE 4991              ld R20,y+
 00C0 0895              ret
 00C2                   .dbsym r d 22 c
 00C2                   .dbsym r i 20 c
 00C2                   .dbsym r a 16 c
 00C2                   .dbend
 00C2                   .dbfunc e WriteCommand _WriteCommand fV
 00C2           ;              s -> R20
 00C2           ;        command -> R22
                        .even
 00C2           _WriteCommand::
 00C2 4A93              st -y,R20
 00C4 6A93              st -y,R22
 00C6 602F              mov R22,R16
 00C8                   .dbline -1
 00C8                   .dbline 44
 00C8           ; }
 00C8           ; 
 00C8           ; 
 00C8           ; void WriteCommand(uchar command)      //发送命令字
 00C8           ; {    
 00C8                   .dbline 46
 00C8           ;       uchar s;  //,i; 
 00C8           ;       s=command&0xf0;
 00C8 462F              mov R20,R22
 00CA 407F              andi R20,240
 00CC                   .dbline 47
 00CC           ;       lcm_out(0xf8);                     //送写命令指令  1111 1 RW=0 RS=0  0
 00CC 08EF              ldi R16,248
 00CE E6DF              xcall _lcm_out
 00D0                   .dbline 48
 00D0           ;       lcm_out(s);            //发送高四位数据
 00D0 042F              mov R16,R20
 00D2 E4DF              xcall _lcm_out
 00D4                   .dbline 49
 00D4           ;       s=command&0x0f;
 00D4 462F              mov R20,R22
 00D6 4F70              andi R20,15
 00D8                   .dbline 50
 00D8           ;       s<<=4;
 00D8 842F              mov R24,R20
 00DA 8F70              andi R24,#0x0F
 00DC 8295              swap R24
 00DE 482F              mov R20,R24
 00E0                   .dbline 51
 00E0           ;       lcm_out(s);            //发送低四位数据
 00E0 082F              mov R16,R24
 00E2 DCDF              xcall _lcm_out
 00E4                   .dbline -2
 00E4           L17:
 00E4                   .dbline 0 ; func end
 00E4 6991              ld R22,y+
 00E6 4991              ld R20,y+
 00E8 0895              ret
 00EA                   .dbsym r s 20 c
 00EA                   .dbsym r command 22 c
 00EA                   .dbend
 00EA                   .dbfunc e WriteData _WriteData fV
 00EA           ;              s -> R20
 00EA           ;           data -> R22
                        .even
 00EA           _WriteData::
 00EA 4A93              st -y,R20
 00EC 6A93              st -y,R22
 00EE 602F              mov R22,R16
 00F0                   .dbline -1
 00F0                   .dbline 57
 00F0           ;       //for(i=1;i>0;i--)BUSYLOOP();   //延时10us       延时后写命令就消失?
 00F0           ; }
 00F0           ; 
 00F0           ; 
 00F0           ; void WriteData(uchar data)
 00F0           ; {
 00F0                   .dbline 60
 00F0           ;     
 00F0           ;       uchar s;  //,i; 
 00F0           ;       s=data&0xf0;
 00F0 462F              mov R20,R22
 00F2 407F              andi R20,240
 00F4                   .dbline 61
 00F4           ;       lcm_out(0xfa);         //送写数据指令  1111 1 RW=0 RS=1  0
 00F4 0AEF              ldi R16,250
 00F6 D2DF              xcall _lcm_out
 00F8                   .dbline 62
 00F8           ;       lcm_out(s);
 00F8 042F              mov R16,R20
 00FA D0DF              xcall _lcm_out
 00FC                   .dbline 63
 00FC           ;       s=data&0x0f;
 00FC 462F              mov R20,R22
 00FE 4F70              andi R20,15
 0100                   .dbline 64
 0100           ;       s<<=4;
 0100 842F              mov R24,R20
 0102 8F70              andi R24,#0x0F
 0104 8295              swap R24
 0106 482F              mov R20,R24
 0108                   .dbline 65
 0108           ;       lcm_out(s);
 0108 082F              mov R16,R24
 010A C8DF              xcall _lcm_out
 010C                   .dbline -2
 010C           L18:
 010C                   .dbline 0 ; func end
 010C 6991              ld R22,y+
 010E 4991              ld R20,y+
 0110 0895              ret
 0112                   .dbsym r s 20 c
 0112                   .dbsym r data 22 c
 0112                   .dbend
 0112                   .dbfunc e lcdSetXY _lcdSetXY fV
 0112           ;       position -> R20
 0112           ;              y -> R10
 0112           ;              x -> R22
                        .even
 0112           _lcdSetXY::
 0112 0E940000          xcall push_xgsetF00C

⌨️ 快捷键说明

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