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

📄 test.lst

📁 ATMEGA16驱动LCD1602的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00F4 B22B      IN	R2,0x1B
    00F5 2A28      OR	R2,R24
    00F6 BA2B      OUT	0x1B,R2
(0092)     LCD16xx_en_write();
    00F7 DFDD      RCALL	_LCD16xx_en_write
(0093) 
(0094)     LCD_DATA_PORT &= 0x0F;
    00F8 B38B      IN	R24,0x1B
    00F9 708F      ANDI	R24,0xF
    00FA BB8B      OUT	0x1B,R24
(0095)     LCD_DATA_PORT |= datal&0xf0;            //send low 4bit
    00FB 2F84      MOV	R24,R20
    00FC 7F80      ANDI	R24,0xF0
    00FD B22B      IN	R2,0x1B
    00FE 2A28      OR	R2,R24
    00FF BA2B      OUT	0x1B,R2
(0096)     LCD16xx_en_write();
    0100 DFD4      RCALL	_LCD16xx_en_write
    0101 940E0174  CALL	pop_gset3
    0103 9508      RET
(0097) }
(0098) 
(0099) void LCD16xx_wait_Ready(void)              //等待LCD空闲
(0100) {
(0101)     LCD_DATA_DDR &= ~0x80;                 //PD7 I/O口方向设置为输入
_LCD16xx_wait_Ready:
    0104 98D7      CBI	0x1A,7
(0102)     RW_H;                                  //RW=1
    0105 9AD9      SBI	0x1B,1
(0103)     RS_L;                                  //RS=0
    0106 98D8      CBI	0x1B,0
(0104)     E_H;                                   //EN=1
    0107 9ADA      SBI	0x1B,2
(0105)     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PD7,为0表示空闲;
    0108 99CF      SBIC	0x19,7
    0109 C003      RJMP	0x010D
    010A E001      LDI	R16,1
    010B E010      LDI	R17,0
    010C C002      RJMP	0x010F
    010D 2700      CLR	R16
    010E 2711      CLR	R17
    010F 3000      CPI	R16,0
    0110 0701      CPC	R16,R17
    0111 F3B1      BEQ	0x0108
(0106)     E_L;                                   //EN=0
    0112 98DA      CBI	0x1B,2
(0107)     LCD_DATA_DDR |= LCD_DATA;
    0113 B38A      IN	R24,0x1A
    0114 6F80      ORI	R24,0xF0
    0115 BB8A      OUT	0x1A,R24
    0116 9508      RET
_LCD16xx_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
    0117 940E017B  CALL	push_gset3
    0119 2EA2      MOV	R10,R18
    011A 2F60      MOV	R22,R16
(0108) }
(0109) 
(0110) /*-----------------------------------------------------------------------
(0111) LCD_set_xy        : 设置LCD显示的起始位置
(0112) 
(0113) 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
(0114)                     LCD第一行显示寄存器地址:0x80-0x8F
(0115)                     LCD第一行显示寄存器地址:0xC0-0xCF
(0116) 编写日期          :2006年08月30日
(0117) 最后修改日期      :2006年08月30日
(0118) -----------------------------------------------------------------------*/
(0119) void LCD16xx_set_xy( unsigned char x, unsigned char y )
(0120) {
(0121)     unsigned char address;
(0122)     if (y == 0)
    011B 20AA      TST	R10
    011C F419      BNE	0x0120
(0123)        address = 0x80 + x;
    011D 2F46      MOV	R20,R22
    011E 5840      SUBI	R20,0x80
    011F C00E      RJMP	0x012E
(0124)     else if(y == 1)
    0120 2D8A      MOV	R24,R10
    0121 3081      CPI	R24,1
    0122 F419      BNE	0x0126
(0125)        address = 0xc0 + x;
    0123 2F46      MOV	R20,R22
    0124 5440      SUBI	R20,0x40
    0125 C008      RJMP	0x012E
(0126)     else if(y == 2)
    0126 2D8A      MOV	R24,R10
    0127 3082      CPI	R24,2
    0128 F419      BNE	0x012C
(0127)        address = 0x90 + x;
    0129 2F46      MOV	R20,R22
    012A 5740      SUBI	R20,0x70
    012B C002      RJMP	0x012E
(0128)     else
(0129)        address = 0xd0 + x;
    012C 2F46      MOV	R20,R22
    012D 5340      SUBI	R20,0x30
(0130)     LCD16xx_write_char( 1,address );
    012E 2F24      MOV	R18,R20
    012F E001      LDI	R16,1
    0130 DFAF      RCALL	_LCD16xx_write_char
    0131 940E0174  CALL	pop_gset3
    0133 9508      RET
_LCD16xx_write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    0134 940E017B  CALL	push_gset3
    0136 2EA2      MOV	R10,R18
    0137 2F60      MOV	R22,R16
    0138 814E      LDD	R20,Y+6
    0139 815F      LDD	R21,Y+7
(0131) }
(0132) /*-----------------------------------------------------------------------
(0133) LCD16xx_write_string  : 英文字符串显示函数
(0134) 
(0135) 输入参数:*s      :英文字符串指针;
(0136)           X、Y    : 显示字符串的位置
(0137) 编写日期          :2006年08月30日
(0138) 最后修改日期      :2006年08月30日 		
(0139) -----------------------------------------------------------------------*/
(0140) void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0141) {
(0142)     LCD16xx_set_xy( X, Y );
    013A 2D2A      MOV	R18,R10
    013B 2F06      MOV	R16,R22
    013C DFDA      RCALL	_LCD16xx_set_xy
    013D C00A      RJMP	0x0148
(0143)     while (*s) 
(0144)     {
(0145)         delay_nus(5);
    013E E005      LDI	R16,5
    013F E010      LDI	R17,0
    0140 940E0152  CALL	_delay_nus
(0146)         LCD16xx_write_char( 0, *s );
    0142 01FA      MOVW	R30,R20
    0143 8120      LDD	R18,Z+0
    0144 2700      CLR	R16
    0145 DF9A      RCALL	_LCD16xx_write_char
(0147)         s++;
    0146 5F4F      SUBI	R20,0xFF
    0147 4F5F      SBCI	R21,0xFF
    0148 01FA      MOVW	R30,R20
    0149 8020      LDD	R2,Z+0
    014A 2022      TST	R2
    014B F791      BNE	0x013E
    014C 940E0174  CALL	pop_gset3
    014E 9508      RET
FILE: E:\2007年电子竞赛\LCD1602\delay.c
(0001) /*--------------------------------------------------*/
(0002) /*             AVR-ARM开发网论坛                    */
(0003) /*           http://www.avrarm.com                  */
(0004) /*            AVR生成代码测试程序                   */
(0005) /*--------------------------------------------------*/
(0006) /*     程序由AVR辅助开发工具V2.1.1自动生成          */
(0007) /*     AVR系统的处理器为:   ATMega128               */
(0008) /*     AVR系统的晶振频率:   1.0000 Mhz             */
(0009) /*--------------------------------------------------*/
(0010) 
(0011) #include <iom128v.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
    014F E002      LDI	R16,2
(0020)    t--;
    0150 950A      DEC	R16
    0151 9508      RET
_delay_nus:
  t                    --> R20
    0152 940E017F  CALL	push_gset1
    0154 01A8      MOVW	R20,R16
(0021) }
(0022) 
(0023) /*-----------------------------------------------------------------------
(0024) delay_nus          :长延时函数
(0025) 
(0026) 输入参数: t        :延时时间 us
(0027) -----------------------------------------------------------------------*/
(0028) void delay_nus(unsigned int t)
(0029) {
    0155 C001      RJMP	0x0157
(0030)     while (t--)
(0031)        delay_us();
    0156 DFF8      RCALL	_delay_us
    0157 011A      MOVW	R2,R20
    0158 5041      SUBI	R20,1
    0159 4050      SBCI	R21,0
    015A 2022      TST	R2
    015B F7D1      BNE	0x0156
    015C 2033      TST	R3
    015D F7C1      BNE	0x0156
    015E 940E0182  CALL	pop_gset1
    0160 9508      RET
(0032) }
(0033) 
(0034) /*-----------------------------------------------------------------------
(0035) delay_ms	   :1ms延时函数
(0036) -----------------------------------------------------------------------*/
(0037) void delay_ms(void)
(0038) {
(0039)    delay_nus(1000);
_delay_ms:
    0161 EE08      LDI	R16,0xE8
    0162 E013      LDI	R17,3
    0163 DFEE      RCALL	_delay_nus
    0164 9508      RET
_delay_nms:
  t                    --> R20
    0165 940E017F  CALL	push_gset1
    0167 01A8      MOVW	R20,R16
(0040) }
(0041) 
(0042) /*-----------------------------------------------------------------------
(0043) delay_nms          :长延时函数
(0044) 
(0045) 输入参数: t        :延时时间 ms
(0046) -----------------------------------------------------------------------*/
(0047) void delay_nms(unsigned int t)
(0048) {
    0168 C001      RJMP	0x016A
(0049)     while (t--)
(0050)        delay_ms();
FILE: <library>
    0169 DFF7      RCALL	_delay_ms
    016A 011A      MOVW	R2,R20
    016B 5041      SUBI	R20,1
    016C 4050      SBCI	R21,0
    016D 2022      TST	R2
    016E F7D1      BNE	0x0169
    016F 2033      TST	R3
    0170 F7C1      BNE	0x0169
    0171 940E0182  CALL	pop_gset1
    0173 9508      RET
pop_gset3:
    0174 E0E4      LDI	R30,4
    0175 940C0183  JMP	pop
push_gset5:
    0177 92FA      ST	R15,-Y
    0178 92EA      ST	R14,-Y
push_gset4:
    0179 92DA      ST	R13,-Y
    017A 92CA      ST	R12,-Y
push_gset3:
    017B 92BA      ST	R11,-Y
    017C 92AA      ST	R10,-Y
push_gset2:
    017D 937A      ST	R23,-Y
    017E 936A      ST	R22,-Y
push_gset1:
    017F 935A      ST	R21,-Y
    0180 934A      ST	R20,-Y
    0181 9508      RET
pop_gset1:
    0182 E0E1      LDI	R30,1
pop:
    0183 9149      LD	R20,Y+
    0184 9159      LD	R21,Y+
    0185 FDE0      SBRC	R30,0
    0186 9508      RET
    0187 9169      LD	R22,Y+
    0188 9179      LD	R23,Y+
    0189 FDE1      SBRC	R30,1
    018A 9508      RET
    018B 90A9      LD	R10,Y+
    018C 90B9      LD	R11,Y+
    018D FDE2      SBRC	R30,2
    018E 9508      RET
    018F 90C9      LD	R12,Y+
    0190 90D9      LD	R13,Y+
    0191 FDE3      SBRC	R30,3
    0192 9508      RET
    0193 90E9      LD	R14,Y+
    0194 90F9      LD	R15,Y+
    0195 9508      RET

⌨️ 快捷键说明

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