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

📄 lcddrive.lis

📁 AVR-MEGA8单片机中使用AD转换的一个例子
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00C6 407F              andi R20,240
 00C8                   .dbline 93
 00C8           ;       for(iSynCode=0;iSynCode<8;iSynCode++)
 00C8 6627              clr R22
 00CA 0DC0              rjmp L30
 00CC           L27:
 00CC                   .dbline 94
 00CC           ;       {
 00CC                   .dbline 95
 00CC           ;               bitcode = SynCode & 0x80;
 00CC 842F              mov R24,R20
 00CE 8078              andi R24,128
 00D0 A82E              mov R10,R24
 00D2                   .dbline 96
 00D2           ;               if(bitcode!=0) SETPORT(SID); else CLRPORT(SID);//SID = bitcode; 
 00D2 8823              tst R24
 00D4 11F0              breq L31
 00D6           X6:
 00D6                   .dbline 96
 00D6 969A              sbi 0x12,6
 00D8 01C0              rjmp L32
 00DA           L31:
 00DA                   .dbline 96
 00DA 9698              cbi 0x12,6
 00DC           L32:
 00DC                   .dbline 97
 00DC           ;               SynCode = SynCode << 1;
 00DC 440F              lsl R20
 00DE                   .dbline 98
 00DE           ;               CLRPORT(SCLK);                  //SCLK = 0;
 00DE 9798              cbi 0x12,7
 00E0                   .dbline 99
 00E0           ;               SETPORT(SCLK);                  //SCLK = 1;
 00E0 979A              sbi 0x12,7
 00E2                   .dbline 100
 00E2           ;               CLRPORT(SCLK);                  //SCLK = 0; 
 00E2 9798              cbi 0x12,7
 00E4                   .dbline 102
 00E4           ;               
 00E4           ;       }
 00E4           L28:
 00E4                   .dbline 93
 00E4 6395              inc R22
 00E6           L30:
 00E6                   .dbline 93
 00E6 6830              cpi R22,8
 00E8 88F3              brlo L27
 00EA           X7:
 00EA                   .dbline 103
 00EA           ;       SynCode = LCD_DAT & 0x0F;        //写入代码COM数据的低四位      0000XXXX
 00EA 40910200          lds R20,_LCD_DAT
 00EE 4F70              andi R20,15
 00F0                   .dbline 104
 00F0           ;       SynCode = SynCode<<4;    //要发送的数据格式是XXXX0000
 00F0 842F              mov R24,R20
 00F2 8F70              andi R24,#0x0F
 00F4 8295              swap R24
 00F6 482F              mov R20,R24
 00F8                   .dbline 105
 00F8           ;       for(iSynCode=0;iSynCode<8;iSynCode++)
 00F8 6627              clr R22
 00FA 0DC0              rjmp L36
 00FC           L33:
 00FC                   .dbline 106
 00FC           ;       {
 00FC                   .dbline 107
 00FC           ;               bitcode = SynCode & 0x80;
 00FC 842F              mov R24,R20
 00FE 8078              andi R24,128
 0100 A82E              mov R10,R24
 0102                   .dbline 108
 0102           ;               if(bitcode!=0) SETPORT(SID); else CLRPORT(SID);//SID = bitcode; 
 0102 8823              tst R24
 0104 11F0              breq L37
 0106           X8:
 0106                   .dbline 108
 0106 969A              sbi 0x12,6
 0108 01C0              rjmp L38
 010A           L37:
 010A                   .dbline 108
 010A 9698              cbi 0x12,6
 010C           L38:
 010C                   .dbline 109
 010C           ;               SynCode = SynCode << 1;
 010C 440F              lsl R20
 010E                   .dbline 110
 010E           ;               CLRPORT(SCLK);                  //SCLK = 0;
 010E 9798              cbi 0x12,7
 0110                   .dbline 111
 0110           ;               SETPORT(SCLK);                  //SCLK = 1;
 0110 979A              sbi 0x12,7
 0112                   .dbline 112
 0112           ;               CLRPORT(SCLK);                  //SCLK = 0; 
 0112 9798              cbi 0x12,7
 0114                   .dbline 113
 0114           ;       }
 0114           L34:
 0114                   .dbline 105
 0114 6395              inc R22
 0116           L36:
 0116                   .dbline 105
 0116 6830              cpi R22,8
 0118 88F3              brlo L33
 011A           X9:
 011A                   .dbline 114
 011A           ;       Delay_1ms();
 011A 72DF              rcall _Delay_1ms
 011C                   .dbline -2
 011C           L26:
 011C                   .dbline 0 ; func end
 011C 00C0              rjmp pop_xgsetF00C
 011E                   .dbsym r bitcode 10 c
 011E                   .dbsym r iSynCode 22 c
 011E                   .dbsym r SynCode 20 c
 011E                   .dbend
 011E                   .dbfunc e LCD_Ini _LCD_Ini fV
                        .even
 011E           _LCD_Ini::
 011E                   .dbline -1
 011E                   .dbline 124
 011E           ; }
 011E           ; 
 011E           ; //*************************************LCD屏幕初始化**************************************
 011E           ; //LCD接口:
 011E           ; //CS    <==>PD5;
 011E           ; //SID   <==>PD6;
 011E           ; //SCLK  <==>PD7;
 011E           ; //LCD_AK<==>PD3;              //背光控制,=0时打开背光
 011E           ; void LCD_Ini(void)                            //初始化,并进入文本模式                         
 011E           ; {
 011E                   .dbline 126
 011E           ;       //LCD端口初始化,将PD7~PD5端口设置为输出方式
 011E           ;       DDRD|=0xE0;
 011E 81B3              in R24,0x11
 0120 806E              ori R24,224
 0122 81BB              out 0x11,R24
 0124                   .dbline 127
 0124           ;       _NOP();
 0124 0000              nop
 0126                   .dbline 129
 0126           ; 
 0126           ;       LCD_COM =0x30;//功能设置为8BIT控制界面,基本指令集
 0126 80E3              ldi R24,48
 0128 80930300          sts _LCD_COM,R24
 012C                   .dbline 130
 012C           ;       Write_LCD_Com();//调用写指令子程序
 012C A1DF              rcall _Write_LCD_Com
 012E                   .dbline 131
 012E           ;       Delay(5);//39uS
 012E 05E0              ldi R16,5
 0130 10E0              ldi R17,0
 0132 72DF              rcall _Delay
 0134                   .dbline 133
 0134           ;  
 0134           ;       LCD_COM =0x0C;//显示打开,光标关,反白不显示
 0134 8CE0              ldi R24,12
 0136 80930300          sts _LCD_COM,R24
 013A                   .dbline 134
 013A           ;       Write_LCD_Com();//调用写指令子程序
 013A 9ADF              rcall _Write_LCD_Com
 013C                   .dbline 135
 013C           ;       Delay(5);//39uS
 013C 05E0              ldi R16,5
 013E 10E0              ldi R17,0
 0140 6BDF              rcall _Delay
 0142                   .dbline 137
 0142           ; 
 0142           ;       LCD_COM =0x01;//清除屏幕显示,将DDRAM的地址计数器归零
 0142 81E0              ldi R24,1
 0144 80930300          sts _LCD_COM,R24
 0148                   .dbline 138
 0148           ;       Write_LCD_Com();//调用写指令子程序
 0148 93DF              rcall _Write_LCD_Com
 014A                   .dbline 139
 014A           ;       Delay(5);//39uS
 014A 05E0              ldi R16,5
 014C 10E0              ldi R17,0
 014E 64DF              rcall _Delay
 0150                   .dbline 141
 0150           ; 
 0150           ;       LCD_COM =0x06;//DDRAM的地址计数器(AC)加1
 0150 86E0              ldi R24,6
 0152 80930300          sts _LCD_COM,R24
 0156                   .dbline 142
 0156           ;       Write_LCD_Com();//调用写指令子程序
 0156 8CDF              rcall _Write_LCD_Com
 0158                   .dbline 143
 0158           ;       Delay(5);//39uS
 0158 05E0              ldi R16,5
 015A 10E0              ldi R17,0
 015C 5DDF              rcall _Delay
 015E                   .dbline 145
 015E           ; 
 015E           ;       AC_X=1;AC_Y=1;
 015E 81E0              ldi R24,1
 0160 80930100          sts _AC_X,R24
 0164                   .dbline 145
 0164 80930000          sts _AC_Y,R24
 0168                   .dbline -2
 0168           L39:
 0168                   .dbline 0 ; func end
 0168 0895              ret
 016A                   .dbend
 016A                   .dbfunc e LCD_Contrl_Cursor _LCD_Contrl_Cursor fV
 016A           ;             ON -> R10
                        .even
 016A           _LCD_Contrl_Cursor::
 016A AA92              st -y,R10
 016C A02E              mov R10,R16
 016E                   .dbline -1
 016E                   .dbline 149
 016E           ; }
 016E           ; 
 016E           ; void LCD_Contrl_Cursor(uchar ON)              //打开游标显示
 016E           ; { 
 016E                   .dbline 150
 016E           ;       if (ON) LCD_COM =0x0F;else LCD_COM=0x0C;        //ON:显示打开,光标开,反白显示
 016E AA20              tst R10
 0170 21F0              breq L41
 0172           X10:
 0172                   .dbline 150
 0172 8FE0              ldi R24,15
 0174 80930300          sts _LCD_COM,R24
 0178 03C0              rjmp L42
 017A           L41:
 017A                   .dbline 150
 017A 8CE0              ldi R24,12
 017C 80930300          sts _LCD_COM,R24
 0180           L42:
 0180                   .dbline 151
 0180           ;       Write_LCD_Com();//调用写指令子程序
 0180 77DF              rcall _Write_LCD_Com
 0182                   .dbline 152
 0182           ;       Delay(5);//39uS
 0182 05E0              ldi R16,5
 0184 10E0              ldi R17,0
 0186 48DF              rcall _Delay
 0188                   .dbline -2
 0188           L40:
 0188                   .dbline 0 ; func end
 0188 A990              ld R10,y+
 018A 0895              ret
 018C                   .dbsym r ON 10 c
 018C                   .dbend
 018C                   .dbfunc e DispSetCursor _DispSetCursor fV
 018C           ;              y -> R12
 018C           ;              x -> R10
                        .even
 018C           _DispSetCursor::
 018C AA92              st -y,R10
 018E CA92              st -y,R12
 0190 C22E              mov R12,R18
 0192 A02E              mov R10,R16
 0194                   .dbline -1
 0194                   .dbline 158
 0194           ; }
 0194           ; 
 0194           ; void DispSetCursor(uchar x,uchar y)   //设置光标到指定位置
 0194           ; //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7  
 0194           ; //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3 
 0194           ; {
 0194                   .dbline 159
 0194           ;    LCD_COM=CharMap[y][x];             //查表得到DDRAM地址AC
 0194 80E0              ldi R24,<_CharMap
 0196 90E0              ldi R25,>_CharMap
 0198 2C2C              mov R2,R12
 019A 3324              clr R3
 019C 220C              lsl R2
 019E 331C              rol R3
 01A0 220C              lsl R2
 01A2 331C              rol R3
 01A4 220C              lsl R2
 01A6 331C              rol R3
 01A8 280E              add R2,R24
 01AA 391E              adc R3,R25
 01AC EA2D              mov R30,R10
 01AE FF27              clr R31
 01B0 E20D              add R30,R2
 01B2 F31D              adc R31,R3
 01B4 2490              lpm R2,Z
 01B6 20920300          sts _LCD_COM,R2
 01BA                   .dbline 160
 01BA           ;    Write_LCD_Com();
 01BA 5ADF              rcall _Write_LCD_Com
 01BC                   .dbline -2
 01BC           L43:
 01BC                   .dbline 0 ; func end
 01BC C990              ld R12,y+
 01BE A990              ld R10,y+
 01C0 0895              ret
 01C2                   .dbsym r y 12 c
 01C2                   .dbsym r x 10 c
 01C2                   .dbend
 01C2                   .dbfunc e DispHalfWord _DispHalfWord fV
 01C2           ;             HH -> <dead>
 01C2           ;           LASC -> y+4
 01C2           ;           HASC -> y+2
 01C2           ;              y -> R12
 01C2           ;              x -> R10
                        .even
 01C2           _DispHalfWord::
 01C2 AA92              st -y,R10
 01C4 CA92              st -y,R12
 01C6 C22E              mov R12,R18
 01C8 A02E              mov R10,R16
 01CA                   .dbline -1
 01CA                   .dbline 164
 01CA           ; }
 01CA           ; 
 01CA           ; void DispHalfWord(uchar x,uchar y,uchar HASC,uchar LASC)      //在指定位置处显示半角ASCII字符 
 01CA           ; {     
 01CA                   .dbline 166
 01CA           ;       unsigned int HH;
 01CA           ;       LCD_COM=CharMap[y][x];          //查表得到DDRAM地址AC
 01CA 80E0              ldi R24,<_CharMap
 01CC 90E0              ldi R25,>_CharMap
 01CE 2C2C              mov R2,R12
 01D0 3324              clr R3
 01D2 220C              lsl R2
 01D4 331C              rol R3
 01D6 220C              lsl R2
 01D8 331C              rol R3
 01DA 220C              lsl R2
 01DC 331C              rol R3
 01DE 280E              add R2,R24
 01E0 391E              adc R3,R25
 01E2 EA2D              mov R30,R10
 01E4 FF27              clr R31
 01E6 E20D              add R30,R2
 01E8 F31D              adc R31,R3
 01EA 2490              lpm R2,Z
 01EC 20920300          sts _LCD_COM,R2
 01F0                   .dbline 167
 01F0           ;       Write_LCD_Com();
 01F0 3FDF              rcall _Write_LCD_Com
 01F2                   .dbline 169
 01F2           ;       
 01F2           ;       LCD_DAT=HASC;
 01F2 0A80              ldd R0,y+2
 01F4 00920200          sts _LCD_DAT,R0
 01F8                   .dbline 170
 01F8           ;       Write_LCD_Data();       //显示ASCII字符
 01F8 59DF              rcall _Write_LCD_Data
 01FA                   .dbline 171
 01FA           ;       LCD_DAT=LASC;
 01FA 0C80              ldd R0,y+4
 01FC 00920200          sts _LCD_DAT,R0
 0200                   .dbline 172
 0200           ;       Write_LCD_Data();       //显示ASCII字符
 0200 55DF              rcall _Write_LCD_Data
 0202                   .dbline -2
 0202           L44:
 0202                   .dbline 0 ; func end
 0202 C990              ld R12,y+
 0204 A990              ld R10,y+

⌨️ 快捷键说明

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