📄 lcd_lat.lst
字号:
__text_start:
__start:
029F EFCF LDI R28,0xFF
02A0 E1D0 LDI R29,0x10
02A1 BFCD OUT 0x3D,R28
02A2 BFDE OUT 0x3E,R29
02A3 51C0 SUBI R28,0x10
02A4 40D0 SBCI R29,0
02A5 EA0A LDI R16,0xAA
02A6 8308 STD Y+0,R16
02A7 2400 CLR R0
02A8 EBE1 LDI R30,0xB1
02A9 E0F5 LDI R31,5
02AA E015 LDI R17,5
02AB 3BEA CPI R30,0xBA
02AC 07F1 CPC R31,R17
02AD F011 BEQ 0x02B0
02AE 9201 ST R0,Z+
02AF CFFB RJMP 0x02AB
02B0 8300 STD Z+0,R16
02B1 E8EC LDI R30,0x8C
02B2 E0F0 LDI R31,0
02B3 E0A0 LDI R26,0
02B4 E0B1 LDI R27,1
02B5 E015 LDI R17,5
02B6 33ED CPI R30,0x3D
02B7 07F1 CPC R31,R17
02B8 F021 BEQ 0x02BD
02B9 95C8 LPM
02BA 9631 ADIW R30,1
02BB 920D ST R0,X+
02BC CFF9 RJMP 0x02B6
02BD 940E02C0 CALL _main
_exit:
02BF CFFF RJMP _exit
_main:
i --> R20
02C0 9724 SBIW R28,4
FILE: D:\icc_work\LCD波形显示\main.c
(0001) //ICC-AVR application builder : 2007-5-23 20:55:56
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004) #include <iom128v.h>
(0005) #include <macros.h>
(0006) #include "all.h"
(0007) #define uchar unsigned char
(0008) #define uint unsigned int
(0009) void main()
(0010) {
(0011) init_devices();
02C1 940E05DA CALL _init_devices
(0012) draw_line( 34,25,56,100);
02C3 E684 LDI R24,0x64
02C4 E090 LDI R25,0
02C5 839B STD Y+3,R25
02C6 838A STD Y+2,R24
02C7 E388 LDI R24,0x38
02C8 8399 STD Y+1,R25
02C9 8388 STD Y+0,R24
02CA E129 LDI R18,0x19
02CB E030 LDI R19,0
02CC E202 LDI R16,0x22
02CD E010 LDI R17,0
02CE 940E03B7 CALL _draw_line
(0013) pic_display();
02D0 940E0337 CALL _pic_display
02D2 C00A RJMP 0x02DD
(0014) while(1)
(0015) {
(0016) uint i;
(0017) for(i=0;i<5000;i++)
02D3 2744 CLR R20
02D4 2755 CLR R21
02D5 C003 RJMP 0x02D9
(0018) {
(0019) asm("nop");
02D6 0000 NOP
02D7 5F4F SUBI R20,0xFF
02D8 4F5F SBCI R21,0xFF
02D9 3848 CPI R20,0x88
02DA E1E3 LDI R30,0x13
02DB 075E CPC R21,R30
02DC F3C8 BCS 0x02D6
02DD CFF5 RJMP 0x02D3
02DE 9624 ADIW R28,4
02DF 9508 RET
_delay:
j --> R20
i --> R22
x --> R16
02E0 940E05FE CALL push_gset2
FILE: D:\icc_work\LCD波形显示\Lcd.c
(0001) //ICC-AVR application builder : 2007-5-23 20:55:56
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004) #include <iom128v.h>
(0005) #include <macros.h>
(0006) #include "all.h"
(0007) #include "pic.h"
(0008) #define uchar unsigned char
(0009) #define uint unsigned int
(0010)
(0011) unsigned char data[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
(0012) unsigned char data2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
(0013) char *line1;
(0014) char *line2;
(0015) char *line3;
(0016) char *line4;
(0017) //延时程序
(0018) void delay(uint x)
(0019) {
(0020) uint j; uchar i;
(0021) for(j=0;j<x;j++)
02E2 2744 CLR R20
02E3 2755 CLR R21
02E4 C007 RJMP 0x02EC
(0022) {
(0023) for(i=0;i<110;i++);
02E5 2766 CLR R22
02E6 C001 RJMP 0x02E8
02E7 9563 INC R22
02E8 366E CPI R22,0x6E
02E9 F3E8 BCS 0x02E7
02EA 5F4F SUBI R20,0xFF
02EB 4F5F SBCI R21,0xFF
02EC 1740 CP R20,R16
02ED 0751 CPC R21,R17
02EE F3B0 BCS 0x02E5
02EF 940E05F2 CALL pop_gset2
02F1 9508 RET
_lcm_out:
d --> R20
i --> R22
a --> R16
02F2 940E05FE CALL push_gset2
(0024) }
(0025) }
(0026) /**********************************************/
(0027) /*液晶发送子程序(串口)
(0028) 输入数据:要发送的8位数据
(0029) 输出:无
(0030) 作者:李怀前
(0031) 修改时间:2006-05-26
(0032) /*********************************************/
(0033) void lcm_out(char a)
(0034) {
(0035) char i,d;
(0036) for(i=0;i<8;i++)
02F4 2766 CLR R22
02F5 C00A RJMP 0x0300
(0037) {
(0038) PORTB&=~BIT(PB1);//E=0
02F6 98C1 CBI 0x18,1
(0039) d=a&0x80;
02F7 2F40 MOV R20,R16
02F8 7840 ANDI R20,0x80
(0040) if(d)
02F9 F011 BEQ 0x02FC
(0041) PORTB|=BIT(PB0); //R/W=1
02FA 9AC0 SBI 0x18,0
02FB C001 RJMP 0x02FD
(0042) else
(0043) PORTB&=~BIT(PB0);//R/W=0
02FC 98C0 CBI 0x18,0
(0044) a<<=1;
02FD 0F00 LSL R16
(0045) PORTB|=BIT(PB1); //E=1
02FE 9AC1 SBI 0x18,1
02FF 9563 INC R22
0300 3068 CPI R22,0x8
0301 F3A0 BCS 0x02F6
0302 940E05F2 CALL pop_gset2
0304 9508 RET
_wr_com:
s --> R20
i --> R20
a --> R22
0305 940E05FE CALL push_gset2
0307 2F60 MOV R22,R16
(0046) }
(0047) }
(0048) /***********************************************/
(0049) /*液晶写控制字程序
(0050) 输入数据:要写入的8位数据
(0051) 输出:无
(0052) 修改时间:2007-5-26
(0053) /**********************************************/
(0054) void wr_com(uchar a)
(0055) {
(0056) uchar s,i;
(0057) s=a&0xf0;
0308 2F46 MOV R20,R22
0309 7F40 ANDI R20,0xF0
(0058) lcm_out(0xf8);
030A EF08 LDI R16,0xF8
030B DFE6 RCALL _lcm_out
(0059) lcm_out(s);
030C 2F04 MOV R16,R20
030D DFE4 RCALL _lcm_out
(0060) s=a&0x0f;
030E 2F46 MOV R20,R22
030F 704F ANDI R20,0xF
(0061) s<<=4;
0310 2F84 MOV R24,R20
0311 708F ANDI R24,0xF
0312 9582 SWAP R24
(0062) lcm_out(s);
0313 2F08 MOV R16,R24
0314 DFDD RCALL _lcm_out
(0063) for(i=0;i<250;i++)//延时
0315 2744 CLR R20
0316 C002 RJMP 0x0319
(0064) {
(0065) asm("nop");
0317 0000 NOP
0318 9543 INC R20
0319 3F4A CPI R20,0xFA
031A F3E0 BCS 0x0317
031B 940E05F2 CALL pop_gset2
031D 9508 RET
_wr_date:
s --> R20
i --> R20
a --> R22
031E 940E05FE CALL push_gset2
0320 2F60 MOV R22,R16
(0066) }
(0067) }
(0068) /***********************************************/
(0069) /*液晶写数据字程序
(0070) 输入数据:要写入的8位数据
(0071) 输出:无
(0072) 修改时间:2007-5-26
(0073) /**********************************************/
(0074) void wr_date(uchar a)
(0075) {
(0076) uchar s,i;
(0077) s=a&0xf0;
0321 2F46 MOV R20,R22
0322 7F40 ANDI R20,0xF0
(0078) lcm_out(0xfa);
0323 EF0A LDI R16,0xFA
0324 DFCD RCALL _lcm_out
(0079) lcm_out(s);
0325 2F04 MOV R16,R20
0326 DFCB RCALL _lcm_out
(0080) s=a&0x0f;
0327 2F46 MOV R20,R22
0328 704F ANDI R20,0xF
(0081) s<<=4;
0329 2F84 MOV R24,R20
032A 708F ANDI R24,0xF
032B 9582 SWAP R24
(0082) lcm_out(s);
032C 2F08 MOV R16,R24
032D DFC4 RCALL _lcm_out
(0083) for(i=0;i<250;i++)//延时
032E 2744 CLR R20
032F C002 RJMP 0x0332
(0084) {
(0085) asm("nop");
0330 0000 NOP
0331 9543 INC R20
0332 3F4A CPI R20,0xFA
0333 F3E0 BCS 0x0330
0334 940E05F2 CALL pop_gset2
0336 9508 RET
_pic_display:
d4 --> Y+1
i --> R20
d1 --> R20
LCD_X --> Y+0
d2 --> R14
LCD_Y --> R10
qq --> R12
d3 --> R22
0337 940E05F8 CALL push_gset5
0339 9721 SBIW R28,1
(0086) }
(0087) }
(0088) /***********************************************/
(0089) /*液晶图形显示子程序
(0090) 输入数据:要写入的8位数据
(0091) 输出:无
(0092) 修改时间:2007-5-26
(0093) /**********************************************/
(0094) void pic_display(void)
(0095) {
(0096) unsigned char *qq;
(0097) unsigned char d1,d2,d3,d4,LCD_X=0x80,LCD_Y=0;
033A E880 LDI R24,0x80
033B 8388 STD Y+0,R24
033C 24AA CLR R10
(0098) unsigned int i=0;
033D 2744 CLR R20
033E 2755 CLR R21
(0099) qq=data_buffer;
033F E080 LDI R24,0
0340 E091 LDI R25,1
0341 016C MOVW R12,R24
(0100) for( d1=0; d1<2; d1++ )
0342 C01D RJMP 0x0360
(0101) {
(0102) LCD_Y=0x80;
0343 E880 LDI R24,0x80
0344 2EA8 MOV R10,R24
(0103) for( d2=0; d2<32; d2++)
0345 24EE CLR R14
0346 C013 RJMP 0x035A
(0104) {
(0105) wr_com(0x34);
0347 E304 LDI R16,0x34
0348 DFBC RCALL _wr_com
(0106) wr_com(LCD_Y);
0349 2D0A MOV R16,R10
034A DFBA RCALL _wr_com
(0107) wr_com(LCD_X);
034B 8108 LDD R16,Y+0
034C DFB8 RCALL _wr_com
(0108) wr_com(0X30);
034D E300 LDI R16,0x30
034E DFB6 RCALL _wr_com
(0109) for( d3=0; d3<16; d3++ )
034F 2766 CLR R22
0350 C005 RJMP 0x0356
(0110) {
(0111) wr_date(*qq++);
0351 01F6 MOVW R30,R12
0352 9101 LD R16,Z+
0353 016F MOVW R12,R30
0354 DFC9 RCALL _wr_date
0355 9563 INC R22
0356 3160 CPI R22,0x10
0357 F3C8 BCS 0x0351
(0112) }
(0113) LCD_Y+=1;
0358 94A3 INC R10
0359 94E3 INC R14
035A 2D8E MOV R24,R14
035B 3280 CPI R24,0x20
035C F350 BCS 0x0347
(0114) }
(0115) LCD_X=0x88;
035D E888 LDI R24,0x88
035E 8388 STD Y+0,R24
035F 9543 INC R20
0360 3042 CPI R20,2
0361 F308 BCS 0x0343
(0116) }
(0117) wr_com(0x36);
0362 E306 LDI R16,0x36
0363 DFA1 RCALL _wr_com
(0118) delay(80);
0364 E500 LDI R16,0x50
0365 E010 LDI R17,0
0366 DF79 RCALL _delay
(0119) wr_com(0x30);
0367 E300 LDI R16,0x30
0368 DF9C RCALL _wr_com
(0120) delay(80);
0369 E500 LDI R16,0x50
036A E010 LDI R17,0
036B DF74 RCALL _delay
036C 9621 ADIW R28,1
036D 940E05F5 CALL pop_gset5
036F 9508 RET
_draw_point:
byte_adr --> R22
LCD_Y --> R14
LCD_X --> R10
X_Position --> R12
X_Temp --> R20
State --> R6
Y --> R18
X --> R16
0370 940E05F8 CALL push_gset5
0372 846A LDD R6,Y+10
(0121) }
(0122) /***********************************************/
(0123) /*液晶画线子程序
(0124) 输入数据:要写入的8位数据
(0125) 输出:无
(0126) 修改时间:2007-5-26
(0127) /**********************************************/
(0128) void draw_point(unsigned char X,unsigned char Y,char State)
(0129) {
(0130) unsigned char LCD_X=0,LCD_Y=0;
0373 24AA CLR R10
0374 24EE CLR R14
(0131) unsigned int X_Temp = 0;
0375 2744 CLR R20
0376 2755 CLR R21
(0132) unsigned int X_Position = 0;
0377 24CC CLR R12
0378 24DD CLR R13
(0133) unsigned int byte_adr;
(0134) X_Temp = X;
0379 2F40 MOV R20,R16
037A 2755 CLR R21
037B C005 RJMP 0x0381
(0135) while (X_Temp>7)
(0136) {
(0137) X_Position++;
037C 01C6 MOVW R24,R12
037D 9601 ADIW R24,1
037E 016C MOVW R12,R24
(0138) X_Temp = X_Temp-8;
037F 5048 SUBI R20,0x8
0380 4050 SBCI R21,0
0381 E087 LDI R24,7
0382 E090 LDI R25,0
0383 1784 CP R24,R20
0384 0795 CPC R25,R21
0385 F3B0 BCS 0x037C
(0139) }
(0140)
(0141) if (X_Temp<=7)
0386 1784 CP R24,R20
0387 0795 CPC R25,R21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -