📄 no2.lst
字号:
__start:
__text_start:
CA E5CF LDI R28,0x5F
CB E0D4 LDI R29,4
CC BFCD OUT 0x3D,R28
CD BFDE OUT 0x3E,R29
CE 51CE SUBI R28,0x1E
CF 40D0 SBCI R29,0
D0 EA0A LDI R16,0xAA
D1 8308 STD Y+0,R16
D2 2400 CLR R0
D3 EAE0 LDI R30,0xA0
D4 E0F1 LDI R31,1
D5 E011 LDI R17,1
D6 3AE0 CPI R30,0xA0
D7 07F1 CPC R31,R17
D8 F011 BEQ 0x00DB
D9 9201 ST R0,Z+
DA CFFB RJMP 0x00D6
DB 8300 STD Z+0,R16
DC E5E4 LDI R30,0x54
DD E0F0 LDI R31,0
DE E6A0 LDI R26,0x60
DF E0B0 LDI R27,0
E0 E011 LDI R17,1
E1 E000 LDI R16,0
E2 BF0B OUT 0x3B,R16
E3 39E4 CPI R30,0x94
E4 07F1 CPC R31,R17
E5 F021 BEQ 0x00EA
E6 95C8 LPM
E7 9631 ADIW R30,1
E8 920D ST R0,X+
E9 CFF9 RJMP 0x00E3
EA 940E 02D2 CALL _main
_exit:
EC CFFF RJMP _exit
FILE: D:\Proteus\Proteus练习\新建文件夹\NO2.C
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003)
(0004) #define uchar unsigned char
(0005) #define uint unsigned int
(0006) #define LEFT 0
(0007) #define RIGHT 1
(0008) #define CMD 0
(0009) #define DATA 1
(0010) #define LCD_STATUS_BUSY 0x80
(0011) #define START_LINE0 0xc0
(0012) #define DISPLAY_ON 0x3f
(0013) #define DISPLAY_OFF 0x3e
(0014) #define PARA1 0x40
(0015) /*-----------------------------------------------------------------------
(0016) 延时函数
(0017) 系统时钟:8M
(0018) -----------------------------------------------------------------------*/
(0019)
(0020) uchar time_logo[5][32] = {
(0021) /*-- 文字: 时 --*/
(0022) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0023) 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
(0024) 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
(0025)
(0026) /*-- 文字: 爱 --*/
(0027) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0028) 0x40,0xB0,0x92,0x96,0x9A,0x92,0xF2,0x9E,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00,
(0029) 0x00,0x00,0x40,0x30,0x8C,0x83,0x46,0x2A,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,0x00,
(0030)
(0031) /*-- 文字: 你 --*/
(0032) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0033) 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
(0034) 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,
(0035) /*-- 文字: 我 --*/
(0036) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0037) 0x20,0x24,0x24,0x24,0xfe,0x23,0x22,0x20,0xFF,0x20,0x22,0xac,0x20,0x30,0x20,0x00,
(0038) 0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,
(0039)
(0040) };
(0041)
(0042) uchar menu[5][32] = {
(0043) /*-- 文字: 一 --*/
(0044) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0045) 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0x00,
(0046) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0047) /*-- 文字: 二 --*/
(0048) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0049) 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x008,0x0c,0x08,0x00,0x00,0x00,
(0050) 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
(0051) /*-- 文字: 三 --*/
(0052) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0053) 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x084,0xc4,0x86,0x04,0x00,0x00,
(0054) 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
(0055) /*-- 文字: 四 --*/
(0056) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0057) 0x00,0xfc,0x04,0x04,0x04,0xfc,0x04,0x04,0x04,0xfc,0x004,0x04,0x04,0xfe,0x04,0x00,
(0058) 0x00,0x7f,0x20,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x20,0x22,0x22,0x7f,0x00,0x00,
(0059)
(0060) };
(0061)
(0062)
(0063) void delay_1us(void); //1us延时函数
(0064) void delay_nus(unsigned int n); //N us延时函数
(0065) void delay_1ms(void) ; //1ms延时函数
(0066) void delay_nms(unsigned int n) ; //N ms延时函数
(0067)
(0068) /***********************************************************************/
(0069) /**********************************************************************/
(0070) void delay_1us(void) //1us延时函数
(0071) {
(0072) asm("nop");
_delay_1us:
ED 0000 NOP
EE 9508 RET
_delay_nus:
i --> R10
n --> R12
EF 940E 031A CALL push_xgset003C
F1 0168 MOVW R12,R16
(0073) }
(0074)
(0075) void delay_nus(unsigned int n) //N us延时函数
(0076) {
(0077) unsigned int i=0;
F2 24AA CLR R10
F3 24BB CLR R11
(0078) for (i=0;i<n;i++)
F4 C004 RJMP 0x00F9
(0079) delay_1us();
F5 DFF7 RCALL _delay_1us
F6 01C5 MOVW R24,R10
F7 9601 ADIW R24,1
F8 015C MOVW R10,R24
F9 14AC CP R10,R12
FA 04BD CPC R11,R13
FB F3C8 BCS 0x00F5
FC 940C 0308 JMP pop_xgset003C
(0080) }
(0081)
(0082) void delay_1ms(void) //1ms延时函数
(0083) {
(0084) unsigned int i;
(0085) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
FE 2700 CLR R16
FF 2711 CLR R17
100 C002 RJMP 0x0103
101 5F0F SUBI R16,0xFF
102 4F1F SBCI R17,0xFF
103 3704 CPI R16,0x74
104 E0E4 LDI R30,4
105 071E CPC R17,R30
106 F3D0 BCS 0x0101
107 9508 RET
_delay_nms:
i --> R10
n --> R12
108 940E 031A CALL push_xgset003C
10A 0168 MOVW R12,R16
(0086) }
(0087)
(0088) void delay_nms(unsigned int n) //N ms延时函数
(0089) {
(0090) unsigned int i=0;
10B 24AA CLR R10
10C 24BB CLR R11
(0091) for (i=0;i<n;i++)
10D C004 RJMP 0x0112
(0092) {
(0093) delay_1ms();
10E DFEF RCALL _delay_1ms
10F 01C5 MOVW R24,R10
110 9601 ADIW R24,1
111 015C MOVW R10,R24
112 14AC CP R10,R12
113 04BD CPC R11,R13
114 F3C8 BCS 0x010E
115 940C 0308 JMP pop_xgset003C
_delay:
i --> R10
j --> R12
ms --> R16
117 940E 031A CALL push_xgset003C
(0094) }
(0095) }
(0096)
(0097) void delay(uint ms)
(0098) {
(0099) uint i,j;
(0100) for(i=0;i<ms;i++)
119 24AA CLR R10
11A 24BB CLR R11
11B C00E RJMP 0x012A
(0101) {
(0102) for(j=0;j<1141;j++);
11C 24CC CLR R12
11D 24DD CLR R13
11E C003 RJMP 0x0122
11F 01C6 MOVW R24,R12
120 9601 ADIW R24,1
121 016C MOVW R12,R24
122 01C6 MOVW R24,R12
123 3785 CPI R24,0x75
124 E0E4 LDI R30,4
125 079E CPC R25,R30
126 F3C0 BCS 0x011F
127 01C5 MOVW R24,R10
128 9601 ADIW R24,1
129 015C MOVW R10,R24
12A 16A0 CP R10,R16
12B 06B1 CPC R11,R17
12C F378 BCS 0x011C
12D 940C 0308 JMP pop_xgset003C
(0103) }
(0104) }
(0105) void Lcd_Write_Byte(uchar temp)
(0106) {
(0107) PORTB|=BIT(0);
_Lcd_Write_Byte:
temp --> R16
12F 9AC0 SBI 0x18,0
(0108) PORTB&=~BIT(1); //W
130 98C1 CBI 0x18,1
(0109) PORTB|=BIT(4); //E使能
131 9AC4 SBI 0x18,4
(0110) DDRA=0xff; //a输出
132 EF8F LDI R24,0xFF
133 BB8A OUT 0x1A,R24
(0111) PORTA=temp;
134 BB0B OUT 0x1B,R16
(0112) asm("nop");
135 0000 NOP
(0113) asm("nop");
136 0000 NOP
(0114) asm("nop");
137 0000 NOP
(0115) asm("nop");
138 0000 NOP
(0116) PORTB&=~BIT(4);
139 98C4 CBI 0x18,4
(0117) PORTA=0xff;
13A BB8B OUT 0x1B,R24
13B 9508 RET
(0118) }
(0119) void Lcd_Write_COM(uchar COL)
(0120) {
(0121) PORTB&=~BIT(0);
_Lcd_Write_COM:
COL --> R16
13C 98C0 CBI 0x18,0
(0122) PORTB&=~BIT(1); //W
13D 98C1 CBI 0x18,1
(0123) PORTB|=BIT(4); //E使能
13E 9AC4 SBI 0x18,4
(0124) DDRA=0xff; //a输出
13F EF8F LDI R24,0xFF
140 BB8A OUT 0x1A,R24
(0125) PORTA=COL;
141 BB0B OUT 0x1B,R16
(0126) asm("nop");
142 0000 NOP
(0127) asm("nop");
143 0000 NOP
(0128) asm("nop");
144 0000 NOP
(0129) asm("nop");
145 0000 NOP
(0130) PORTB&=~BIT(4);
146 98C4 CBI 0x18,4
147 9508 RET
_set_page_L:
page --> R10
148 92AA ST R10,-Y
149 2EA0 MOV R10,R16
(0131)
(0132) }
(0133)
(0134)
(0135) void set_page_L(unsigned char page) /*设置X地址 设置页*/ //0-7
(0136) {
(0137) Lcd_Write_COM(0xb8|page);
14A 2D0A MOV R16,R10
14B 6B08 ORI R16,0xB8
14C DFEF RCALL _Lcd_Write_COM
14D 90A9 LD R10,Y+
14E 9508 RET
_set_page_R:
page --> R10
14F 92AA ST R10,-Y
150 2EA0 MOV R10,R16
(0138) }
(0139) void set_page_R(unsigned char page) /*设置X地址 设置页*/ //0-7
(0140) {
(0141) Lcd_Write_COM(0xb8|page);
151 2D0A MOV R16,R10
152 6B08 ORI R16,0xB8
153 DFE8 RCALL _Lcd_Write_COM
154 90A9 LD R10,Y+
155 9508 RET
_set_col_addr_L:
col --> R10
156 92AA ST R10,-Y
157 2EA0 MOV R10,R16
(0142) }
(0143)
(0144) void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
(0145) {
(0146)
(0147) Lcd_Write_COM(0x40|col);
158 2D0A MOV R16,R10
159 6400 ORI R16,0x40
15A DFE1 RCALL _Lcd_Write_COM
15B 90A9 LD R10,Y+
15C 9508 RET
_set_col_addr_R:
col --> R10
15D 92AA ST R10,-Y
15E 2EA0 MOV R10,R16
(0148) }
(0149)
(0150) void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
(0151) {
(0152) Lcd_Write_COM(0x40|col);
15F 2D0A MOV R16,R10
160 6400 ORI R16,0x40
161 DFDA RCALL _Lcd_Write_COM
162 90A9 LD R10,Y+
163 9508 RET
_Lcd_Set_X_Y:
y --> R12
x --> R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -