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

📄 1602xi.lst

📁 lcd液晶驱动显示原代码 根据硬件自己修改
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E8ED      LDI	R30,0x8D
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 38ED      CPI	R30,0x8D
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E2E6      LDI	R30,0x26
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E3      CPI	R30,0x53
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 D0C3      RCALL	_main
_exit:
    0049 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\1602\delay.c
(0001) /*---------------------------------------延时函数-------------------------------------*/ 
(0002) 
(0003) /*-----------------------------------------------------------------------
(0004) 延时函数
(0005) 系统时钟:8M
(0006) -----------------------------------------------------------------------*/
(0007) void delay_1us(void)                 //1us延时函数
(0008)   {
(0009)    asm("nop");
_delay_1us:
    004A 0000      NOP
    004B 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    004C D0CA      RCALL	push_gset2
    004D 01B8      MOVW	R22,R16
(0010)   }
(0011) 
(0012) void delay_nus(unsigned int n)       //N us延时函数
(0013)   {
(0014)    unsigned int i=0;
    004E 2744      CLR	R20
    004F 2755      CLR	R21
(0015)    for (i=0;i<n;i++)
    0050 C003      RJMP	0x0054
(0016)    delay_1us();
    0051 DFF8      RCALL	_delay_1us
    0052 5F4F      SUBI	R20,0xFF
    0053 4F5F      SBCI	R21,0xFF
    0054 1746      CP	R20,R22
    0055 0757      CPC	R21,R23
    0056 F3D0      BCS	0x0051
    0057 D0B5      RCALL	pop_gset2
    0058 9508      RET
(0017)   }
(0018) 
(0019) void delay_1ms(void )  //延时1ms 
(0020) { 
(0021)    unsigned int i ; 
(0022)    unsigned char xtal; 
(0023)    xtal=4; 
_delay_1ms:
  xtal                 --> R16
  i                    --> R18
    0059 E004      LDI	R16,4
(0024)    for (i=1;i<(xtal*143-2);i++) 
    005A E021      LDI	R18,1
    005B E030      LDI	R19,0
    005C C002      RJMP	0x005F
    005D 5F2F      SUBI	R18,0xFF
    005E 4F3F      SBCI	R19,0xFF
    005F E88F      LDI	R24,0x8F
    0060 9F80      MUL	R24,R16
    0061 01C0      MOVW	R24,R0
    0062 9702      SBIW	R24,2
    0063 1728      CP	R18,R24
    0064 0739      CPC	R19,R25
    0065 F3B8      BCS	0x005D
    0066 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0067 D0AF      RCALL	push_gset2
    0068 01B8      MOVW	R22,R16
(0025)    { 
(0026)     ; 
(0027)    }    
(0028) } 
(0029) 
(0030) void delay_nms(unsigned int n)  //延时nms 
(0031) { 
(0032)    unsigned int i=0 ;  
    0069 2744      CLR	R20
    006A 2755      CLR	R21
(0033)    for(i=0;i<n;i++) 
    006B C003      RJMP	0x006F
(0034)    { 
(0035)     delay_1ms();  
    006C DFEC      RCALL	_delay_1ms
    006D 5F4F      SUBI	R20,0xFF
    006E 4F5F      SBCI	R21,0xFF
    006F 1746      CP	R20,R22
    0070 0757      CPC	R21,R23
    0071 F3D0      BCS	0x006C
    0072 D09A      RCALL	pop_gset2
    0073 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c
(0001) #include <iom8v.h> 
(0002) #include <macros.h> 
(0003) #include "LCD1602.h"
(0004) /********************************************************** 
(0005) 光标命令 
(0006) lcd_write_command(0x0e,0);//光标开 
(0007) lcd_write_command(0x0d,0);//光标所在字符闪烁   
(0008) lcd_write_command(0x0c,0); //光标关  
(0009) lcd_write_command(0x07,0); //屏幕左移
(0010) 
(0011) **********************************************************/ 
(0012) 
(0013) /*------------------------------------液晶驱动函数-------------------------------------*/ 
(0014) void lcd_init_portDB(void) 
(0015) { 
(0016)    lcd_data_port=0xff; 
_lcd_init_portDB:
    0074 EF8F      LDI	R24,0xFF
    0075 BB88      OUT	0x18,R24
(0017)    lcd_data_ddr=0xff; 
    0076 BB87      OUT	0x17,R24
(0018)    lcd_control_port=0x07; 
    0077 E087      LDI	R24,7
    0078 BB85      OUT	0x15,R24
(0019)    lcd_control_ddr=0x07; 
    0079 BB84      OUT	0x14,R24
    007A 9508      RET
(0020) } 
(0021) 
(0022) //液晶初始化 
(0023) void lcd_init(void) 
(0024) { 
(0025)    delay_nms(15); 
_lcd_init:
    007B E00F      LDI	R16,0xF
    007C E010      LDI	R17,0
    007D DFE9      RCALL	_delay_nms
(0026)    lcd_write_command(0x38,0);//显示模式设置三次(此时不管lcd空闲与否) 
    007E 2722      CLR	R18
    007F E308      LDI	R16,0x38
    0080 D01F      RCALL	_lcd_write_command
(0027)    delay_nms(5); 
    0081 E005      LDI	R16,5
    0082 E010      LDI	R17,0
    0083 DFE3      RCALL	_delay_nms
(0028)    lcd_write_command(0x38,0); 
    0084 2722      CLR	R18
    0085 E308      LDI	R16,0x38
    0086 D019      RCALL	_lcd_write_command
(0029)    delay_nms(5); 
    0087 E005      LDI	R16,5
    0088 E010      LDI	R17,0
    0089 DFDD      RCALL	_delay_nms
(0030)    lcd_write_command(0x38,0); 
    008A 2722      CLR	R18
    008B E308      LDI	R16,0x38
    008C D013      RCALL	_lcd_write_command
(0031)    delay_nms(5); 
    008D E005      LDI	R16,5
    008E E010      LDI	R17,0
    008F DFD7      RCALL	_delay_nms
(0032)     
(0033)    lcd_write_command(0x38,1);//显示模式设置(从此之后均需lcd空闲) 
    0090 E021      LDI	R18,1
    0091 E308      LDI	R16,0x38
    0092 D00D      RCALL	_lcd_write_command
(0034)    lcd_write_command(0x08,1);//显示关闭 
    0093 E021      LDI	R18,1
    0094 E008      LDI	R16,0x8
    0095 D00A      RCALL	_lcd_write_command
(0035)    lcd_write_command(0x01,1);//显示清屏 
    0096 E021      LDI	R18,1
    0097 E001      LDI	R16,1
    0098 D007      RCALL	_lcd_write_command
(0036)    lcd_write_command(0x06,1);//显示光标移动设置 
    0099 E021      LDI	R18,1
    009A E006      LDI	R16,6
    009B D004      RCALL	_lcd_write_command
(0037)    lcd_write_command(0x0c,1);//显示开及光标设置 
    009C E021      LDI	R18,1
    009D E00C      LDI	R16,0xC
    009E D001      RCALL	_lcd_write_command
    009F 9508      RET
_lcd_write_command:
  wait_en              --> R22
  command              --> R20
    00A0 D076      RCALL	push_gset2
    00A1 2F62      MOV	R22,R18
    00A2 2F40      MOV	R20,R16
(0038) } 
(0039) 
(0040) //写指令函数: E=高脉冲 RS=0 RW=0 
(0041) void lcd_write_command(unsigned char command,unsigned char wait_en)//command为指令,wait_en指定是否要检测LCD忙信号 
(0042) { 
(0043)    if(wait_en)wait_enable();//若wait_en为1,则要检测LCD忙信号,等待其空闲 
    00A3 2366      TST	R22
    00A4 F009      BEQ	0x00A6
    00A5 D015      RCALL	_wait_enable
(0044)    lcd_control_port&=~lcd_RS;//RS=0 
    00A6 98A8      CBI	0x15,0
(0045)    lcd_control_port&=~lcd_RW;//RW=0 
    00A7 98A9      CBI	0x15,1
(0046)    lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲 
    00A8 98AA      CBI	0x15,2
(0047)    NOP(); 
    00A9 0000      NOP
(0048)    lcd_control_port|=lcd_EN;//E=1 
    00AA 9AAA      SBI	0x15,2
(0049)    lcd_data_port=command; 
    00AB BB48      OUT	0x18,R20
(0050)    lcd_control_port&=~lcd_EN;//重设E=0 
    00AC 98AA      CBI	0x15,2
    00AD D05F      RCALL	pop_gset2
    00AE 9508      RET
_lcd_write_data:
  char_data            --> R20
    00AF D069      RCALL	push_gset1
    00B0 2F40      MOV	R20,R16
(0051) } 
(0052) 
(0053) //写数据函数: E =高脉冲 RS=1 RW=0 
(0054) void lcd_write_data(unsigned char char_data) 
(0055) { 
(0056)    wait_enable();//等待LCD空闲 
    00B1 D009      RCALL	_wait_enable
(0057)    lcd_control_port|=lcd_RS;//RS=1 
    00B2 9AA8      SBI	0x15,0
(0058)    lcd_control_port&=~lcd_RW;//RW=0 
    00B3 98A9      CBI	0x15,1
(0059)    lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲 
    00B4 98AA      CBI	0x15,2
(0060)    NOP(); 
    00B5 0000      NOP
(0061)    lcd_control_port|=lcd_EN;//E=1 
    00B6 9AAA      SBI	0x15,2
(0062)    lcd_data_port=char_data; 
    00B7 BB48      OUT	0x18,R20

⌨️ 快捷键说明

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