📄 gps.lst
字号:
(0025)
(0026) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0207 2422 CLR R2
0208 B82A OUT 0x0A,R2
(0027) UCSRA = 0x00;
0209 B82B OUT 0x0B,R2
(0028) UCSRC = BIT(URSEL) | 0x06;
020A E886 LDI R24,0x86
020B BD80 OUT 0x20,R24
(0029) UBRRL = 0XCF; //set baud rate lo
020C EC8F LDI R24,0xCF
020D B989 OUT 0x09,R24
(0030) UBRRH = 0X00; //set baud rate hi
020E BC20 OUT 0x20,R2
(0031) UCSRB = 0x90;//10010000
020F E980 LDI R24,0x90
0210 B98A OUT 0x0A,R24
(0032) UART_wp = 0;
0211 2433 CLR R3
0212 92300089 STS UART_wp+1,R3
0214 92200088 STS UART_wp,R2
(0033) read_pt = 0;
0216 92300087 STS read_pt+1,R3
0218 92200086 STS read_pt,R2
021A 9508 RET
_uart0_rx_isr:
021B 922A ST R2,-Y
021C 923A ST R3,-Y
021D 938A ST R24,-Y
021E 939A ST R25,-Y
021F 93EA ST R30,-Y
0220 93FA ST R31,-Y
0221 B62F IN R2,0x3F
0222 922A ST R2,-Y
(0034) }
(0035)
(0036) #pragma interrupt_handler uart0_rx_isr:14
(0037) void uart0_rx_isr(void)
(0038) {
(0039) //uart has received a character in UDR
(0040) if (count<max)
0223 9180048A LDS R24,count
0225 9190048B LDS R25,count+1
0227 3080 CPI R24,0
0228 E0E4 LDI R30,4
0229 079E CPC R25,R30
022A F4D4 BGE 0x0245
(0041) /* read the received data */
(0042) {
(0043) rcv_buf[UART_wp++]=UDR; /* store received data in buffer */
022B 90200088 LDS R2,UART_wp
022D 90300089 LDS R3,UART_wp+1
022F 01C1 MOVW R24,R2
0230 9601 ADIW R24,1
0231 93900089 STS UART_wp+1,R25
0233 93800088 STS UART_wp,R24
0235 E88A LDI R24,0x8A
0236 E090 LDI R25,0
0237 01F1 MOVW R30,R2
0238 0FE8 ADD R30,R24
0239 1FF9 ADC R31,R25
023A B02C IN R2,0x0C
023B 8220 STD Z+0,R2
(0044) count++;
023C 9180048A LDS R24,count
023E 9190048B LDS R25,count+1
0240 9601 ADIW R24,1
0241 9390048B STS count+1,R25
0243 9380048A STS count,R24
(0045) }
(0046)
(0047) /* calculate buffer index */
(0048) if (UART_wp==max)
0245 91800088 LDS R24,UART_wp
0247 91900089 LDS R25,UART_wp+1
0249 3080 CPI R24,0
024A E0E4 LDI R30,4
024B 079E CPC R25,R30
024C F431 BNE 0x0253
(0049) UART_wp = 0; // full return to the start
024D 2422 CLR R2
024E 2433 CLR R3
024F 92300089 STS UART_wp+1,R3
0251 92200088 STS UART_wp,R2
0253 9029 LD R2,Y+
0254 BE2F OUT 0x3F,R2
0255 91F9 LD R31,Y+
0256 91E9 LD R30,Y+
0257 9199 LD R25,Y+
0258 9189 LD R24,Y+
0259 9039 LD R3,Y+
025A 9029 LD R2,Y+
025B 9518 RETI
(0050) }
(0051)
(0052) /*********************************************************************
(0053) * read data from buffer
(0054) description: 1 close interrupt
(0055) 2 whether there are data to be read
(0056) 3 read data, and count--
(0057) 4 return the data
(0058) 5 rp point to next character
(0059) **********************************************************************/
(0060) char Read_buf(void)
(0061) {
(0062) char temp;
(0063) while ( !count);//if no data ,wait for new data
_Read_buf:
temp --> R16
025C 9020048A LDS R2,count
025E 9030048B LDS R3,count+1
0260 2022 TST R2
0261 F411 BNE 0x0264
0262 2033 TST R3
0263 F3C1 BEQ 0x025C
(0064) count--;
0264 9180048A LDS R24,count
0266 9190048B LDS R25,count+1
0268 9701 SBIW R24,1
0269 9390048B STS count+1,R25
026B 9380048A STS count,R24
(0065) temp=rcv_buf[read_pt++];
026D 90200086 LDS R2,read_pt
026F 90300087 LDS R3,read_pt+1
0271 01C1 MOVW R24,R2
0272 9601 ADIW R24,1
0273 93900087 STS read_pt+1,R25
0275 93800086 STS read_pt,R24
0277 E88A LDI R24,0x8A
0278 E090 LDI R25,0
0279 01F1 MOVW R30,R2
027A 0FE8 ADD R30,R24
027B 1FF9 ADC R31,R25
027C 8100 LDD R16,Z+0
(0066) if (read_pt==1024)
027D 91800086 LDS R24,read_pt
027F 91900087 LDS R25,read_pt+1
0281 3080 CPI R24,0
0282 E0E4 LDI R30,4
0283 079E CPC R25,R30
0284 F431 BNE 0x028B
(0067) read_pt=0;
0285 2422 CLR R2
0286 2433 CLR R3
0287 92300087 STS read_pt+1,R3
0289 92200086 STS read_pt,R2
(0068) return ( temp);
028B 9508 RET
FILE: E:\Program\gps\lcd.c
(0001) #include <iom32v.h>
(0002) #include <macros.h>
(0003) #include <def.h>
(0004) #include <lcd.h>
(0005)
(0006) extern char time[10];
(0007) extern char status;
(0008) extern char latitude[9];
(0009) extern char NSind;
(0010) extern char longtitude[10];
(0011) extern char EWind;
(0012) extern char date[6];
(0013) unsigned char lcd_display2_buffer[8][21]; //显示缓冲区,共168字节
(0014) unsigned char *lcd_display_wrp;
(0015) unsigned char *lcd_display_rdp;
(0016)
(0017) // ASCII 5x7 点的字符
(0018) const unsigned char asc [96][5] =
(0019) {
(0020) { 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
(0021) { 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
(0022) { 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
(0023) { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(0024) { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
(0025) { 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
(0026) { 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
(0027) { 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
(0028) { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
(0029) { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
(0030) { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
(0031) { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
(0032) { 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
(0033) { 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
(0034) { 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
(0035) { 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
(0036) { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
(0037) { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
(0038) { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
(0039) { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
(0040) { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
(0041) { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
(0042) { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
(0043) { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
(0044) { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
(0045) { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
(0046) { 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
(0047) { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
(0048) { 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
(0049) { 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
(0050) { 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
(0051) { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
(0052) { 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
(0053) { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
(0054) { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
(0055) { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
(0056) { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
(0057) { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
(0058) { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
(0059) { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
(0060) { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
(0061) { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
(0062) { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
(0063) { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
(0064) { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
(0065) { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
(0066) { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
(0067) { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
(0068) { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
(0069) { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
(0070) { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
(0071) { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
(0072) { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
(0073) { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
(0074) { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
(0075) { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
(0076) { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
(0077) { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
(0078) { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
(0079) { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
(0080) { 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
(0081) { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
(0082) { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
(0083) { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
(0084) { 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
(0085) { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
(0086) { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
(0087) { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
(0088) { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
(0089) { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
(0090) { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
(0091) { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
(0092) { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
(0093) { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
(0094) { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
(0095) { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
(0096) { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
(0097) { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
(0098) { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
(0099) { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
(0100) { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
(0101) { 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
(0102) { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
(0103) { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
(0104) { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
(0105) { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
(0106) { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
(0107) { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
(0108) { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
(0109) { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
(0110) { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
(0111) { 0x00, 0x08, 0x36, 0x41, 0x41 }, // {
(0112) { 0x00, 0x00, 0x7f, 0x00, 0x00 }, // |
(0113) { 0x41, 0x41, 0x36, 0x08, 0x00 }, // }
(0114) { 0x04, 0x02, 0x04, 0x08, 0x04 }, // ~
(0115) { 0x00, 0x00, 0x00, 0x00, 0x00 }, // del
(0116) };
(0117)
(0118) unsigned char temp_i;
(0119) //声明全局变量
(0120)
(0121) void display(void)
(0122) {
(0123) Write_time();
_display:
028C D005 RCALL _Write_time
(0124) Write_latitude();
028D D06E RCALL _Write_latitude
(0125) Write_longtitude();
028E D0E9 RCALL _Write_longtitude
(0126) Write_date();
028F D16B RCALL _Write_date
(0127)
(0128) lcd_display2();
0290 D374 RCALL _lcd_display2
0291 9508 RET
(0129) }
(0130)
(0131)
(0132) /*******************************************************
(0133) display every item
(0134) incluede display time ,data,latitude N/S,longtitude E/W
(0135)
(0136) ********************************************************/
(0137)
(0138) //write time to lcd buffer
(0139) void Write_time(void)
(0140) {
(0141)
(0142) char* aptr;
(0143) int i;
(0144)
(0145) aptr=time;
_Write_time:
i --> Y+1
aptr --> R16
0292 E70C LDI R16,0x7C
0293 E010 LDI R17,0
(0146)
(0147) lcd_display_wrp=&lcd_display2_buffer[1][1];
0294 EA87 LDI R24,0xA7
0295 E094 LDI R25,4
0296 93900490 STS lcd_display_wrp+1,R25
0298 9380048F STS lcd_display_wrp,R24
(0148) *lcd_display_wrp++='T';
029A E584 LDI R24,0x54
029B 91E0048F LDS R30,lcd_display_wrp
029D 91F00490 LDS R31,lcd_display_wrp+1
029F 9381 ST R24,Z+
02A0 93F00490 STS lcd_display_wrp+1,R31
02A2 93E0048F STS lcd_display_wrp,R30
(0149) *lcd_display_wrp++='I';
02A4 E489 LDI R24,0x49
02A5 9381 ST R24,Z+
02A6 93F00490 STS lcd_display_wrp+1,R31
02A8 93E0048F STS lcd_display_wrp,R30
(0150) *lcd_display_wrp++='M';
02AA E48D LDI R24,0x4D
02AB 9381 ST R24,Z+
02AC 93F00490 STS lcd_display_wrp+1,R31
02AE 93E0048F STS lcd_display_wrp,R30
(0151) *lcd_display_wrp++='E';
02B0 E485 LDI R24,0x45
02B1 9381 ST R24,Z+
02B2 93F00490 STS lcd_display_wrp+1,R31
02B4 93E0048F STS lcd_display_wrp,R30
(0152) *lcd_display_wrp++=':';
02B6 E38A LDI R24,0x3A
02B7 9381 ST R24,Z+
02B8 93F00490 STS lcd_display_wrp+1,R31
02BA 93E0048F STS lcd_display_wrp,R30
(0153)
(0154) *lcd_display_wrp++=time[0];
02BC 9020007C LDS R2,time
02BE 9221 ST R2,Z+
02BF 93F00490 STS lcd_display_wrp+1,R31
02C1 93E0048F STS lcd_display_wrp,R30
(0155) *lcd_display_wrp++=time[1];
02C3 9020007D LDS R2,time+1
02C5 9221 ST R2,Z+
02C6 93F00490 STS lcd_display_wrp+1,R31
02C8 93E0048F STS lcd_display_wrp,R30
(0156) *lcd_display_wrp++=':';
02CA 9381 ST R24,Z+
02CB 93F00490 STS lcd_display_wrp+1,R31
02CD 93E0048F STS lcd_display_wrp,R30
(0157) *lcd_display_wrp++=time[2];
02CF 9020007E LDS R2,time+2
02D1 9221 ST R2,Z+
02D2 93F00490 STS lcd_display_wrp+1,R31
02D4 93E0048F STS lcd_display_wrp,R30
(0158) *lcd_display_wrp++=time[3];
02D6 9020007F LDS R2,time+3
02D8 9221 ST R2,Z+
02D9 93F00490 STS lcd_display_wrp+1,R31
02DB 93E0048F STS lcd_display_wrp,R30
(0159) *lcd_display_wrp++=':';
02DD 9381 ST R24,Z+
02DE 93F00490 STS lcd_display_wrp+1,R31
02E0 93E0048F STS lcd_display_wrp,R30
(0160) *lcd_display_wrp++=time[4];
02E2 90200080 LDS R2,0x80
02E4 9221 ST R2,Z+
02E5 93F00490 STS lcd_display_wrp+1,R31
02E7 93E0048F STS lcd_display_wrp,R30
(0161) *lcd_display_wrp++=time[5];
02E9 90200081 LDS R2,0x81
02EB 9221 ST R2,Z+
02EC 93F00490 STS lcd_display_wrp+1,R31
02EE 93E0048F STS lcd_display_wrp,R30
(0162)
(0163) lcd_display_wrp=&lcd_display2_buffer[0][0];
02F0 E981 LDI R24,0x91
02F1 E094 LDI R25,4
02F2 93900490 STS lcd_display_wrp+1,R25
02F4 9380048F STS lcd_display_wrp,R24
(0164) lcd_display_rdp=&lcd_display2_buffer[0][0];
02F6 9390048E STS lcd_display_rdp+1,R25
02F8 9380048D STS lcd_display_rdp,R24
(0165) SEI();
02FA 9478 BSET 7
02FB 9508 RET
(0166)
(0167) }
(0168)
(0169) //write latitude to lcd buffer
(0170) void Write_latitude(void)
(0171) {
(0172)
(0173) char* aptr;
(0174) int i;
(0175)
(0176) aptr=time;
_Write_latitude:
i --> Y+1
aptr --> R16
02FC E70C LDI R16,0x7C
02FD E010 LDI R17,0
(0177)
(0178) lcd_display_wrp=&lcd_display2_buffer[2][1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -