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

📄 lcm.s

📁 8位液晶屏LCM0825的点亮源代码
💻 S
字号:
	.module lcm.c
	.area text(rom, con, rel)
	.dbfile G:\AVR系列\LCM0825\lcm.c
	.dbfunc e delay_1us _delay_1us fV
;              k -> R16,R17
	.even
_delay_1us::
	.dbline -1
	.dbline 5
; //lcm.c
; //液晶显示程序
; #include<iom8v.h>
; void delay_1us(void)//1us延时程序
;  {
	.dbline 7
;   unsigned  int k;
;   for(k=1;k<10;k++) 
	ldi R16,1
	ldi R17,0
	rjmp L5
L2:
	.dbline 8
L3:
	.dbline 7
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 7
	cpi R16,10
	ldi R30,0
	cpc R17,R30
	brlo L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r k 16 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              k -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 12
;   ;
;  }
; 
;  void delay_1ms(void)//1ms延时程序
;  {
	.dbline 14
;   unsigned  int k;
;   for(k=1;k<856;k++) 
	ldi R16,1
	ldi R17,0
	rjmp L10
L7:
	.dbline 15
L8:
	.dbline 14
	subi R16,255  ; offset = 1
	sbci R17,255
L10:
	.dbline 14
	cpi R16,88
	ldi R30,3
	cpc R17,R30
	brlo L7
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbsym r k 16 i
	.dbend
	.dbfunc e delay _delay fV
;              l -> R20,R21
;              m -> R22,R23
	.even
_delay::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 18
;   ;
;  }
;   void delay(unsigned int m)//延时m ms程序
;  {
	.dbline 21
;   unsigned  int l;
;   
;   for(l=0;l<m;l++) 
	clr R20
	clr R21
	rjmp L15
L12:
	.dbline 22
	rcall _delay_1ms
L13:
	.dbline 21
	subi R20,255  ; offset = 1
	sbci R21,255
L15:
	.dbline 21
	cp R20,R22
	cpc R21,R23
	brlo L12
	.dbline -2
L11:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r l 20 i
	.dbsym r m 22 i
	.dbend
	.dbfunc e data_0 _data_0 fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_data_0::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 26
;   delay_1ms();
;  }
; 
;  void data_0(unsigned int n)//传输N个0
; { int i;
	.dbline 27
;    for(i=0;i<n;i++)
	clr R20
	clr R21
	rjmp L20
L17:
	.dbline 28
	.dbline 30
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 30
	rcall _delay_1us
	.dbline 31
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 31
	rcall _delay_1us
	.dbline 32
	sbi 0x12,6
	.dbline 32
	rcall _delay_1us
	.dbline 33
L18:
	.dbline 27
	subi R20,255  ; offset = 1
	sbci R21,255
L20:
	.dbline 27
	cp R20,R22
	cpc R21,R23
	brlo L17
	.dbline -2
L16:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r n 22 i
	.dbend
	.dbfunc e data_1 _data_1 fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_data_1::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 37
;    {
;    
;    PORTD&=0x7F; delay_1us();//data=0
;    PORTD&=0xBF;delay_1us();//wr=0
;    PORTD|=0x40; delay_1us();//wr=1
;    }
;  }
;  
;  void data_1(unsigned int n)//传输N个1
; { int i;
	.dbline 38
;    for(i=0;i<n;i++)
	clr R20
	clr R21
	rjmp L25
L22:
	.dbline 39
	.dbline 40
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 41
	sbi 0x12,7
	.dbline 41
	rcall _delay_1us
	.dbline 42
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 42
	rcall _delay_1us
	.dbline 43
	sbi 0x12,6
	.dbline 43
	rcall _delay_1us
	.dbline 44
L23:
	.dbline 38
	subi R20,255  ; offset = 1
	sbci R21,255
L25:
	.dbline 38
	cp R20,R22
	cpc R21,R23
	brlo L22
	.dbline -2
L21:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r n 22 i
	.dbend
	.dbfunc e write_lcd _write_lcd fV
;              j -> R20
;            dat -> R22
;           data -> R10
;              n -> R20
	.even
_write_lcd::
	rcall push_gset3
	mov R10,R18
	mov R20,R16
	.dbline -1
	.dbline 49
;    {
;     PORTD&=0x7f; 
;    PORTD|=0x80;delay_1us();//data=1
;    PORTD&=0xBF;delay_1us();//wr=0
;    PORTD|=0x40;delay_1us();//wr=1
;    }
;  }
;  
; 
; void write_lcd(char n,unsigned char data )
;  {
	.dbline 51
;    char j;
;    unsigned char dat=data;
	mov R22,R10
	.dbline 52
;     DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
	ldi R24,240
	out 0x11,R24
	.dbline 52
	rcall _delay_1us
	.dbline 53
;  PORTD=0xff; delay_1us();
	ldi R24,255
	out 0x12,R24
	.dbline 53
	rcall _delay_1us
	.dbline 54
;   switch(n)
	clr R21
	cpi R20,10
	ldi R30,0
	cpc R21,R30
	brne X1
	rjmp L40
X1:
	cpi R20,12
	ldi R30,0
	cpc R21,R30
	breq L30
	cpi R20,13
	ldi R30,0
	cpc R21,R30
	breq L35
	rjmp L27
X0:
	.dbline 55
;   { 
L30:
	.dbline 57
;    case 12://写命令
;    {
	.dbline 59
;   
;     PORTD&=0xef;delay_1us(); 
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 59
	rcall _delay_1us
	.dbline 60
; 	data_1(1);
	ldi R16,1
	ldi R17,0
	rcall _data_1
	.dbline 61
; 	data_0(2);
	ldi R16,2
	ldi R17,0
	rcall _data_0
	.dbline 62
; 	for(j=0;j<8;j++)
	clr R20
	rjmp L34
L31:
	.dbline 63
	.dbline 64
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 64
	rcall _delay_1us
	.dbline 65
	mov R24,R22
	andi R24,128
	in R2,0x12
	or R2,R24
	out 0x12,R2
	.dbline 65
	rcall _delay_1us
	.dbline 66
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 66
	rcall _delay_1us
	.dbline 67
	sbi 0x12,6
	.dbline 67
	rcall _delay_1us
	.dbline 68
	lsl R22
	.dbline 68
	rcall _delay_1us
	.dbline 70
L32:
	.dbline 62
	inc R20
L34:
	.dbline 62
	cpi R20,8
	brlo L31
	.dbline 71
;     { 
;      PORTD&=0x7f; delay_1us();      
;      PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
;      PORTD&=0xbf;delay_1us(); 
; 	 PORTD|=0x40;delay_1us();                 
;      dat=(dat<<1);delay_1us();  
; 	 
;     }
; 	data_0(1);
	ldi R16,1
	ldi R17,0
	rcall _data_0
	.dbline 72
; 	PORTD|=0x10;delay_1us(); 
	sbi 0x12,4
	.dbline 72
	rcall _delay_1us
	.dbline 73
; 	PORTD|=0xc0;delay_1us();
	in R24,0x12
	ori R24,192
	out 0x12,R24
	.dbline 73
	rcall _delay_1us
	.dbline 75
; 	//delay(100);
;    }break;
	.dbline 75
	rjmp L28
L35:
	.dbline 77
; case 13://写最低位数据
;    {
	.dbline 80
;   
;   
;     PORTD&=0xef;delay_1us(); 
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 80
	rcall _delay_1us
	.dbline 81
; 	 data_1(1);
	ldi R16,1
	ldi R17,0
	rcall _data_1
	.dbline 82
;    data_0(1);
	ldi R16,1
	ldi R17,0
	rcall _data_0
	.dbline 83
;    data_1(2);
	ldi R16,2
	ldi R17,0
	rcall _data_1
	.dbline 84
;    data_0(1);
	ldi R16,1
	ldi R17,0
	rcall _data_0
	.dbline 85
; 	for(j=0;j<8;j++)
	clr R20
	rjmp L39
L36:
	.dbline 86
	.dbline 88
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 88
	rcall _delay_1us
	.dbline 89
	mov R24,R22
	andi R24,128
	in R2,0x12
	or R2,R24
	out 0x12,R2
	.dbline 89
	rcall _delay_1us
	.dbline 90
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 90
	rcall _delay_1us
	.dbline 91
	sbi 0x12,6
	.dbline 91
	rcall _delay_1us
	.dbline 92
	lsl R22
	.dbline 92
	rcall _delay_1us
	.dbline 93
L37:
	.dbline 85
	inc R20
L39:
	.dbline 85
	cpi R20,8
	brlo L36
	.dbline 94
;     { 
; 	
;      PORTD&=0x7f;  delay_1us();       
;      PORTD|=(dat&0x80);delay_1us(); 
;      PORTD&=0xbf; delay_1us(); 
; 	 PORTD|=0x40;  delay_1us();             
;      dat=(dat<<1); delay_1us(); 
;     }
; 	PORTD|=0x10;delay_1us(); 
	sbi 0x12,4
	.dbline 94
	rcall _delay_1us
	.dbline 96
; 	
; 	PORTD|=0xc0;delay_1us();
	in R24,0x12
	ori R24,192
	out 0x12,R24
	.dbline 96
	rcall _delay_1us
	.dbline 100
; 	
; 	//return(read_lcd()==)  
; 	
; 	   }break;
	.dbline 100
	rjmp L28
L40:
	.dbline 102
;    case 10://将高七位全部置零
;    {
	.dbline 104
;   
;     dat=(dat<<3);
	lsl R22
	lsl R22
	lsl R22
	.dbline 105
;     PORTD&=0xef;delay_1us(); 
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 105
	rcall _delay_1us
	.dbline 106
; 	 data_1(1);
	ldi R16,1
	ldi R17,0
	rcall _data_1
	.dbline 107
;    data_0(1);
	ldi R16,1
	ldi R17,0
	rcall _data_0
	.dbline 108
;    data_1(2);
	ldi R16,2
	ldi R17,0
	rcall _data_1
	.dbline 109
; 	for(j=0;j<5;j++)
	clr R20
	rjmp L44
L41:
	.dbline 110
	.dbline 112
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 112
	rcall _delay_1us
	.dbline 113
	mov R24,R22
	andi R24,128
	in R2,0x12
	or R2,R24
	out 0x12,R2
	.dbline 113
	rcall _delay_1us
	.dbline 114
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 114
	rcall _delay_1us
	.dbline 115
	sbi 0x12,6
	.dbline 115
	rcall _delay_1us
	.dbline 116
	lsl R22
	.dbline 116
	rcall _delay_1us
	.dbline 117
L42:
	.dbline 109
	inc R20
L44:
	.dbline 109
	cpi R20,5
	brlo L41
	.dbline 118
;     { 
; 	
;      PORTD&=0x7f;  delay_1us();       
;      PORTD|=(dat&0x80);delay_1us(); 
;      PORTD&=0xbf; delay_1us(); 
; 	 PORTD|=0x40;  delay_1us();             
;      dat=(dat<<1); delay_1us(); 
;     }
; 	data_0(4);
	ldi R16,4
	ldi R17,0
	rcall _data_0
	.dbline 119
; 	PORTD|=0x10;delay_1us(); 
	sbi 0x12,4
	.dbline 119
	rcall _delay_1us
	.dbline 121
; 	
; 	PORTD|=0xc0;delay_1us();
	in R24,0x12
	ori R24,192
	out 0x12,R24
	.dbline 121
	rcall _delay_1us
	.dbline 125
; 	
; 	//return(read_lcd()==)  
; 	
; 	   }break;
	.dbline 125
L27:
L28:
	.dbline -2
L26:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r dat 22 c
	.dbsym r data 10 c
	.dbsym r n 20 c
	.dbend
	.area lit(rom, con, rel)
L46:
	.byte 41,24
	.byte 1,3
L47:
	.byte 6,16
	.byte 3,30
	.byte 7,26
	.byte 6,19
	.byte 5,27
	.byte 5,31
	.byte 7,16
	.byte 7,31
	.byte 7,27
	.byte 7,29
	.area text(rom, con, rel)
	.dbfile G:\AVR系列\LCM0825\lcm.c
	.dbfunc e main _main fV
;           init -> y+20
;            add -> R22
;        address -> y+0
;              j -> R22,R23
;              i -> R20
	.even
_main::
	sbiw R28,24
	.dbline -1
	.dbline 130
;    
;  }
; }
;  void main(void)
; {
	.dbline 131
; unsigned char init[4]={0x29,0x18,0x01,0x03}, address[20]={0x06,0x10,0x03,0x1e,0x07,0x1a,              
	ldi R24,<L46
	ldi R25,>L46
	movw R30,R28
	adiw R30,20
	ldi R16,4
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 131
	ldi R24,<L47
	ldi R25,>L47
	movw R30,R28
	ldi R16,20
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 138
;                                                                                0x06,0x13,0x05,0x1b,0x05,0x1f,
; 															                   0x07,0x10,0x07,0x1f,0x07,0x1b,
; 															                   0x07,0x1d};//初始化命令字表和0~9数字表
;                                                                                                                                                                                                
;  char i,add;    
;  unsigned int j;                                                                                      
;  DDRD|=0xf0;delay_1us();   
	in R24,0x11
	ori R24,240
	out 0x11,R24
	.dbline 138
	rcall _delay_1us
	.dbline 139
;  PORTD|=0xf0;delay_1us();   
	in R24,0x12
	ori R24,240
	out 0x12,R24
	.dbline 139
	rcall _delay_1us
	.dbline 140
; for(i=0;i<10;i++)
	clr R20
	rjmp L51
L48:
	.dbline 141
	clr R22
	clr R23
	rjmp L55
L52:
	.dbline 141
L53:
	.dbline 141
	subi R22,255  ; offset = 1
	sbci R23,255
L55:
	.dbline 141
	cpi R22,112
	ldi R30,23
	cpc R23,R30
	brlo L52
L49:
	.dbline 140
	inc R20
L51:
	.dbline 140
	cpi R20,10
	brlo L48
	.dbline 142
;    	   for(j=0;j<6000;j++);	  
;  for(i=0;i<4;i++)//初始化
	clr R20
	rjmp L59
L56:
	.dbline 143
	movw R24,R28
	adiw R24,20
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	ldi R16,12
	rcall _write_lcd
L57:
	.dbline 142
	inc R20
L59:
	.dbline 142
	cpi R20,4
	brlo L56
	.dbline 144
;   write_lcd(12,init[i]);
;   for(add=2;add<16;add++)//将高七位置零
	ldi R22,2
	rjmp L63
L60:
	.dbline 145
	mov R18,R22
	ldi R16,10
	rcall _write_lcd
L61:
	.dbline 144
	inc R22
L63:
	.dbline 144
	cpi R22,16
	brlo L60
	rjmp L65
L64:
	.dbline 148
;   write_lcd(10,add);
;  //delay(300);
;  while(1)
;   {
	.dbline 149
;   for(i=0;i<20;i++) //写一个数据延时一段时间
	clr R20
	rjmp L70
L67:
	.dbline 150
	.dbline 151
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	movw R24,R28
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	ldi R16,13
	rcall _write_lcd
	.dbline 152
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	ldi R16,13
	rcall _write_lcd
	.dbline 154
	ldi R16,200
	ldi R17,0
	rcall _delay
	.dbline 155
L68:
	.dbline 149
	inc R20
L70:
	.dbline 149
	cpi R20,20
	brlo L67
	.dbline 156
L65:
	.dbline 147
	rjmp L64
X2:
	.dbline -2
L45:
	adiw R28,24
	.dbline 0 ; func end
	ret
	.dbsym l init 20 A[4:4]c
	.dbsym r add 22 c
	.dbsym l address 0 A[20:20]c
	.dbsym r j 22 i
	.dbsym r i 20 c
	.dbend

⌨️ 快捷键说明

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