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

📄 test.lst

📁 mage16,LCM1604驱动8线,调试成功
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0076)     unsigned char data_temp;        
(0077) 
(0078)     data_temp = data;
    010B 2D4A      MOV	R20,R10
(0079)   
(0080)     //LCD16xx_wait_Ready();
(0081)    
(0082)                
(0083)     if (command == 0)                       //data
    010C 2366      TST	R22
    010D F411      BNE	0x0110
(0084)        LCD_RS_PORT |= LCD_RS;               //RS=1
    010E 9A96      SBI	0x12,6
    010F C001      RJMP	0x0111
(0085)     else                                    //command
(0086)        LCD_RS_PORT &= ~LCD_RS;              //RS=0
    0110 9896      CBI	0x12,6
(0087)        
(0088)     LCD_DATA_PORT &= 0x00;
    0111 2422      CLR	R2
    0112 BA25      OUT	0x15,R2
(0089)     LCD_DATA_PORT |= data_temp&0xff;            //send high 4bit
    0113 2F84      MOV	R24,R20
    0114 7F8F      ANDI	R24,0xFF
    0115 B225      IN	R2,0x15
    0116 2A28      OR	R2,R24
    0117 BA25      OUT	0x15,R2
(0090)     LCD16xx_en_write();
    0118 DFE3      RCALL	_LCD16xx_en_write
(0091) 	
(0092)     LCD_DATA_PORT &= 0x00;
    0119 2422      CLR	R2
    011A BA25      OUT	0x15,R2
(0093)     LCD_DATA_PORT |= data_temp&0xff;            //send low 4bit
    011B 2F84      MOV	R24,R20
    011C 7F8F      ANDI	R24,0xFF
    011D B225      IN	R2,0x15
    011E 2A28      OR	R2,R24
    011F BA25      OUT	0x15,R2
(0094)     LCD16xx_en_write();
    0120 DFDB      RCALL	_LCD16xx_en_write
    0121 940E0192  CALL	pop_gset3
    0123 9508      RET
(0095) 
(0096) }
(0097) 
(0098) void LCD16xx_wait_Ready(void)              //等待LCD空闲
(0099) {
(0100)     LCD_DATA_DDR &= ~0x80;                 //PD7 I/O口方向设置为输入
_LCD16xx_wait_Ready:
    0124 98A7      CBI	0x14,7
(0101)     LCD_RS_PORT &= ~LCD_RS;                //RS=0
    0125 9896      CBI	0x12,6
(0102)     LCD_EN_PORT |= LCD_EN;                 //EN=1
    0126 9A97      SBI	0x12,7
(0103)     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PD7,为0表示空闲;
    0127 999F      SBIC	0x13,7
    0128 C003      RJMP	0x012C
    0129 E001      LDI	R16,1
    012A E010      LDI	R17,0
    012B C002      RJMP	0x012E
    012C 2700      CLR	R16
    012D 2711      CLR	R17
    012E 3000      CPI	R16,0
    012F 0701      CPC	R16,R17
    0130 F3B1      BEQ	0x0127
(0104)     LCD_EN_PORT &= ~LCD_EN;                //EN=0
    0131 9897      CBI	0x12,7
(0105)     LCD_DATA_DDR |= LCD_DATA;
    0132 B384      IN	R24,0x14
    0133 6F8F      ORI	R24,0xFF
    0134 BB84      OUT	0x14,R24
    0135 9508      RET
_LCD16xx_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
    0136 940E0199  CALL	push_gset3
    0138 2EA2      MOV	R10,R18
    0139 2F60      MOV	R22,R16
(0106) }
(0107) 
(0108) /*-----------------------------------------------------------------------
(0109) LCD_set_xy        : 设置LCD显示的起始位置
(0110) 
(0111) 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
(0112)                     LCD第一行显示寄存器地址:0x80-0x8F
(0113)                     LCD第一行显示寄存器地址:0xC0-0xCF
(0114) 编写日期          :2006年08月30日
(0115) 最后修改日期      :2006年08月30日
(0116) -----------------------------------------------------------------------*/
(0117) void LCD16xx_set_xy( unsigned char x, unsigned char y )
(0118) {
(0119)     unsigned char address;
(0120)     if (y == 0)
    013A 20AA      TST	R10
    013B F419      BNE	0x013F
(0121)        address = 0x80 + x;
    013C 2F46      MOV	R20,R22
    013D 5840      SUBI	R20,0x80
    013E C011      RJMP	0x0150
(0122)     else if(y == 1)
    013F 2D8A      MOV	R24,R10
    0140 3081      CPI	R24,1
    0141 F419      BNE	0x0145
(0123)        address = 0xc0 + x;
    0142 2F46      MOV	R20,R22
    0143 5440      SUBI	R20,0x40
    0144 C00B      RJMP	0x0150
(0124)     else if(y == 2)
    0145 2D8A      MOV	R24,R10
    0146 3082      CPI	R24,2
    0147 F419      BNE	0x014B
(0125)        address = 0x90 + x;
    0148 2F46      MOV	R20,R22
    0149 5740      SUBI	R20,0x70
    014A C005      RJMP	0x0150
(0126)     else if(y == 3)
    014B 2D8A      MOV	R24,R10
    014C 3083      CPI	R24,3
    014D F411      BNE	0x0150
(0127)        address = 0xd0 + x;
    014E 2F46      MOV	R20,R22
    014F 5340      SUBI	R20,0x30
(0128)     LCD16xx_write_char( 1,address );
    0150 2F24      MOV	R18,R20
    0151 E001      LDI	R16,1
    0152 DFB4      RCALL	_LCD16xx_write_char
    0153 940E0192  CALL	pop_gset3
    0155 9508      RET
_LCD16xx_write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    0156 940E0199  CALL	push_gset3
    0158 2EA2      MOV	R10,R18
    0159 2F60      MOV	R22,R16
    015A 814E      LDD	R20,Y+6
    015B 815F      LDD	R21,Y+7
(0129) }
(0130) /*-----------------------------------------------------------------------
(0131) LCD16xx_write_string  : 英文字符串显示函数
(0132) 
(0133) 输入参数:*s      :英文字符串指针;
(0134)           X、Y    : 显示字符串的位置
(0135) 编写日期          :2006年08月30日
(0136) 最后修改日期      :2006年08月30日 		
(0137) -----------------------------------------------------------------------*/
(0138) void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0139) {
(0140)     LCD16xx_set_xy( X, Y );
    015C 2D2A      MOV	R18,R10
    015D 2F06      MOV	R16,R22
    015E DFD7      RCALL	_LCD16xx_set_xy
    015F C006      RJMP	0x0166
(0141)     while (*s) 
(0142)     {
(0143)         LCD16xx_write_char( 0, *s );
    0160 01FA      MOVW	R30,R20
    0161 8120      LDD	R18,Z+0
    0162 2700      CLR	R16
    0163 DFA3      RCALL	_LCD16xx_write_char
(0144)         s++;
    0164 5F4F      SUBI	R20,0xFF
    0165 4F5F      SBCI	R21,0xFF
    0166 01FA      MOVW	R30,R20
    0167 8020      LDD	R2,Z+0
    0168 2022      TST	R2
    0169 F7B1      BNE	0x0160
    016A 940E0192  CALL	pop_gset3
    016C 9508      RET
FILE: G:\avr16\avr16-1020-2\delay.c
(0001) /*--------------------------------------------------*/
(0002) /*             AVR-ARM开发网论坛                    */
(0003) /*           http://www.avrarm.com                  */
(0004) /*            AVR生成代码测试程序                   */
(0005) /*--------------------------------------------------*/
(0006) /*     程序由AVR辅助开发工具V2.0.1自动生成          */
(0007) /*     AVR系统的处理器为:   ATMega16               */
(0008) /*     AVR系统的晶振频率:   8.0000 Mhz             */
(0009) /*--------------------------------------------------*/
(0010) 
(0011) #include <iom16v.h>
(0012) #include "delay.h"
(0013) 
(0014) /*-----------------------------------------------------------------------
(0015) delay_us	   :1us延时函数
(0016) -----------------------------------------------------------------------*/
(0017) void delay_us(void)
(0018) {
(0019)    unsigned char t=2;
_delay_us:
  t                    --> R16
    016D E002      LDI	R16,2
(0020)    t--;
    016E 950A      DEC	R16
    016F 9508      RET
_delay_nus:
  t                    --> R20
    0170 940E019D  CALL	push_gset1
    0172 01A8      MOVW	R20,R16
(0021) }
(0022) 
(0023) /*-----------------------------------------------------------------------
(0024) delay_nus          :长延时函数
(0025) 
(0026) 输入参数: t        :延时时间 us
(0027) -----------------------------------------------------------------------*/
(0028) void delay_nus(unsigned int t)
(0029) {
    0173 C001      RJMP	0x0175
(0030)     while (t--)
(0031)        delay_us();
    0174 DFF8      RCALL	_delay_us
    0175 011A      MOVW	R2,R20
    0176 5041      SUBI	R20,1
    0177 4050      SBCI	R21,0
    0178 2022      TST	R2
    0179 F7D1      BNE	0x0174
    017A 2033      TST	R3
    017B F7C1      BNE	0x0174
    017C 940E01A0  CALL	pop_gset1
    017E 9508      RET
(0032) }
(0033) 
(0034) /*-----------------------------------------------------------------------
(0035) delay_ms	   :1ms延时函数
(0036) -----------------------------------------------------------------------*/
(0037) void delay_ms(void)
(0038) {
(0039)    delay_nus(1000);
_delay_ms:
    017F EE08      LDI	R16,0xE8
    0180 E013      LDI	R17,3
    0181 DFEE      RCALL	_delay_nus
    0182 9508      RET
_delay_nms:
  t                    --> R20
    0183 940E019D  CALL	push_gset1
    0185 01A8      MOVW	R20,R16
(0040) }
(0041) 
(0042) /*-----------------------------------------------------------------------
(0043) delay_nms          :长延时函数
(0044) 
(0045) 输入参数: t        :延时时间 ms
(0046) -----------------------------------------------------------------------*/
(0047) void delay_nms(unsigned int t)
(0048) {
    0186 C001      RJMP	0x0188
(0049)     while (t--)
(0050)        delay_ms();
FILE: <library>
    0187 DFF7      RCALL	_delay_ms
    0188 011A      MOVW	R2,R20
    0189 5041      SUBI	R20,1
    018A 4050      SBCI	R21,0
    018B 2022      TST	R2
    018C F7D1      BNE	0x0187
    018D 2033      TST	R3
    018E F7C1      BNE	0x0187
    018F 940E01A0  CALL	pop_gset1
    0191 9508      RET
pop_gset3:
    0192 E0E4      LDI	R30,4
    0193 940C01A1  JMP	pop
push_gset5:
    0195 92FA      ST	R15,-Y
    0196 92EA      ST	R14,-Y
push_gset4:
    0197 92DA      ST	R13,-Y
    0198 92CA      ST	R12,-Y
push_gset3:
    0199 92BA      ST	R11,-Y
    019A 92AA      ST	R10,-Y
push_gset2:
    019B 937A      ST	R23,-Y
    019C 936A      ST	R22,-Y
push_gset1:
    019D 935A      ST	R21,-Y
    019E 934A      ST	R20,-Y
    019F 9508      RET
pop_gset1:
    01A0 E0E1      LDI	R30,1
pop:
    01A1 9149      LD	R20,Y+
    01A2 9159      LD	R21,Y+
    01A3 FDE0      SBRC	R30,0
    01A4 9508      RET
    01A5 9169      LD	R22,Y+
    01A6 9179      LD	R23,Y+
    01A7 FDE1      SBRC	R30,1
    01A8 9508      RET
    01A9 90A9      LD	R10,Y+
    01AA 90B9      LD	R11,Y+
    01AB FDE2      SBRC	R30,2
    01AC 9508      RET
    01AD 90C9      LD	R12,Y+
    01AE 90D9      LD	R13,Y+
    01AF FDE3      SBRC	R30,3
    01B0 9508      RET
    01B1 90E9      LD	R14,Y+
    01B2 90F9      LD	R15,Y+
    01B3 9508      RET

⌨️ 快捷键说明

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