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

📄 1602b_lcd_prj.lst

📁 本实验以常见的1602B字符型LCD模块为例
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0103)   }
(0104) 
(0105) /*-----------------------------------------------------------------------
(0106) LCD_set_xy        : 设置LCD显示的起始位置
(0107) 
(0108) 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
(0109)                     LCD第一行显示寄存器地址:0X80-0X8F
(0110)                     LCD第一行显示寄存器地址:0XC0-0XCF
(0111) 
(0112) 编写日期          :2004-8-19 
(0113) 最后修改日期      :2004-8-19 		
(0114) -----------------------------------------------------------------------*/
(0115) void LCD_set_xy( unsigned char x, unsigned char y )
(0116)   {
(0117)     unsigned char address;
(0118)     if (y == 0) address = 0x80 + x;
    00D7 2344      TST	R20
    00D8 F419      BNE	0x00DC
    00D9 2F46      MOV	R20,R22
    00DA 5840      SUBI	R20,0x80
    00DB C002      RJMP	0x00DE
(0119)     else 
(0120)        address = 0xc0 + x;
    00DC 2F46      MOV	R20,R22
    00DD 5440      SUBI	R20,0x40
(0121)     LCD_write_char( address, 0 );
    00DE 2722      CLR	R18
    00DF 2733      CLR	R19
    00E0 2F04      MOV	R16,R20
    00E1 2711      CLR	R17
    00E2 DF8A      RCALL	_LCD_write_char
    00E3 D078      RCALL	pop_gset2
    00E4 9508      RET
_LCD_write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    00E5 D080      RCALL	push_gset3
    00E6 2EA2      MOV	R10,R18
    00E7 2F60      MOV	R22,R16
    00E8 814E      LDD	R20,Y+6
    00E9 815F      LDD	R21,Y+7
(0122)   }
(0123) /*-----------------------------------------------------------------------
(0124) LCD_write_string  : 英文字符串显示函数
(0125) 
(0126) 输入参数:*s      :英文字符串指针;
(0127)           X、Y    : 显示字符串的位置
(0128) 
(0129) 编写日期          :2004-8-19 
(0130) 最后修改日期      :2004-8-19 		
(0131) -----------------------------------------------------------------------*/
(0132) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0133)   {
(0134)     LCD_set_xy( X, Y );
    00EA 2D2A      MOV	R18,R10
    00EB 2F06      MOV	R16,R22
    00EC DFE7      RCALL	_LCD_set_xy
    00ED C008      RJMP	0x00F6
(0135)     
(0136)     while (*s) 
(0137)       {
(0138)         LCD_write_char( 0, *s );
    00EE 01FA      MOVW	R30,R20
    00EF 8120      LDD	R18,Z+0
    00F0 2733      CLR	R19
    00F1 2700      CLR	R16
    00F2 2711      CLR	R17
    00F3 DF79      RCALL	_LCD_write_char
(0139) 	s ++;
    00F4 5F4F      SUBI	R20,0xFF
    00F5 4F5F      SBCI	R21,0xFF
    00F6 01FA      MOVW	R30,R20
    00F7 8020      LDD	R2,Z+0
    00F8 2022      TST	R2
    00F9 F7A1      BNE	0x00EE
    00FA D063      RCALL	pop_gset3
    00FB 9508      RET
_main:
    00FC 9722      SBIW	R28,2
FILE: D:\test6\1602B_LCD_TEST.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include "1602LCD.h"
(0004) 
(0005) void main(void)
(0006)   {
(0007)      OSCCAL=0XA5;
    00FD EA85      LDI	R24,0xA5
    00FE BF81      OUT	0x31,R24
(0008)      
(0009)      DDRD |= LCD_DATA | LCD_RW;
    00FF B381      IN	R24,0x11
    0100 6F88      ORI	R24,0xF8
    0101 BB81      OUT	0x11,R24
(0010)      DDRC |= LCD_RS   | LCD_EN;
    0102 B384      IN	R24,0x14
    0103 6380      ORI	R24,0x30
    0104 BB84      OUT	0x14,R24
(0011)      
(0012)      LCD_init();
    0105 DF49      RCALL	_LCD_init
    0106 C02C      RJMP	0x0133
(0013)      
(0014)      while(1)
(0015)        {
(0016)          LCD_write_char(0x01,0);      //显示清屏
    0107 2722      CLR	R18
    0108 2733      CLR	R19
    0109 E001      LDI	R16,1
    010A E010      LDI	R17,0
    010B DF61      RCALL	_LCD_write_char
(0017)          LCD_write_string(3,0,"Welcome");
    010C E88F      LDI	R24,0x8F
    010D E090      LDI	R25,0
    010E 8399      STD	Y+1,R25
    010F 8388      STD	Y+0,R24
    0110 2722      CLR	R18
    0111 E003      LDI	R16,3
    0112 DFD2      RCALL	_LCD_write_string
(0018)          LCD_write_string(1,1,"www.527dz.com!");
    0113 E880      LDI	R24,0x80
    0114 E090      LDI	R25,0
    0115 8399      STD	Y+1,R25
    0116 8388      STD	Y+0,R24
    0117 E021      LDI	R18,1
    0118 E001      LDI	R16,1
    0119 DFCB      RCALL	_LCD_write_string
(0019)          delay_nms(5000);
    011A E808      LDI	R16,0x88
    011B E113      LDI	R17,0x13
    011C D032      RCALL	_delay_nms
(0020)          LCD_write_char(0x01,0);      //显示清屏
    011D 2722      CLR	R18
    011E 2733      CLR	R19
    011F E001      LDI	R16,1
    0120 E010      LDI	R17,0
    0121 DF4B      RCALL	_LCD_write_char
(0021)          LCD_write_string(0,0,"Tel:13308844201");
    0122 E780      LDI	R24,0x70
    0123 E090      LDI	R25,0
    0124 8399      STD	Y+1,R25
    0125 8388      STD	Y+0,R24
    0126 2722      CLR	R18
    0127 2700      CLR	R16
    0128 DFBC      RCALL	_LCD_write_string
(0022)          LCD_write_string(0,1,"527dz@527dz.com");
    0129 E680      LDI	R24,0x60
    012A E090      LDI	R25,0
    012B 8399      STD	Y+1,R25
    012C 8388      STD	Y+0,R24
    012D E021      LDI	R18,1
    012E 2700      CLR	R16
    012F DFB5      RCALL	_LCD_write_string
(0023)          delay_nms(5000);
    0130 E808      LDI	R16,0x88
    0131 E113      LDI	R17,0x13
    0132 D01C      RCALL	_delay_nms
    0133 CFD3      RJMP	0x0107
    0134 9622      ADIW	R28,2
    0135 9508      RET
FILE: D:\test6\delay.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    asm("nop");
_delay_1us:
    0136 0000      NOP
    0137 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0138 D02F      RCALL	push_gset2
    0139 01B8      MOVW	R22,R16
(0008)   }
(0009) 
(0010) void delay_nus(unsigned int n)       //N us延时函数
(0011)   {
(0012)    unsigned int i=0;
    013A 2744      CLR	R20
    013B 2755      CLR	R21
(0013)    for (i=0;i<n;i++)
    013C C003      RJMP	0x0140
(0014)    delay_1us();
    013D DFF8      RCALL	_delay_1us
    013E 5F4F      SUBI	R20,0xFF
    013F 4F5F      SBCI	R21,0xFF
    0140 1746      CP	R20,R22
    0141 0757      CPC	R21,R23
    0142 F3D0      BCS	0x013D
    0143 D018      RCALL	pop_gset2
    0144 9508      RET
(0015)   }
(0016)   
(0017) void delay_1ms(void)                 //1ms延时函数
(0018)   {
(0019)    unsigned int i;
(0020)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    0145 2700      CLR	R16
    0146 2711      CLR	R17
    0147 C002      RJMP	0x014A
    0148 5F0F      SUBI	R16,0xFF
    0149 4F1F      SBCI	R17,0xFF
    014A 3704      CPI	R16,0x74
    014B E0E4      LDI	R30,4
    014C 071E      CPC	R17,R30
    014D F3D0      BCS	0x0148
    014E 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    014F D018      RCALL	push_gset2
    0150 01B8      MOVW	R22,R16
(0021)   }
(0022)   
(0023) void delay_nms(unsigned int n)       //N ms延时函数
(0024)   {
(0025)    unsigned int i=0;
    0151 2744      CLR	R20
    0152 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    0153 C003      RJMP	0x0157
(0027)    delay_1ms();
FILE: <library>
    0154 DFF0      RCALL	_delay_1ms
    0155 5F4F      SUBI	R20,0xFF
    0156 4F5F      SBCI	R21,0xFF
    0157 1746      CP	R20,R22
    0158 0757      CPC	R21,R23
    0159 F3D0      BCS	0x0154
    015A D001      RCALL	pop_gset2
    015B 9508      RET
pop_gset2:
    015C E0E2      LDI	R30,2
    015D C010      RJMP	pop
pop_gset3:
    015E E0E4      LDI	R30,4
    015F C00E      RJMP	pop
pop_gset4:
    0160 E0E8      LDI	R30,0x8
    0161 C00C      RJMP	pop
push_gset5:
    0162 92FA      ST	R15,-Y
    0163 92EA      ST	R14,-Y
push_gset4:
    0164 92DA      ST	R13,-Y
    0165 92CA      ST	R12,-Y
push_gset3:
    0166 92BA      ST	R11,-Y
    0167 92AA      ST	R10,-Y
push_gset2:
    0168 937A      ST	R23,-Y
    0169 936A      ST	R22,-Y
push_gset1:
    016A 935A      ST	R21,-Y
    016B 934A      ST	R20,-Y
    016C 9508      RET
pop_gset1:
    016D E0E1      LDI	R30,1
pop:
    016E 9149      LD	R20,Y+
    016F 9159      LD	R21,Y+
    0170 FDE0      SBRC	R30,0
    0171 9508      RET
    0172 9169      LD	R22,Y+
    0173 9179      LD	R23,Y+
    0174 FDE1      SBRC	R30,1
    0175 9508      RET
    0176 90A9      LD	R10,Y+
    0177 90B9      LD	R11,Y+
    0178 FDE2      SBRC	R30,2
    0179 9508      RET
    017A 90C9      LD	R12,Y+
    017B 90D9      LD	R13,Y+
    017C FDE3      SBRC	R30,3
    017D 9508      RET
    017E 90E9      LD	R14,Y+
    017F 90F9      LD	R15,Y+
    0180 9508      RET

⌨️ 快捷键说明

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