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

📄 main.s

📁 m48,8兆,smg12232带16*16汉字库点阵液晶屏驱动程序,有详细注视,
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:\SOURCE~1\avr\avr48\smg12232zk/initrialm48.h
	.dbfunc e Port_Init _Port_Init fV
	.even
_Port_Init::
	.dbline -1
	.dbline 10
;                 
; /******************  SMG12232ZK串行接口程序******************
; *ICC-AVR application builder : 2007-10-18
; * Target : M8
; * Crystal: 8.0000Mhz
; 
; * Title : Accessing to LCD-CONTROLLER                                   
; * Date :  2007-10-18                                                      
; * Support QQ:  16693799     
; * Create by :	Joe Yuan      
	.dbline 11
; * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER */ 
	ldi R24,255
	out 0x5,R24
	.dbline 12
;                                                                       
	out 0x4,R24
	.dbline 13
; 
	ldi R24,111
	out 0x8,R24
	.dbline 14
; 
	out 0x7,R24
	.dbline 15
; #include <iom48v.h>		//ATMEGA48头文件
	ldi R24,255
	out 0xb,R24
	.dbline 16
; #include <macros.h>		//宏定义
	out 0xa,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Init_Devices _Init_Devices fV
	.even
_Init_Devices::
	.dbline -1
	.dbline 21
; #include "initrialm48.h"//初始化mcu
; #include "define.h"		//端口定义
; #include "delay.h"		//延时程序
; 
; 
	.dbline 23
; #define LCD_PORT PORTD
; #define LCD_DDR	DDRD
	cli
	.dbline 24
; 	#define LCD_SCLK PD0
	rcall _Port_Init
	.dbline 27
; 	#define LCD_CS	PD2
; 	#define LCD_STD PD1
; 
	sei
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile D:\SOURCE~1\avr\avr48\smg12232zk/delay.h
	.dbfunc e Delay_1us _Delay_1us fV
	.even
_Delay_1us::
	.dbline -1
	.dbline 53
; 
; #define LCD_CS_H LCD_PORT |= BIT(LCD_CS)
; #define LCD_CS_L LCD_PORT &=~ BIT(LCD_CS)
; #define LCD_STD_H LCD_PORT |= BIT(LCD_STD)
; #define LCD_STD_L LCD_PORT &=~ BIT(LCD_STD)
; #define LCD_SCLK_H LCD_PORT |= BIT(LCD_SCLK)
; #define LCD_SCLK_L LCD_PORT &=~ BIT(LCD_SCLK)
; 
; 
; 
; void Send_8bit(Word x);//串行发送8位数据
; void Lcd_Write(Byte start,Byte data);//模块写入子程序
; void Lcd_Reset(void);//模块复位子程序
; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度		
; 
; Byte lcd_buf[10];//数据显示数组
; Byte *pointer;
; Long lcd_data1;
; Long lcd_data2;
; 
; 
; void main(void)
; {
; 	Word i;
;  	Init_Devices();
	.dbline 54
; 	Lcd_Reset();
	nop
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Delay_Us _Delay_Us fV
;              i -> R20
;            xus -> R22
	.even
_Delay_Us::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 58
; 	Hzk_Dis_Words(1,1,"袁自刚:16693799");	
; 	while(1)
; 	{	
; 		Hzk_Dis_Data(2,1,lcd_data1,7);	
	.dbline 60
; 		lcd_data1 ++;
; 
	clr R20
	rjmp L8
L5:
	.dbline 61
	rcall _Delay_1us
L6:
	.dbline 60
	inc R20
L8:
	.dbline 60
	cp R20,R22
	brlo L5
	.dbline -2
L4:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r xus 22 c
	.dbend
	.dbfunc e Delay_1ms _Delay_1ms fV
;              i -> R16,R17
	.even
_Delay_1ms::
	.dbline -1
	.dbline 65
; 		Hzk_Dis_Data(2,5,lcd_data2,7);	
; 		lcd_data2 ++;
; 		Delay_Ms(300);
; 	}	
; 
	.dbline 67
; }
; /****************发送汉字子程序******************
	clr R16
	clr R17
	rjmp L13
L10:
	.dbline 68
L11:
	.dbline 67
	subi R16,255  ; offset = 1
	sbci R17,255
L13:
	.dbline 67
	cpi R16,118
	ldi R30,4
	cpc R17,R30
	brlo L10
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e Delay_Ms _Delay_Ms fV
;              i -> R20,R21
;              j -> R22,R23
;            xms -> R16,R17
	.even
_Delay_Ms::
	rcall push_gset2
	.dbline -1
	.dbline 72
; ** xpos为列数,ypos为行数
; **lcd_pointer为字符串首地址
; *********************************************************/
; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度									
; {
	.dbline 74
; 	Byte i=0,ram_address;//ram_address:首地址
; 	//首先判断字符串得长度
	clr R20
	clr R21
	rjmp L18
L15:
	.dbline 75
; 	while(*(lcd_pointer+i) != '\0')//字符串长度
	clr R22
	clr R23
	rjmp L22
L19:
	.dbline 76
	.dbline 77
	nop
	.dbline 78
	nop
	.dbline 79
	nop
	.dbline 80
	nop
	.dbline 81
	nop
	.dbline 82
	nop
	.dbline 83
	nop
	.dbline 84
	nop
	.dbline 85
	nop
	.dbline 86
L20:
	.dbline 75
	subi R22,255  ; offset = 1
	sbci R23,255
L22:
	.dbline 75
	cpi R22,242
	ldi R30,1
	cpc R23,R30
	brlo L19
L16:
	.dbline 74
	subi R20,255  ; offset = 1
	sbci R21,255
L18:
	.dbline 74
	cp R20,R16
	cpc R21,R17
	brlo L15
	.dbline -2
L14:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r xms 16 i
	.dbend
	.dbfunc e Delay_X10us _Delay_X10us fV
;              i -> R20,R21
;              j -> R22
;          x10us -> R16,R17
	.even
_Delay_X10us::
	rcall push_gset2
	.dbline -1
	.dbline 90
; 	{
; 		i++;
; 	}//i=字符串长度	
; 	if(i>15)
; 	{
; 		i=15;
; 	}
; 	if(ypos==1)
; 	{
; 		ram_address = 0x80+xpos-1;
; 	}
; 	else if(ypos==2)
; 	{
; 		ram_address = 0x90+xpos-1;
; 	}
	.dbline 92
; 	Lcd_Write(0xf8,ram_address);
; 	for(;i>0;i--)
	clr R20
	clr R21
	rjmp L27
L24:
	.dbline 93
; 	{
	.dbline 94
; 		Lcd_Write(0xfa,*lcd_pointer);	
	clr R22
	rjmp L31
L28:
	.dbline 95
	.dbline 96
	nop
	.dbline 97
	nop
	.dbline 98
	nop
	.dbline 99
L29:
	.dbline 94
	inc R22
L31:
	.dbline 94
	cpi R22,2
	brlo L28
	.dbline 100
L25:
	.dbline 92
	subi R20,255  ; offset = 1
	sbci R21,255
L27:
	.dbline 92
	cp R20,R16
	cpc R21,R17
	brlo L24
	.dbline -2
L23:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 c
	.dbsym r x10us 16 i
	.dbend
	.dbfile D:\SOURCE~1\avr\avr48\smg12232zk\main.c
	.dbfunc e main _main fV
;              i -> <dead>
	.even
_main::
	sbiw R28,5
	.dbline -1
	.dbline 51
	.dbline 53
	rcall _Init_Devices
	.dbline 54
	rcall _Lcd_Reset
	.dbline 55
	ldi R24,<L33
	ldi R25,>L33
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,1
	rcall _Hzk_Dis_Words
	rjmp L35
L34:
	.dbline 57
	.dbline 58
	ldi R24,7
	std y+4,R24
	lds R4,_lcd_data1+2
	lds R5,_lcd_data1+2+1
	lds R2,_lcd_data1
	lds R3,_lcd_data1+1
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	ldi R18,1
	ldi R16,2
	rcall _Hzk_Dis_Data
	.dbline 59
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_lcd_data1+2
	lds R5,_lcd_data1+2+1
	lds R2,_lcd_data1
	lds R3,_lcd_data1+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _lcd_data1+1,R3
	sts _lcd_data1,R2
	sts _lcd_data1+2+1,R5
	sts _lcd_data1+2,R4
	.dbline 61
	ldi R24,7
	std y+4,R24
	lds R4,_lcd_data2+2
	lds R5,_lcd_data2+2+1
	lds R2,_lcd_data2
	lds R3,_lcd_data2+1
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	ldi R18,5
	ldi R16,2
	rcall _Hzk_Dis_Data
	.dbline 62
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_lcd_data2+2
	lds R5,_lcd_data2+2+1
	lds R2,_lcd_data2
	lds R3,_lcd_data2+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _lcd_data2+1,R3
	sts _lcd_data2,R2
	sts _lcd_data2+2+1,R5
	sts _lcd_data2+2,R4
	.dbline 63
	ldi R16,300
	ldi R17,1
	rcall _Delay_Ms
	.dbline 64
L35:
	.dbline 56
	rjmp L34
X0:
	.dbline -2
L32:
	adiw R28,5
	.dbline 0 ; func end
	ret
	.dbsym l i 6 i
	.dbend
	.dbfunc e Hzk_Dis_Words _Hzk_Dis_Words fV
;    ram_address -> R10
;              i -> R20
;    lcd_pointer -> R22,R23
;           xpos -> R12
;           ypos -> R14
	.even
_Hzk_Dis_Words::
	rcall push_gset5
	mov R12,R18
	mov R14,R16
	ldd R22,y+10
	ldd R23,y+11
	.dbline -1
	.dbline 72
	.dbline 73
	clr R20
	rjmp L39
L38:
	.dbline 76
	.dbline 77
	inc R20
	.dbline 78
L39:
	.dbline 75
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R2,z+0
	tst R2
	brne L38
	.dbline 79
	ldi R24,15
	cp R24,R20
	brsh L41
	.dbline 80
	.dbline 81
	ldi R20,15
	.dbline 82
L41:
	.dbline 83
	mov R24,R14
	cpi R24,1
	brne L43
	.dbline 84
	.dbline 85
	mov R24,R12

⌨️ 快捷键说明

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