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

📄 gps.lst

📁 12864液晶不带字库的各种刷屏显示方式
💻 LST
📖 第 1 页 / 共 4 页
字号:
     C88 9380 0065 STS	0x0065,R24
(0047) 	DDRG  = 0xff;
     C8A 9380 0064 STS	0x0064,R24
     C8C 9508      RET
(0048) 
(0049) 	//BEEP_PORT &=~ BIT(BEEP);
(0050) }
(0051) 
(0052) //TIMER0 initialize - prescale:1024
(0053) // WGM: Normal
(0054) // desired value: 10mSec
(0055) // actual value:  9.984mSec (0.2%)
(0056) void Timer0_Init(void)
(0057) {
(0058) 	TCCR0 = 0x00; //stop
_Timer0_Init:
     C8D 2422      CLR	R2
     C8E BE23      OUT	0x33,R2
(0059) 	ASSR  = 0x00; //set async mode
     C8F BE20      OUT	0x30,R2
(0060) 	TCNT0 = 0xB2; //set count
     C90 EB82      LDI	R24,0xB2
     C91 BF82      OUT	0x32,R24
(0061) 	OCR0  = 0x4E;
     C92 E48E      LDI	R24,0x4E
     C93 BF81      OUT	0x31,R24
(0062) 	TCCR0 = 0x07; //start timer prescale:1024
     C94 E087      LDI	R24,7
     C95 BF83      OUT	0x33,R24
(0063) 	TIMSK |= BIT(TOIE0); //timer0 interrupt sources
     C96 B787      IN	R24,0x37
     C97 6081      ORI	R24,1
     C98 BF87      OUT	0x37,R24
     C99 9508      RET
_Hz_Display16x16_12864:
  j                    --> R20
  i                    --> R12
  p                    --> Y,+8
  x                    --> R22
  y                    --> R10
     C9A 940E 0F2B CALL	push_xgsetF03C
     C9C 2F62      MOV	R22,R18
     C9D 2EA0      MOV	R10,R16
FILE: D:\SOURCE~1\手持gps测量仪\lcm6059b12864.h
(0001) /****************128*64液晶驱动程序*******************/
(0002) /*DEVICE:LM6059BCW  128*64   IC:ST7565P
(0003) /*MCU:  AVR  M128    7.3728M(8M)    
(0004) /*DATA: 2008.07.23
(0005) /*AUTHOR: JOE YUAN   QQ:16693799
(0006) /***********************************************************/
(0007) 
(0008) #include <iom128v.h>
(0009) #include <macros.h>
(0010) #include "delay.h"
(0011) #include "ascii8x16.h"
(0012) #include "HZK_GB16.h"
(0013) #include "define.h"
(0014) #include "tupian.h"
(0015) 
(0016) void Write_Com_12864( unsigned char cmdcode );//写控制字
(0017) void Write_Data_12864 ( unsigned char Dispdata );//写数据到LCD
(0018) void Clr_Scr_12864(void);//清屏
(0019) void Set_Scr_12864(void);//全显示程序
(0020) void Hz_Display16_12864//指定位置显示汉字16*16
(0021) 			(
(0022) 				unsigned char y, //显示的Y坐标
(0023) 			  	unsigned char x, //显示的X坐标
(0024) 			  	unsigned char const *hz_code 
(0025) 			 );
(0026) 
(0027) #define CTRL_PORT_12864 PORTC
(0028) 	#define CS12864		PC0//片选
(0029) 	#define RST12864	PC1//复位端
(0030) 	#define RS12864		PC2//寄存器选择H :数据区 L:控制区
(0031) 	#define RW12864		PC3//读写选择
(0032) 	#define E12864		PC4//
(0033) 
(0034) 	#define CS12864_H	CTRL_PORT_12864 |= BIT(CS12864);
(0035) 	#define	CS12864_L	CTRL_PORT_12864 &=~ BIT(CS12864);
(0036) 	#define RST12864_H	CTRL_PORT_12864 |= BIT(RST12864);
(0037) 	#define RST12864_L	CTRL_PORT_12864 &=~ BIT(RST12864);
(0038) 	#define RS12864_H	CTRL_PORT_12864 |= BIT(RS12864);
(0039) 	#define RS12864_L	CTRL_PORT_12864 &=~ BIT(RS12864);
(0040) 	#define RW12864_H	CTRL_PORT_12864 |= BIT(RW12864);
(0041) 	#define RW12864_L	CTRL_PORT_12864 &=~ BIT(RW12864);
(0042) 	#define E12864_H	CTRL_PORT_12864 |= BIT(E12864);
(0043) 	#define E12864_L	CTRL_PORT_12864 &=~ BIT(E12864);	
(0044) 
(0045) #define DATA_PORT_12864 PORTA//输出口
(0046) #define DATA_DDR_12864	DDRA//数据口方向
(0047) #define DATA_PIN_12864	PINA//输入口
(0048) 
(0049) 
(0050) #define DISP_ON 0xAf
(0051) #define DISP_OFF 0xAe
(0052) #define COL_ADDRESS  0xB0//列首地址
(0053) #define PAGE_ADDRESS 0xB0//业首地址
(0054) //#define START_LINE 0xc0//启始行 
(0055) 
(0056) unsigned char col_address;//列地址
(0057) unsigned char page_address;//页地址
(0058) 
(0059) unsigned char lcd_ram_12864[8][128];//刷屏缓冲区8*128
(0060) 
(0061) 
(0062) 
(0063) 
(0064) 
(0065) 
(0066) 
(0067) 
(0068) /***********************************************************************
(0069) /*直接写入lcd12864数据区方式
(0070) /**********************************************************************/
(0071) void Hz_Display16x16_12864//指定位置显示汉字16*16
(0072) 			(
(0073) 				unsigned char y, //显示的Y坐标
(0074) 			  	unsigned char x, //显示的X坐标
(0075) 			  	unsigned char const *p
(0076) 			 )
(0077) {
(0078) 	unsigned char j,i ;
(0079) 	for(j=0;j<2;j++)
     C9E 2744      CLR	R20
     C9F C021      RJMP	0x0CC1
(0080) 	{
(0081) 			Write_Com_12864(PAGE_ADDRESS+y+j);//写入汉字显示地址
     CA0 2D0A      MOV	R16,R10
     CA1 5500      SUBI	R16,0x50
     CA2 0F04      ADD	R16,R20
     CA3 D1CD      RCALL	_Write_Com_12864
(0082) 			Write_Com_12864(0x10|((x&0xf0)>>4));
     CA4 2F06      MOV	R16,R22
     CA5 7F00      ANDI	R16,0xF0
     CA6 9502      SWAP	R16
     CA7 700F      ANDI	R16,0xF
     CA8 6100      ORI	R16,0x10
     CA9 D1C7      RCALL	_Write_Com_12864
(0083) 			Write_Com_12864(0x00|(x&0x0f));
     CAA 2F06      MOV	R16,R22
     CAB 700F      ANDI	R16,0xF
     CAC D1C4      RCALL	_Write_Com_12864
(0084) 			for(i=0;i<16;i++) 
     CAD 24CC      CLR	R12
     CAE C00E      RJMP	0x0CBD
(0085) 			{
(0086) 				Write_Data_12864(p[16*j+i]);
     CAF E180      LDI	R24,0x10
     CB0 9F84      MUL	R24,R20
     CB1 01F0      MOVW	R30,R0
     CB2 2C2C      MOV	R2,R12
     CB3 2433      CLR	R3
     CB4 0DE2      ADD	R30,R2
     CB5 1DF3      ADC	R31,R3
     CB6 8408      LDD	R0,Y+8
     CB7 8419      LDD	R1,Y+9
     CB8 0DE0      ADD	R30,R0
     CB9 1DF1      ADC	R31,R1
     CBA 9106      ELPM	R16,9(Z)
     CBB D1C5      RCALL	_Write_Data_12864
     CBC 94C3      INC	R12
     CBD 2D8C      MOV	R24,R12
     CBE 3180      CPI	R24,0x10
     CBF F378      BCS	0x0CAF
     CC0 9543      INC	R20
     CC1 3042      CPI	R20,2
     CC2 F2E8      BCS	0x0CA0
     CC3 940C 0F34 JMP	pop_xgsetF03C
_Lcd_Ascii8x16_12864:
  cow_num              --> R22
  sizeb                --> R12
  j                    --> R10
  k                    --> R20
  i                    --> R14
  p                    --> Y,+14
  x                    --> Y,+12
  y                    --> Y,+10
     CC5 940E 0EF8 CALL	push_arg4
     CC7 940E 0F08 CALL	push_xgsetF0FC
(0087) 			}
(0088) 	}
(0089) }
(0090) 
(0091) void Lcd_Ascii8x16_12864//指定位置显示字符8*16
(0092) 			(
(0093) 				unsigned char y, //显示的Y坐标
(0094) 			  	unsigned char x, //显示的X坐标
(0095) 			  	unsigned char *p//字符指针 
(0096) 			 )
(0097) {
(0098) 	unsigned char j=0,i=0,k=0;
     CC9 24AA      CLR	R10
     CCA 24EE      CLR	R14
     CCB 2744      CLR	R20
(0099) 	unsigned char sizeb=0,cow_num;
     CCC 24CC      CLR	R12
     CCD C001      RJMP	0x0CCF
(0100) 	while(*(p+sizeb) != '\0')//字符串长度
(0101) 	{
(0102) 		sizeb++;
     CCE 94C3      INC	R12
     CCF 2DEC      MOV	R30,R12
     CD0 27FF      CLR	R31
     CD1 840E      LDD	R0,Y+14
     CD2 841F      LDD	R1,Y+15
     CD3 0DE0      ADD	R30,R0
     CD4 1DF1      ADC	R31,R1
     CD5 8020      LDD	R2,Z+0
     CD6 2022      TST	R2
     CD7 F7B1      BNE	0x0CCE
(0103) 	}
(0104) 	cow_num = sizeb/16+2;
     CD8 2D6C      MOV	R22,R12
     CD9 9562      SWAP	R22
     CDA 706F      ANDI	R22,0xF
     CDB 5F6E      SUBI	R22,0xFE
(0105) 	for(j=0;j<cow_num;j++)//字符高度为16 需要刷新2行
     CDC 24AA      CLR	R10
     CDD C037      RJMP	0x0D15
(0106) 	{
(0107) 		Write_Com_12864(PAGE_ADDRESS+y+j);//写入显示地址
     CDE 850A      LDD	R16,Y+10
     CDF 5500      SUBI	R16,0x50
     CE0 0D0A      ADD	R16,R10
     CE1 D18F      RCALL	_Write_Com_12864
(0108) 		Write_Com_12864(0x10|((x&0xf0)>>4));
     CE2 850C      LDD	R16,Y+12
     CE3 7F00      ANDI	R16,0xF0
     CE4 9502      SWAP	R16
     CE5 700F      ANDI	R16,0xF
     CE6 6100      ORI	R16,0x10
     CE7 D189      RCALL	_Write_Com_12864
(0109) 		Write_Com_12864(0x00|(x&0x0f));
     CE8 850C      LDD	R16,Y+12
     CE9 700F      ANDI	R16,0xF
     CEA D186      RCALL	_Write_Com_12864
(0110) 		for(k=0;k<sizeb;k++)//纵向的总的长度
     CEB 2744      CLR	R20
     CEC C025      RJMP	0x0D12
(0111) 		{
(0112) 			for(i=0;i<8;i++)//一个字符纵向8 次 
     CED 24EE      CLR	R14
     CEE C01F      RJMP	0x0D0E
(0113) 			{
(0114) 				Write_Data_12864(asciidot8x16[*(p+k)-0x20][8*j+i]);
     CEF 2FE4      MOV	R30,R20
     CF0 27FF      CLR	R31
     CF1 840E      LDD	R0,Y+14
     CF2 841F      LDD	R1,Y+15
     CF3 0DE0      ADD	R30,R0
     CF4 1DF1      ADC	R31,R1
     CF5 8020      LDD	R2,Z+0
     CF6 E180      LDI	R24,0x10
     CF7 9D82      MUL	R24,R2
     CF8 0110      MOVW	R2,R0
     CF9 E88C      LDI	R24,0x8C
     CFA EF9E      LDI	R25,0xFE
     CFB 0E28      ADD	R2,R24
     CFC 1E39      ADC	R3,R25
     CFD 2C4E      MOV	R4,R14
     CFE 2455      CLR	R5
     CFF 2DEA      MOV	R30,R10
     D00 27FF      CLR	R31
     D01 0FEE      LSL	R30
     D02 1FFF      ROL	R31
     D03 0FEE      LSL	R30
     D04 1FFF      ROL	R31
     D05 0FEE      LSL	R30
     D06 1FFF      ROL	R31
     D07 0DE4      ADD	R30,R4
     D08 1DF5      ADC	R31,R5
     D09 0DE2      ADD	R30,R2
     D0A 1DF3      ADC	R31,R3
     D0B 9106      ELPM	R16,254(Z)
     D0C D174      RCALL	_Write_Data_12864
     D0D 94E3      INC	R14
     D0E 2D8E      MOV	R24,R14
     D0F 3088      CPI	R24,0x8
     D10 F2F0      BCS	0x0CEF
     D11 9543      INC	R20
     D12 154C      CP	R20,R12
     D13 F2C8      BCS	0x0CED
     D14 94A3      INC	R10
     D15 16A6      CP	R10,R22
     D16 F408      BCC	0x0D18
     D17 CFC6      RJMP	0x0CDE
     D18 940E 0EFD CALL	pop_xgsetF0FC
     D1A 9624      ADIW	R28,4
     D1B 9508      RET
_Ram_12864:
  i                    --> R20
  j                    --> R22
     D1C 934A      ST	R20,-Y
     D1D 936A      ST	R22,-Y
(0115) 			}
(0116) 		}
(0117) 	}
(0118) }
(0119) /*************************************************************************/
(0120) 
(0121) 
(0122) 
(0123) /*************************************************************************/
(0124) /*写入单片机RAM缓冲区刷屏方式
(0125) /*************************************************************************/
(0126) void Ram_12864(void)//刷屏
(0127) {
(0128) 	unsigned char i,j;
(0129) 	for(i=0;i<8;i++)
     D1E 2744      CLR	R20
     D1F C01B      RJMP	0x0D3B
(0130) 	{
(0131) 		Write_Com_12864(0X10);//SET COLUMN ADDRESS = 0X00 UPPER-4BIT 
     D20 E100      LDI	R16,0x10
     D21 D14F      RCALL	_Write_Com_12864
(0132) 		Write_Com_12864(0X00);//SET COLUMN ADDRESS = 0X00 LOWER-4BIT 
     D22 2700      CLR	R16
     D23 D14D      RCALL	_Write_Com_12864
(0133) 		Write_Com_12864(0xB0|(i&0X0F));
     D24 2F04      MOV	R16,R20
     D25 700F      ANDI	R16,0xF
     D26 6B00      ORI	R16,0xB0
     D27 D149      RCALL	_Write_Com_12864
(0134) 		for(j=0;j<128;j++)
     D28 2766      CLR	R22
     D29 C00E      RJMP	0x0D38
(0135) 		{
(0136) 			Write_Data_12864(lcd_ram_12864[i][j]);
     D2A E880      LDI	R24,0x80
     D2B 9F84      MUL	R24,R20
     D2C 0110      MOVW	R2,R0
     D2D E080      LDI	R24,0
     D2E E091      LDI	R25,1
     D2F 0E28      ADD	R2,R24
     D30 1E39      ADC	R3,R25
     D31 2FE6      MOV	R30,R22
     D32 27FF      CLR	R31
     D33 0DE2      ADD	R30,R2
     D34 1DF3      ADC	R31,R3
     D35 8100      LDD	R16,Z+0
     D36 D14A      RCALL	_Write_Data_12864
     D37 9563      INC	R22
     D38 3860      CPI	R22,0x80
     D39 F380      BCS	0x0D2A
     D3A 9543      INC	R20
     D3B 3048      CPI	R20,0x8
     D3C F318      BCS	0x0D20
     D3D 9169      LD	R22,Y+
     D3E 9149      LD	R20,Y+
     D3F 9508      RET
_Ram_Ascii8x16_12864:
  cow_num              --> Y,+1
  sizeb                --> R10
  i                    --> R20
  j                    --> R14
  k                    --> R22
  p                    --> R12
  x                    --> Y,+12
  y                    --> Y,+10
     D40 940E 0EF8 CALL	push_arg4
     D42 940E 0F08 CALL	push_xgsetF0FC
     D44 84CE      LDD	R12,Y+14
     D45 84DF      LDD	R13,Y+15
(0137) 		}
(0138) 
(0139) 	}
(0140) }
(0141) 
(0142) void Ram_Ascii8x16_12864//指定位置显示字符串8*16 到ram
(0143) 			(
(0144) 				unsigned char y, //显示的Y坐标
(0145) 			  	unsigned char x, //显示的X坐标
(0146) 			  	unsigned char *p//字符指针 
(0147) 			 )
(0148) {
(0149) 	unsigned char j=0,i=0,k=0;
     D46 24EE      CLR	R14
     D47 2744      CLR	R20
     D48 2766      CLR	R22

⌨️ 快捷键说明

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