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

📄 lcd.lst

📁 使用ICCAVR编写的mega128L单片机的12864液晶显示程序
💻 LST
字号:
__text_start:
__start:
    0054 EFCF      LDI	R28,0xFF
    0055 E1D0      LDI	R29,0x10
    0056 BFCD      OUT	0x3D,R28
    0057 BFDE      OUT	0x3E,R29
    0058 51C0      SUBI	R28,0x10
    0059 40D0      SBCI	R29,0
    005A EA0A      LDI	R16,0xAA
    005B 8308      STD	Y+0,R16
    005C 2400      CLR	R0
    005D E1EC      LDI	R30,0x1C
    005E E0F1      LDI	R31,1
    005F E011      LDI	R17,1
    0060 31EC      CPI	R30,0x1C
    0061 07F1      CPC	R31,R17
    0062 F011      BEQ	0x0065
    0063 9201      ST	R0,Z+
    0064 CFFB      RJMP	0x0060
    0065 8300      STD	Z+0,R16
    0066 E8EC      LDI	R30,0x8C
    0067 E0F0      LDI	R31,0
    0068 E0A0      LDI	R26,0
    0069 E0B1      LDI	R27,1
    006A E010      LDI	R17,0
    006B 3AE8      CPI	R30,0xA8
    006C 07F1      CPC	R31,R17
    006D F021      BEQ	0x0072
    006E 95C8      LPM
    006F 9631      ADIW	R30,1
    0070 920D      ST	R0,X+
    0071 CFF9      RJMP	0x006B
    0072 940E0103  CALL	_main
_exit:
    0074 CFFF      RJMP	_exit
FILE: E:\icc\lcd\lcd_init.h
(0001) /*
(0002) LCD12864液晶驱动模块
(0003) */
(0004) /*
(0005) PG0---RS---4
(0006) PG1---R/W--5
(0007) PG2---EN---6    
(0008) PA0---DB0---7
(0009) PA1---DB1---8
(0010) PA2---DB2---9
(0011) PA3---DB3---10
(0012) PA4---DB4---11
(0013) PA5---DB5---12
(0014) PA6---DB6---13
(0015) PA7---DB7---14
(0016) 
(0017) */
(0018) #include <iom128v.h>
(0019) #include <macros.h> 
(0020) 
(0021) 
(0022) /*命令或是数据选择*/
(0023) /*RS = 0命令,RS = 1数据*/
(0024) #define RS_CLR PORTG&=~(1<<0)  
(0025) #define RS_SET PORTG|=(1<<0)   
(0026) /*读取或写入选择*/
(0027) /*RW = 1读,RW = 0写*/
(0028) #define RW_CLR PORTG&=~(1<<1)
(0029) #define RW_SET PORTG|=(1<<1)
(0030) /*读写使能信号*/
(0031) /*下降沿有效*/
(0032) #define EN_CLR PORTG&=~(1<<2)
(0033) #define EN_SET PORTG|=(1<<2)
(0034) /*芯片复位脚*/
(0035) /*高电平复位
(0036) #define RST_CLR PORTD&=~(1<<PD7)
(0037) #define RST_SET PORTD|=(1<<PD7)*/
(0038) //延时函数
(0039) void delay (unsigned int n)
(0040) {
(0041) while(n--);
_delay:
  n                    --> R16
    0075 0118      MOVW	R2,R16
    0076 5001      SUBI	R16,1
    0077 4010      SBCI	R17,0
    0078 2022      TST	R2
    0079 F7D9      BNE	0x0075
    007A 2033      TST	R3
    007B F7C9      BNE	0x0075
    007C 9508      RET
(0042) }
(0043) void chk_busy(void)
(0044) {
(0045)  PORTA=0XFF;
_chk_busy:
    007D EF8F      LDI	R24,0xFF
    007E BB8B      OUT	0x1B,R24
(0046)  RS_CLR;
    007F 91800065  LDS	R24,0x65
    0081 7F8E      ANDI	R24,0xFE
    0082 93800065  STS	0x65,R24
(0047)  RW_SET;
    0084 91800065  LDS	R24,0x65
    0086 6082      ORI	R24,2
    0087 93800065  STS	0x65,R24
(0048)  
(0049)  DDRA=0X00;
    0089 2422      CLR	R2
    008A BA2A      OUT	0x1A,R2
(0050)  
(0051)  EN_SET;
    008B 91800065  LDS	R24,0x65
    008D 6084      ORI	R24,4
    008E 93800065  STS	0x65,R24
(0052)  while(PINA&0X80);
    0090 99CF      SBIC	0x19,7
    0091 CFFE      RJMP	0x0090
(0053)  EN_CLR;
    0092 91800065  LDS	R24,0x65
    0094 7F8B      ANDI	R24,0xFB
    0095 93800065  STS	0x65,R24
(0054)  DDRA=0XFF;
    0097 EF8F      LDI	R24,0xFF
    0098 BB8A      OUT	0x1A,R24
    0099 9508      RET
_LCD_write_code:
  code                 --> R20
    009A 940E011B  CALL	push_gset1
    009C 2F40      MOV	R20,R16
(0055) }
(0056) //显示屏命令写入函数
(0057) void LCD_write_code(unsigned char code)
(0058) {
(0059) chk_busy();
    009D DFDF      RCALL	_chk_busy
(0060) RS_CLR;
    009E 91800065  LDS	R24,0x65
    00A0 7F8E      ANDI	R24,0xFE
    00A1 93800065  STS	0x65,R24
(0061) RW_CLR;
    00A3 91800065  LDS	R24,0x65
    00A5 7F8D      ANDI	R24,0xFD
    00A6 93800065  STS	0x65,R24
(0062) PORTA=code;
    00A8 BB4B      OUT	0x1B,R20
(0063) EN_SET;
    00A9 91800065  LDS	R24,0x65
    00AB 6084      ORI	R24,4
    00AC 93800065  STS	0x65,R24
(0064) delay(100);
    00AE E604      LDI	R16,0x64
    00AF E010      LDI	R17,0
    00B0 DFC4      RCALL	_delay
(0065) EN_CLR;
    00B1 91800065  LDS	R24,0x65
    00B3 7F8B      ANDI	R24,0xFB
    00B4 93800065  STS	0x65,R24
    00B6 940E011E  CALL	pop_gset1
    00B8 9508      RET
_LCD_write_data:
  data                 --> R20
    00B9 940E011B  CALL	push_gset1
    00BB 2F40      MOV	R20,R16
(0066) }
(0067) //显示屏数据显写入函数
(0068) void LCD_write_data(unsigned char data)
(0069) {
(0070) chk_busy();
    00BC DFC0      RCALL	_chk_busy
(0071) RS_SET;
    00BD 91800065  LDS	R24,0x65
    00BF 6081      ORI	R24,1
    00C0 93800065  STS	0x65,R24
(0072) RW_CLR;
    00C2 91800065  LDS	R24,0x65
    00C4 7F8D      ANDI	R24,0xFD
    00C5 93800065  STS	0x65,R24
(0073) PORTA=data;
    00C7 BB4B      OUT	0x1B,R20
(0074) EN_SET;
    00C8 91800065  LDS	R24,0x65
    00CA 6084      ORI	R24,4
    00CB 93800065  STS	0x65,R24
(0075) delay(100);
    00CD E604      LDI	R16,0x64
    00CE E010      LDI	R17,0
    00CF DFA5      RCALL	_delay
(0076) EN_CLR; 
    00D0 91800065  LDS	R24,0x65
    00D2 7F8B      ANDI	R24,0xFB
    00D3 93800065  STS	0x65,R24
    00D5 940E011E  CALL	pop_gset1
    00D7 9508      RET
_disp_char:
  asii                 --> R20
  position             --> R22
    00D8 940E0119  CALL	push_gset2
    00DA 2F42      MOV	R20,R18
    00DB 2F60      MOV	R22,R16
(0077) }
(0078) /*单个字符输入函数;position--显示位置,data--显示内容*/
(0079) void disp_char(unsigned char position,unsigned char asii)
(0080) {
(0081)  LCD_write_code(position);
    00DC 2F06      MOV	R16,R22
    00DD DFBC      RCALL	_LCD_write_code
(0082)  LCD_write_data(asii);
    00DE 2F04      MOV	R16,R20
    00DF DFD9      RCALL	_LCD_write_data
    00E0 940E0110  CALL	pop_gset2
    00E2 9508      RET
_disp_word:
  word                 --> R20
  position             --> R22
    00E3 940E0119  CALL	push_gset2
    00E5 01A9      MOVW	R20,R18
    00E6 2F60      MOV	R22,R16
(0083) }
(0084) /*一串字符输入函数
(0085) void disp_char_str(unsigned char position,unsigned char *str)
(0086) {
(0087)  LCD_write_code(position);
(0088)  while(*str!=0)                    //含义???
(0089)       {
(0090) 	   
(0091) 	   LCD_write_data(*str);
(0092) 	   str++;
(0093) 	  }
(0094) }*/
(0095) /*汉字输入*/
(0096) void disp_word(unsigned char position,unsigned char *word)
(0097) {
(0098) LCD_write_code(position);//要显示的位置
    00E7 2F06      MOV	R16,R22
    00E8 DFB1      RCALL	_LCD_write_code
    00E9 C005      RJMP	0x00EF
(0099) while(*word!=0)
(0100)      {
(0101) 	  LCD_write_data(*word);
    00EA 01FA      MOVW	R30,R20
    00EB 8100      LDD	R16,Z+0
    00EC DFCC      RCALL	_LCD_write_data
(0102) 	  word++;
    00ED 5F4F      SUBI	R20,0xFF
    00EE 4F5F      SBCI	R21,0xFF
    00EF 01FA      MOVW	R30,R20
    00F0 8020      LDD	R2,Z+0
    00F1 2022      TST	R2
    00F2 F7B9      BNE	0x00EA
    00F3 940E0110  CALL	pop_gset2
    00F5 9508      RET
(0103) 	 } 
(0104)  
(0105) }
(0106) 
(0107) //显示屏初始化
(0108) void disp_init(void)
(0109) {
(0110) DDRA=0XFF;
_disp_init:
    00F6 EF8F      LDI	R24,0xFF
    00F7 BB8A      OUT	0x1A,R24
(0111) //DDRD=(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
(0112) DDRG=0XFF;
    00F8 93800064  STS	0x64,R24
(0113) 
(0114) LCD_write_code(0x30);//功能设定/*30---基本指令动作
    00FA E300      LDI	R16,0x30
    00FB DF9E      RCALL	_LCD_write_code
(0115) LCD_write_code(0x01);//清屏,地址指针指向00H
    00FC E001      LDI	R16,1
    00FD DF9C      RCALL	_LCD_write_code
(0116) LCD_write_code(0x06);//光标的移动方向
    00FE E006      LDI	R16,6
    00FF DF9A      RCALL	_LCD_write_code
(0117) LCD_write_code(0x0c);//光标反白显示--0x0f/*开显示,关游标
    0100 E00C      LDI	R16,0xC
    0101 DF98      RCALL	_LCD_write_code
    0102 9508      RET
FILE: E:\icc\lcd\lcd.c
(0001) //ICC-AVR application builder : 2008-10-8 下午 04:03:04
(0002) // Target : M128
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom128v.h>
(0006) #include <macros.h>
(0007) #include "lcd_init.h"
(0008) 
(0009) void main(void)
(0010) {
(0011)  disp_init();
_main:
    0103 DFF2      RCALL	_disp_init
(0012)  delay(0xffff);
    0104 EF0F      LDI	R16,0xFF
    0105 EF1F      LDI	R17,0xFF
    0106 DF6E      RCALL	_delay
(0013) disp_word(0x80,"任务:EEPROM"); 
    0107 E02F      LDI	R18,0xF
    0108 E031      LDI	R19,1
    0109 E800      LDI	R16,0x80
    010A DFD8      RCALL	_disp_word
(0014) disp_word(0x90,"2008年10月09日");
FILE: <library>
    010B E020      LDI	R18,0
    010C E031      LDI	R19,1
    010D E900      LDI	R16,0x90
    010E DFD4      RCALL	_disp_word
    010F 9508      RET
pop_gset2:
    0110 E0E2      LDI	R30,2
    0111 940C011F  JMP	pop
push_gset5:
    0113 92FA      ST	R15,-Y
    0114 92EA      ST	R14,-Y
push_gset4:
    0115 92DA      ST	R13,-Y
    0116 92CA      ST	R12,-Y
push_gset3:
    0117 92BA      ST	R11,-Y
    0118 92AA      ST	R10,-Y
push_gset2:
    0119 937A      ST	R23,-Y
    011A 936A      ST	R22,-Y
push_gset1:
    011B 935A      ST	R21,-Y
    011C 934A      ST	R20,-Y
    011D 9508      RET
pop_gset1:
    011E E0E1      LDI	R30,1
pop:
    011F 9149      LD	R20,Y+
    0120 9159      LD	R21,Y+
    0121 FDE0      SBRC	R30,0
    0122 9508      RET
    0123 9169      LD	R22,Y+
    0124 9179      LD	R23,Y+
    0125 FDE1      SBRC	R30,1
    0126 9508      RET
    0127 90A9      LD	R10,Y+
    0128 90B9      LD	R11,Y+
    0129 FDE2      SBRC	R30,2
    012A 9508      RET
    012B 90C9      LD	R12,Y+
    012C 90D9      LD	R13,Y+
    012D FDE3      SBRC	R30,3
    012E 9508      RET
    012F 90E9      LD	R14,Y+
    0130 90F9      LD	R15,Y+
    0131 9508      RET

⌨️ 快捷键说明

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