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

📄 lcd.s

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module LCD.C
	.area data(ram, con, rel)
_date::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.blkb 10
	.area idata
	.byte 0,0,0,0,0,0,0,0,0,0
	.area data(ram, con, rel)
	.dbfile D:\new_sd\LCD\LCD.C
	.dbsym e date _date A[11:11]c
	.area lit(rom, con, rel)
_data_hi::
	.byte 0,224
	.byte 16,8
	.byte 8,16
	.byte 224,0
	.byte 0,15
	.byte 16,32
	.byte 32,16
	.byte 15,0
	.byte 0,16
	.byte 16,248
	.byte 0,0
	.byte 0,0
	.byte 0,32
	.byte 32,63
	.byte 32,32
	.byte 0,0
	.byte 0,'p
	.byte 8,8
	.byte 8,136
	.byte 'p,0
	.byte 0,48
	.byte 40,36
	.byte 34,33
	.byte 48,0
	.byte 0,48
	.byte 8,136
	.byte 136,'H
	.byte 48,0
	.byte 0,24
	.byte 32,32
	.byte 32,17
	.byte 14,0
	.byte 0,0
	.byte 192,32
	.byte 16,248
	.byte 0,0
	.byte 0,7
	.byte 4,36
	.byte 36,63
	.byte 36,0
	.byte 0,248
	.byte 8,136
	.byte 136,8
	.byte 8,0
	.byte 0,25
	.byte 33,32
	.byte 32,17
	.byte 14,0
	.byte 0,224
	.byte 16,136
	.byte 136,24
	.byte 0,0
	.byte 0,15
	.byte 17,32
	.byte 32,17
	.byte 14,0
	.byte 0,56
	.byte 8,8
	.byte 200,56
	.byte 8,0
	.byte 0,0
	.byte 0,63
	.byte 0,0
	.byte 0,0
	.byte 0,'p
	.byte 136,8
	.byte 8,136
	.byte 'p,0
	.byte 0,28
	.byte 34,33
	.byte 33,34
	.byte 28,0
	.byte 0,224
	.byte 16,8
	.byte 8,16
	.byte 224,0
	.byte 0,0
	.byte 49,34
	.byte 34,17
	.byte 15,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,48
	.byte 48,0
	.byte 0,0
	.byte 0,0
	.byte 8,'x
	.byte 136,0
	.byte 0,200
	.byte 56,8
	.byte 0,0
	.byte 7,56
	.byte 14,1
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,1
	.byte 1,1
	.byte 1,1
	.byte 1,1
	.dbsym e data_hi _data_hi A[224:224]kc
	.area text(rom, con, rel)
	.dbfile D:\new_sd\LCD\LCD.C
	.dbfunc e delayms _delayms fV
;              i -> y+4
;              j -> y+0
;              m -> y+12
	.even
_delayms::
	xcall push_arg4
	xcall push_gset2
	sbiw R28,8
	.dbline -1
	.dbline 64
; 
; //作者:张文2008.08.07
; //液晶显示问题的说明
; //液晶显示的时候用到LCD_SHOW()就可以了,不过开SPCR = 0x50  使用后关SPCR = 0x54;
; //液晶的尺寸是256*192的. 
; //void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
; //page 为0 2 4 8 10对应的是行
; //m 对应的是 0x10  -- 0x17 每一行对应的数据的开始地址
; //n 对应的是 两个字节的数据中的一个 一个汉字是32*32 //n==0的时候显示前半个数据.n=8对应的是后半个数据
; //data 对应的是显示的数据,在显示的时候用的是查表的方法。
; #include <iom64v.h>
; #include <macros.h>
; 
; #include"lcd.h"
; #define LCD_control	  PORTD
; #define LCD_CS	  6
; #define LCD_RST	  5
; #define LCD_RS	  4 
; 
; //-------------------------------------------------------------------------------
; unsigned char date[11]={0};   
; //-------------------------------------------------------------------------------
; //十进制数
; //-------------------------------------------------------------------------------
; const unsigned char data_hi[224]= {	  	 			 	//0123456789.
;    0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
;    0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, //0	  
;    0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
;    0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,	//1
;    0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
;    0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,	//2
;    0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
;    0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,	//3
;    0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
;    0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,	//4
;    0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
;    0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,	//5
;    0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
;    0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,	//6
;    0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
;    0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,	//7
;    0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
;    0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,	//8
;    0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
;    0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,	//9
;    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
;    0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,	//.   10
;    0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
;    0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,  //v   11
;    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
;    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //12
;    
;    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //"-"  //13
;    0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
;    
;    
;    
;    }; 
; //-------------------------------------------------------------------------------
; // Delay Routine
; //延时程序
; //-------------------------------------------------------------------------------
; void delayms(UINT32 m)    
; {
	.dbline 67
;     UINT32 j;
;     UINT32 i;
;     NOP();
	nop
	.dbline 68
;     for(i=0; i<m; i++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+4,R20
	std z+5,R21
	std z+6,R22
	std z+7,R23
	xjmp L5
L2:
	.dbline 69
;         for(j=0; j<109; j++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	xjmp L9
L6:
	.dbline 70
	nop
L7:
	.dbline 69
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L9:
	.dbline 69
	ldi R20,109
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L6
L3:
	.dbline 68
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+4,R2
	std z+5,R3
	std z+6,R4
	std z+7,R5
L5:
	.dbline 68
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	movw R30,R28
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X0
	xjmp L2
X0:
	.dbline -2
L1:
	adiw R28,8
	xcall pop_gset2
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l i 4 l
	.dbsym l j 0 l
	.dbsym l m 12 l
	.dbend
	.dbfunc e SdCmd _SdCmd fV
;        Command -> R20
	.even
_SdCmd::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 77
;         NOP();
; }
; //-------------------------------------------------------------------------------
; // IO Routine
; // LCD“命令字”发送
; //-------------------------------------------------------------------------------
; void SdCmd(UINT8 Command)                                     // send command
; {
	.dbline 78
;   SPI_SS |=1;  											  //屏蔽3548
	sbi 0x18,0
	.dbline 79
; 	LCD_control &=~(1<<LCD_CS);                               // chip select
	cbi 0x12,6
	.dbline 80
; 	LCD_control &=~(1<<LCD_RS);                               // for command
	cbi 0x12,4
	.dbline 81
; 	SPI_SendByte(Command);
	mov R16,R20
	clr R17
	xcall _SPI_SendByte
	.dbline 82
; 	LCD_control |=1<<LCD_CS;                                  // chip select
	sbi 0x12,6
	.dbline -2
L10:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Command 20 c
	.dbend
	.dbfunc e SdData _SdData fV
;          DData -> R20
	.even
_SdData::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 88
; }
; //-------------------------------------------------------------------------------
; //LCD 数据发送
; //-------------------------------------------------------------------------------
; void SdData(UINT8 DData)                                       // send data
; {
	.dbline 89
;     SPI_SS |=1;	  											   //屏蔽3548
	sbi 0x18,0
	.dbline 90
; 	LCD_control &=~(1<<LCD_CS);                           	   // chip select
	cbi 0x12,6
	.dbline 91
; 	LCD_control |=1<<LCD_RS;                                   // for data
	sbi 0x12,4
	.dbline 92
; 	SPI_SendByte(DData);
	mov R16,R20
	clr R17
	xcall _SPI_SendByte
	.dbline 93
; 	LCD_control |=1<<LCD_CS;                                  // chip select
	sbi 0x12,6
	.dbline -2
L11:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r DData 20 c
	.dbend
	.dbfunc e LCDSHOW _LCDSHOW fV
;              i -> R20
;              j -> R14
;           date -> R22
;              n -> R10
;              m -> R12
;           page -> y+10
	.even
_LCDSHOW::
	xcall push_arg4
	xcall push_gset5
	mov R12,R18
	ldd R10,y+14
	ldd R22,y+16
	.dbline -1
	.dbline 102
; }	
; //-------------------------------------------------------------------------------
; //LCD 显示字符和数字
; //    void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
; //    LCDSHOW( page, 0x15, 8, 12);	
; //    M ()   N   
; //-------------------------------------------------------------------------------
; void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
; {
	.dbline 105
;     
; 	UINT8 i,j;
; 	for(i=0;i<2;i++)              
	clr R20
	xjmp L16
L13:
	.dbline 106
; 	   {
	.dbline 107
; 	    SdCmd(0xb0+i+page);          
	mov R16,R20
	subi R16,80    ; addi 176
	ldd R0,y+10
	add R16,R0
	xcall _SdCmd
	.dbline 108
; 		SdCmd(m);                
	mov R16,R12
	xcall _SdCmd
	.dbline 109
;         SdCmd(n);                 
	mov R16,R10
	xcall _SdCmd
	.dbline 110
;         for(j=0;j<8;j++)
	clr R14
	xjmp L20
L17:
	.dbline 111
	.dbline 112
	ldi R24,8
	mul R24,R20
	mov R30,R14
	clr R31
	add R30,R0
	adc R31,R1
	ldi R24,16
	mul R24,R22
	add R30,R0
	adc R31,R1
	ldi R24,<_data_hi
	ldi R25,>_data_hi
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _SdData
	.dbline 113
	ldi R24,8
	mul R24,R20
	mov R30,R14
	clr R31
	add R30,R0
	adc R31,R1
	ldi R24,16
	mul R24,R22
	add R30,R0
	adc R31,R1
	ldi R24,<_data_hi
	ldi R25,>_data_hi

⌨️ 快捷键说明

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