📄 gps.lst
字号:
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 + -