📄 1602.lst
字号:
__start:
__text_start:
1D E5CF LDI R28,0x5F
1E E0D2 LDI R29,2
1F BFCD OUT 0x3D,R28
20 BFDE OUT 0x3E,R29
21 51CE SUBI R28,0x1E
22 40D0 SBCI R29,0
23 EA0A LDI R16,0xAA
24 8308 STD Y+0,R16
25 2400 CLR R0
26 E6E0 LDI R30,0x60
27 E0F0 LDI R31,0
28 E010 LDI R17,0
29 36E0 CPI R30,0x60
2A 07F1 CPC R31,R17
2B F011 BEQ 0x002E
2C 9201 ST R0,Z+
2D CFFB RJMP 0x0029
2E 8300 STD Z+0,R16
2F E3EA LDI R30,0x3A
30 E0F0 LDI R31,0
31 E6A0 LDI R26,0x60
32 E0B0 LDI R27,0
33 E010 LDI R17,0
34 E000 LDI R16,0
35 BF0B OUT 0x3B,R16
36 33EA CPI R30,0x3A
37 07F1 CPC R31,R17
38 F021 BEQ 0x003D
39 95C8 LPM
3A 9631 ADIW R30,1
3B 920D ST R0,X+
3C CFF9 RJMP 0x0036
3D D06F RCALL _main
_exit:
3E CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
3F D079 RCALL push_xgsetF000
FILE: E:\AVR程序\OK\1602\1602.c
(0001) #include"1602.h"
(0002)
(0003) #pragma data:code
(0004) const uchar table[]="I LOVE AVR !"; //双引号是将这些字符转化成ASCII码
(0005) const uchar table1[]="zhang yi !";
(0006)
(0007) void delay(uint ms)
(0008) {
(0009) uint i,j;
(0010) for(i=0;i<ms;i++)
40 2744 CLR R20
41 2755 CLR R21
42 C00B RJMP 0x004E
(0011) {
(0012) for(j=0;j<1141;j++);
43 2766 CLR R22
44 2777 CLR R23
45 C002 RJMP 0x0048
46 5F6F SUBI R22,0xFF
47 4F7F SBCI R23,0xFF
48 3765 CPI R22,0x75
49 E0E4 LDI R30,4
4A 077E CPC R23,R30
4B F3D0 BCS 0x0046
4C 5F4F SUBI R20,0xFF
4D 4F5F SBCI R21,0xFF
4E 1740 CP R20,R16
4F 0751 CPC R21,R17
50 F390 BCS 0x0043
51 C06C RJMP pop_xgsetF000
_write_com:
com --> R10
52 92AA ST R10,-Y
53 2EA0 MOV R10,R16
(0013) }
(0014) }
(0015)
(0016) void write_com(uchar com) //写指令
(0017) {
(0018) CLR_RS_1602; //选择命令端
54 98AD CBI 0x15,5
(0019) CLR_RW_1602; //选择写端
55 98AE CBI 0x15,6
(0020) delay(1); //延时1ms
56 E001 LDI R16,1
57 E010 LDI R17,0
58 DFE6 RCALL _delay
(0021)
(0022)
(0023) SET_E_1602;
59 9AAF SBI 0x15,7
(0024) PORTA=com;
5A BAAB OUT 0x1B,R10
(0025) CLR_E_1602;
5B 98AF CBI 0x15,7
5C 90A9 LD R10,Y+
5D 9508 RET
_write_dat:
dat --> R10
5E 92AA ST R10,-Y
5F 2EA0 MOV R10,R16
(0026) }
(0027)
(0028) void write_dat(uchar dat) //写数据
(0029) {
(0030) SET_RS_1602; //选择数据端
60 9AAD SBI 0x15,5
(0031) CLR_RW_1602; //选择写端
61 98AE CBI 0x15,6
(0032) delay(1); //延时1ms
62 E001 LDI R16,1
63 E010 LDI R17,0
64 DFDA RCALL _delay
(0033)
(0034) SET_E_1602;
65 9AAF SBI 0x15,7
(0035) PORTA=dat;
66 BAAB OUT 0x1B,R10
(0036) CLR_E_1602;
67 98AF CBI 0x15,7
68 90A9 LD R10,Y+
69 9508 RET
(0037)
(0038) }
(0039)
(0040) void LCD_init()
(0041) {
(0042) write_com(0X38); //初始化设置,显示模式设置
_LCD_init:
6A E308 LDI R16,0x38
6B DFE6 RCALL _write_com
(0043) write_com(0X0C); //0X0C去光标
6C E00C LDI R16,0xC
6D DFE4 RCALL _write_com
(0044) write_com(0X06); //地址从左往右加1
6E E006 LDI R16,6
6F DFE2 RCALL _write_com
(0045) write_com(0X01);
70 E001 LDI R16,1
71 DFE0 RCALL _write_com
(0046) delay(5);
72 E005 LDI R16,5
73 E010 LDI R17,0
74 DFCA RCALL _delay
75 9508 RET
_display:
i --> R20
76 934A ST R20,-Y
(0047) }
(0048) void display()
(0049) {
(0050) /*******************第一行显示**********/
(0051) uchar i;
(0052) write_com(0X80+0X00);
77 E800 LDI R16,0x80
78 DFD9 RCALL _write_com
(0053) delay(5);
79 E005 LDI R16,5
7A E010 LDI R17,0
7B DFC3 RCALL _delay
(0054) for(i=0;i<12;i++)
7C 2744 CLR R20
7D C00C RJMP 0x008A
(0055) {
(0056) write_dat(table[i]);
7E E282 LDI R24,0x22
7F E090 LDI R25,0
80 2FE4 MOV R30,R20
81 27FF CLR R31
82 0FE8 ADD R30,R24
83 1FF9 ADC R31,R25
84 9104 LPM R16,0(Z)
85 DFD8 RCALL _write_dat
(0057) delay(5);
86 E005 LDI R16,5
87 E010 LDI R17,0
88 DFB6 RCALL _delay
89 9543 INC R20
8A 304C CPI R20,0xC
8B F390 BCS 0x007E
(0058)
(0059) }
(0060)
(0061) /******************第二行显示***************/
(0062) write_com(0X80+0X40);
8C EC00 LDI R16,0xC0
8D DFC4 RCALL _write_com
(0063) delay(5);
8E E005 LDI R16,5
8F E010 LDI R17,0
90 DFAE RCALL _delay
(0064) for(i=0;i<10;i++)
91 2744 CLR R20
92 C00C RJMP 0x009F
(0065) {
(0066) write_dat(table1[i]);
93 E28F LDI R24,0x2F
94 E090 LDI R25,0
95 2FE4 MOV R30,R20
96 27FF CLR R31
97 0FE8 ADD R30,R24
98 1FF9 ADC R31,R25
99 9104 LPM R16,0(Z)
9A DFC3 RCALL _write_dat
(0067) delay(5);
9B E005 LDI R16,5
9C E010 LDI R17,0
9D DFA1 RCALL _delay
9E 9543 INC R20
9F 304A CPI R20,0xA
A0 F390 BCS 0x0093
(0068) }
(0069)
(0070) for(i=0;i<15;i++)
A1 2744 CLR R20
A2 C006 RJMP 0x00A9
(0071) {
(0072) write_com(0x1C);
A3 E10C LDI R16,0x1C
A4 DFAD RCALL _write_com
(0073) delay(100);
A5 E604 LDI R16,0x64
A6 E010 LDI R17,0
A7 DF97 RCALL _delay
A8 9543 INC R20
A9 304F CPI R20,0xF
AA F3C0 BCS 0x00A3
AB 9149 LD R20,Y+
AC 9508 RET
(0074)
(0075) }
(0076) }
(0077) void main()
(0078) {
(0079) DDRA=0XFF;
_main:
AD EF8F LDI R24,0xFF
AE BB8A OUT 0x1A,R24
(0080) DDRC|=BIT(5)|BIT(6)|BIT(7);
AF B384 IN R24,0x14
B0 6E80 ORI R24,0xE0
B1 BB84 OUT 0x14,R24
(0081) CLR_E_1602;
B2 98AF CBI 0x15,7
(0082)
(0083)
(0084)
(0085) LCD_init();
B3 DFB6 RCALL _LCD_init
(0086) delay(20);
B4 E104 LDI R16,0x14
B5 E010 LDI R17,0
B6 DF88 RCALL _delay
(0087) //write_com(0x84);
(0088) //write_dat(0x34);
(0089) display();
FILE: <library>
B7 DFBE RCALL _display
B8 9508 RET
push_xgsetF000:
B9 937A ST R23,-Y
BA 936A ST R22,-Y
BB 935A ST R21,-Y
BC 934A ST R20,-Y
BD 9508 RET
pop_xgsetF000:
BE 9149 LD R20,Y+
BF 9159 LD R21,Y+
C0 9169 LD R22,Y+
C1 9179 LD R23,Y+
C2 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -