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

📄 main.s

📁 m48,8兆,smg12232带16*16汉字库点阵液晶屏驱动程序,有详细注视,
💻 S
📖 第 1 页 / 共 2 页
字号:
	subi R24,128    ; addi 128
	subi R24,1
	mov R10,R24
	.dbline 86
	rjmp L44
L43:
	.dbline 87
	mov R24,R14
	cpi R24,2
	brne L45
	.dbline 88
	.dbline 89
	mov R24,R12
	subi R24,112    ; addi 144
	subi R24,1
	mov R10,R24
	.dbline 90
L45:
L44:
	.dbline 91
	mov R18,R10
	ldi R16,248
	rcall _Lcd_Write
	.dbline 92
	rjmp L50
L47:
	.dbline 93
	.dbline 94
	movw R30,R22
	ldd R18,z+0
	ldi R16,250
	rcall _Lcd_Write
	.dbline 95
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 96
L48:
	.dbline 92
	dec R20
L50:
	.dbline 92
	clr R2
	cp R2,R20
	brlo L47
	.dbline -2
L37:
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r ram_address 10 c
	.dbsym r i 20 c
	.dbsym r lcd_pointer 22 pc
	.dbsym r xpos 12 c
	.dbsym r ypos 14 c
	.dbend
	.dbfunc e Hzk_Dis_Data _Hzk_Dis_Data fV
;    ram_address -> R14
;              i -> R10
;            num -> R12
;           data -> y+14
;           xpos -> y+12
;           ypos -> y+10
	.even
_Hzk_Dis_Data::
	rcall push_arg4
	rcall push_gset5
	ldd R12,y+18
	.dbline -1
	.dbline 106
; 		lcd_pointer++;
; 	}	
; 	
; }
; 
; /****************发送数据子程序******************
; ** xpos为列数,ypos为行数
; **data为数据
; **num数据占用得位数
; *********************************************************/
; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)								
; {
	.dbline 107
; 	Byte i=0,ram_address;//ram_address:首地址
	clr R10
	.dbline 108
; 	if(num<16)
	mov R24,R12
	cpi R24,16
	brlo X1
	rjmp L52
X1:
	.dbline 109
; 	{
	.dbline 110
; 		for(i=0;i<num;i++)
	rjmp L57
L54:
	.dbline 111
	.dbline 112
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+14
	ldd R3,z+15
	ldd R4,z+16
	ldd R5,z+17
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall mod32u
	movw R2,R16
	movw R4,R18
	ldi R20,48
	ldi R21,0
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	mov R3,R10
	clr R4
	mov R30,R12
	clr R31
	sub R30,R3
	sbc R31,R4
	ldi R24,<_lcd_buf-1
	ldi R25,>_lcd_buf-1
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 113
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+14
	ldd R3,z+15
	ldd R4,z+16
	ldd R5,z+17
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall div32u
	movw R30,R28
	std z+14,R16
	std z+15,R17
	std z+16,R18
	std z+17,R19
	.dbline 114
L55:
	.dbline 110
	inc R10
L57:
	.dbline 110
	cp R10,R12
	brsh X2
	rjmp L54
X2:
	.dbline 116
; 		{
; 			lcd_buf[num-i-1]= data%10+0x30;
; 			data /= 10;
; 		}
; 		//输入灭零程序
; 		if(ypos==1)
	ldd R24,y+10
	cpi R24,1
	brne L59
	.dbline 117
; 		{
	.dbline 118
; 			ram_address = 0x80+xpos-1;
	ldd R24,y+12
	subi R24,128    ; addi 128
	subi R24,1
	mov R14,R24
	.dbline 119
; 		}
	rjmp L60
L59:
	.dbline 120
; 		else if(ypos==2)
	ldd R24,y+10
	cpi R24,2
	brne L61
	.dbline 121
; 		{
	.dbline 122
; 			ram_address = 0x90+xpos-1;
	ldd R24,y+12
	subi R24,112    ; addi 144
	subi R24,1
	mov R14,R24
	.dbline 123
; 		}
L61:
L60:
	.dbline 124
; 		Lcd_Write(0xf8,ram_address);
	mov R18,R14
	ldi R16,248
	rcall _Lcd_Write
	.dbline 125
; 		pointer = lcd_buf;
	ldi R24,<_lcd_buf
	ldi R25,>_lcd_buf
	sts _pointer+1,R25
	sts _pointer,R24
	.dbline 126
; 		for(i=0;i<num;i++)
	clr R10
	rjmp L66
L63:
	.dbline 127
	.dbline 128
	lds R30,_pointer
	lds R31,_pointer+1
	ldd R18,z+0
	ldi R16,250
	rcall _Lcd_Write
	.dbline 129
	lds R24,_pointer
	lds R25,_pointer+1
	adiw R24,1
	sts _pointer+1,R25
	sts _pointer,R24
	.dbline 130
L64:
	.dbline 126
	inc R10
L66:
	.dbline 126
	cp R10,R12
	brlo L63
	.dbline 131
L52:
	.dbline -2
L51:
	rcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r ram_address 14 c
	.dbsym r i 10 c
	.dbsym r num 12 c
	.dbsym l data 14 l
	.dbsym l xpos 12 c
	.dbsym l ypos 10 c
	.dbend
	.dbfunc e Lcd_Reset _Lcd_Reset fV
	.even
_Lcd_Reset::
	.dbline -1
	.dbline 136
; 		{
; 			Lcd_Write(0xfa,*pointer);	
; 			pointer++;
; 		}
; 	}	
; }
; 
; 
; void Lcd_Reset(void)
; {
	.dbline 137
; 	LCD_CS_H;//片选置高
	sbi 0xb,2
	.dbline 138
; 	Delay_Ms(1);//等待内部复位
	ldi R16,1
	ldi R17,0
	rcall _Delay_Ms
	.dbline 139
; 	Lcd_Write(0xf8,0x30);//使用基本指令集
	ldi R18,48
	ldi R16,248
	rcall _Lcd_Write
	.dbline 140
; 	Lcd_Write(0xf8,0x0c);//整体显示on
	ldi R18,12
	ldi R16,248
	rcall _Lcd_Write
	.dbline 141
; 	Lcd_Write(0xf8,0x01);//清除显示
	ldi R18,1
	ldi R16,248
	rcall _Lcd_Write
	.dbline 142
; 	Delay_Ms(5);//4.6ms
	ldi R16,5
	ldi R17,0
	rcall _Delay_Ms
	.dbline 143
; 	Lcd_Write(0xf8,0x06);//显示右移
	ldi R18,6
	ldi R16,248
	rcall _Lcd_Write
	.dbline 144
; 	LCD_CS_L;//片选置低
	cbi 0xb,2
	.dbline -2
L67:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Lcd_Write _Lcd_Write fV
;            com -> R20
;          start -> R22
	.even
_Lcd_Write::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 148
; }
; 
; void Lcd_Write(Byte start,Byte com)//start :起始字节com:命令/数据 						  
; {
	.dbline 149
; 	LCD_CS_H;//片选置高
	sbi 0xb,2
	.dbline 150
; 	Send_8bit(start);
	mov R16,R22
	clr R17
	rcall _Send_8bit
	.dbline 151
; 	Delay_Us(100);//72us
	ldi R16,100
	rcall _Delay_Us
	.dbline 153
; 		//将data变为datal 0000 datah 0000
; 	Send_8bit(com&0xf0);
	mov R16,R20
	clr R17
	andi R16,240
	andi R17,0
	rcall _Send_8bit
	.dbline 154
; 	Delay_Us(100);//72us	
	ldi R16,100
	rcall _Delay_Us
	.dbline 155
; 	Send_8bit((com&0x0f)<<4);
	mov R16,R20
	clr R17
	andi R16,15
	andi R17,0
	lsl R16
	rol R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	rcall _Send_8bit
	.dbline 156
; 	Delay_Us(100);//72us
	ldi R16,100
	rcall _Delay_Us
	.dbline 157
; 	LCD_CS_L;//片选置低
	cbi 0xb,2
	.dbline -2
L68:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r com 20 c
	.dbsym r start 22 c
	.dbend
	.dbfunc e Send_8bit _Send_8bit fV
;              i -> R20
;              x -> R22,R23
	.even
_Send_8bit::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 161
; }
; 	
; void Send_8bit(Word x)
; {
	.dbline 163
; 	Byte i;
; 	for(i=0;i<8;i++)
	clr R20
	rjmp L73
L70:
	.dbline 164
; 	{
	.dbline 165
; 		if(x&0x80)//数据线发送数据
	sbrs R22,7
	rjmp L74
	.dbline 166
; 		{
	.dbline 167
; 			LCD_STD_H;
	sbi 0xb,1
	.dbline 168
; 		}
	rjmp L75
L74:
	.dbline 170
; 		else
; 		{
	.dbline 171
; 			LCD_STD_L;
	cbi 0xb,1
	.dbline 172
; 		}
L75:
	.dbline 173
	cbi 0xb,0
	.dbline 174
	ldi R16,2
	rcall _Delay_Us
	.dbline 175
	sbi 0xb,0
	.dbline 176
	ldi R16,2
	rcall _Delay_Us
	.dbline 177
	lsl R22
	rol R23
	.dbline 178
L71:
	.dbline 163
	inc R20
L73:
	.dbline 163
	cpi R20,8
	brlo L70
	.dbline -2
L69:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r x 22 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\SOURCE~1\avr\avr48\smg12232zk\main.c
_lcd_data2::
	.blkb 4
	.dbsym e lcd_data2 _lcd_data2 l
_lcd_data1::
	.blkb 4
	.dbsym e lcd_data1 _lcd_data1 l
_pointer::
	.blkb 2
	.dbsym e pointer _pointer pc
_lcd_buf::
	.blkb 10
	.dbsym e lcd_buf _lcd_buf A[10:10]c
	.area data(ram, con, rel)
	.dbfile D:\SOURCE~1\avr\avr48\smg12232zk\main.c
L33:
	.blkb 16
	.area idata
	.byte 212,172,215,212,184,213,58,49,54,54,57,51,55,57,57,0
	.area data(ram, con, rel)
	.dbfile D:\SOURCE~1\avr\avr48\smg12232zk\main.c

⌨️ 快捷键说明

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